From 8cae1e5788ffe84d86d08c1c205acde093aa0e22 Mon Sep 17 00:00:00 2001 From: alan-hacktron Date: Fri, 19 Jun 2026 13:42:06 +0800 Subject: [PATCH 1/2] docs: add skip.authors and include.labels/authors to config reference --- code-review/config.mdx | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/code-review/config.mdx b/code-review/config.mdx index fd0ab62..d3efe58 100644 --- a/code-review/config.mdx +++ b/code-review/config.mdx @@ -6,6 +6,7 @@ description: "Use .hacktron/config.yaml to control which pull and merge requests Add a `.hacktron/config.yaml` file to your repository to control Hacktron's Code Review behavior: - **Skip** specific pull and merge requests so they aren't scanned. +- **Include** specific pull and merge requests to be scanned. - **Fail** the Hacktron check when a finding meets a severity threshold, so risky changes can't merge. This is separate from [`.hacktron/rules.md`](/code-review/rules), which shapes the *quality* of a review. `config.yaml` controls *whether* a PR is scanned and *whether* its check passes. @@ -47,6 +48,8 @@ skip: paths: - "vendor/**" - "**/*.md" + authors: + - dependabot[bot] # Fail the Hacktron check when a finding is at or above this severity. fail_on: @@ -63,9 +66,10 @@ Rules are evaluated in this order; the first match wins: | Key | Matches when | Match style | |---|---|---| -| `skip.labels` | the PR/MR carries one of these labels | exact, case-insensitive | +| `skip.labels` | the PR/MR carries one of these labels | case-insensitive | | `skip.keywords` | the PR/MR **title** contains one of these strings | case-insensitive substring | | `skip.paths` | **every** changed file matches one of these patterns | gitignore-style globs | +| `skip.authors` | the PR/MR was opened by one of these usernames | case-insensitive | ```yaml skip: @@ -76,6 +80,8 @@ skip: paths: - "docs/**" # skip when the PR only touches these paths - "**/*.md" + authors: + - "dependabot[bot]" # skip all PRs opened by dependabot ``` @@ -87,6 +93,32 @@ skip: A manual `@hacktronai review` comment always runs a scan, even when a `skip` rule would otherwise match — use it to force a one-off review of an otherwise-skipped PR. +## Include scans + +Use the include block to scan **only** pull and merge requests that match specific rules. Similarly, Hacktron records a skip check comment in your PRs/MRs. + +```yaml +include: + labels: + - security-review # only scan PRs labelled "security-review" + authors: + - alice # always scan Alice's PRs + - bob +``` + +| Key | Matches when | +|---|---| +| `include.labels` | the PR/MR carries at least one of these labels (case-insensitive) | +| `include.authors` | the PR/MR was opened by one of these usernames (case-insensitive) | + +Both `include.labels` and `include.authors` can be set at the same time. If a PR matches either, it is scanned. + + + `include` rules are **ignored when any `skip` rule is present** in your config. + Use one or the other. For example, if you need to exempt specific authors while + scanning everything else, use `skip.authors` on its own. + + ## Fail the check on findings By default, the Hacktron check is green as long as the scan completes — findings are posted as inline comments but don't block the merge. Set `fail_on.severity` to turn the check **red** when a finding is found at or above a severity threshold. From 2e9e070d46b420b8522a18cb29365976e612e50f Mon Sep 17 00:00:00 2001 From: alan-hacktron Date: Sun, 5 Jul 2026 00:09:35 +0800 Subject: [PATCH 2/2] docs: add organization settings page for scan filters and check gate Documents the org-wide scan filters shipped in web PR #540 (branches, labels, authors, keywords) and consolidates the check gate and SLA threshold settings, previously scattered across the dashboard page, into a single organization-settings page. Updates the repository config reference for the new config.yaml fields and per-dimension precedence rules, and rewrites the setup guide's branch coverage step now that per-repo branch selection has moved to org settings and config.yaml. --- code-review/config.mdx | 56 ++++++++++--------- code-review/setup.mdx | 11 ++-- docs.json | 3 +- images/scan_filters.png | Bin 0 -> 65492 bytes platform/dashboard.mdx | 15 +---- platform/organization-settings.mdx | 85 +++++++++++++++++++++++++++++ 6 files changed, 124 insertions(+), 46 deletions(-) create mode 100644 images/scan_filters.png create mode 100644 platform/organization-settings.mdx diff --git a/code-review/config.mdx b/code-review/config.mdx index c2ab19a..2c143ea 100644 --- a/code-review/config.mdx +++ b/code-review/config.mdx @@ -60,12 +60,15 @@ Every key is optional. An empty or absent `config.yaml` means Hacktron behaves a ## Skip scans -Use the `skip` block to tell Hacktron not to scan a pull or merge request. When a PR matches, Hacktron records a **skipped** check on the PR/MR and posts a short comment naming the rule that matched. No scan runs, and **no developer seat is used**. +Branches, labels, authors, and keywords can be set per repository here, or org-wide in [Organization settings](/platform/organization-settings#scan-filters). Repo config overrides only the dimensions it sets; other dimensions keep the org default. -Rules are evaluated in this order; the first match wins: +The `skip` block tells Hacktron not to scan a pull or merge request. A match records a **skipped** check with a comment naming the rule, and uses no developer seat. + +Rules are evaluated in this order, first match applies: | Key | Matches when | Match style | |---|---|---| +| `skip.branches` | the PR/MR targets one of these branches | case-insensitive glob | | `skip.labels` | the PR/MR carries one of these labels | case-insensitive | | `skip.keywords` | the PR/MR **title** contains one of these strings | case-insensitive substring | | `skip.paths` | **every** changed file matches one of these patterns | gitignore-style globs | @@ -73,6 +76,8 @@ Rules are evaluated in this order; the first match wins: ```yaml skip: + branches: + - "release/legacy/**" # skip PRs targeting a legacy release branch labels: - hacktron-skip # label the PR "hacktron-skip" to skip it keywords: @@ -84,6 +89,14 @@ skip: - "dependabot[bot]" # skip all PRs opened by dependabot ``` + + `skip.branches` and `include.branches` (and their org-wide equivalents) accept + glob patterns mixed with literals: `*`, `**`, `?`, and `{a,b}` brace expansion. + Matching is case-insensitive. `[`, `]`, and a leading `!` are literal, not + special syntax. Each list allows up to 50 patterns, up to 100 characters each. + Labels, authors, and keywords allow up to 20 entries each. + + `skip.paths` skips a scan **only when every changed file matches** one of the patterns. If even one changed file falls outside the patterns, the PR is @@ -95,29 +108,34 @@ A manual `@hacktronai review` comment always runs a scan, even when a `skip` rul ## Include scans -Use the include block to scan **only** pull and merge requests that match specific rules. Similarly, Hacktron records a skip check comment in your PRs/MRs. +Use the include block to scan **only** pull and merge requests that match specific rules. Hacktron records a skip check comment on PRs/MRs it doesn't scan. ```yaml include: + branches: + - "main" + - "release/**" # only scan PRs targeting main or a release branch labels: - - security-review # only scan PRs labelled "security-review" + - security-review # only scan PRs labelled "security-review" authors: - - alice # always scan Alice's PRs + - alice # always scan Alice's and Bob's PRs - bob + keywords: + - "please review" # only scan PRs whose title contains this ``` | Key | Matches when | |---|---| +| `include.branches` | the PR/MR targets one of these branches (case-insensitive glob) | | `include.labels` | the PR/MR carries at least one of these labels (case-insensitive) | | `include.authors` | the PR/MR was opened by one of these usernames (case-insensitive) | +| `include.keywords` | the PR/MR title contains one of these strings (case-insensitive substring) | -Both `include.labels` and `include.authors` can be set at the same time. If a PR matches either, it is scanned. +`include.labels: [feature, bugfix]` matches a PR with either label. Setting `include` on more than one dimension requires matching all of them: `include.branches: [main]` with `include.authors: [alice]` only scans Alice's PRs targeting `main`. - - `include` rules are **ignored when any `skip` rule is present** in your config. - Use one or the other. For example, if you need to exempt specific authors while - scanning everything else, use `skip.authors` on its own. - + + `skip` and `include` can both be set for the same dimension: `skip.labels: [wip]` with `include.labels: [feature]` scans PRs labelled `feature`, except ones also labelled `wip`. + ## Fail the check on findings @@ -138,21 +156,7 @@ You can set the threshold org-wide from the settings page, or per repository in - Set a default for all repositories in your organization: - - - - Select your organization, then go to **Settings**. - - - Locate **Severity threshold**, above the SLA Thresholds card. - - ![Severity threshold settings card](/images/severity_threshold.png) - - - Pick a severity from the dropdown: **Critical**, **High**, **Medium**, or **Low**. Select **Off** to disable the gate org-wide. - - + Set a default for all repositories in your organization from [Organization settings](/platform/organization-settings#check-gate). diff --git a/code-review/setup.mdx b/code-review/setup.mdx index 6770d9c..c933dc3 100644 --- a/code-review/setup.mdx +++ b/code-review/setup.mdx @@ -41,12 +41,11 @@ You also need permission to connect your Git provider. For more details, choose - For each repository, choose whether Hacktron should review pull requests or - merge requests targeting all branches or only specific branches such as - `main` or `production`. - - Branches - + Hacktron reviews all branches by default. Restrict this org-wide in + [Organization settings](/platform/organization-settings#scan-filters), or + per repository via `skip.branches` / `include.branches` in + `.hacktron/config.yaml`. See [Repository + configuration](/code-review/config) for the syntax. Go to an existing pull request or merge request and comment `@hacktronai review`. diff --git a/docs.json b/docs.json index 102437a..4d29841 100644 --- a/docs.json +++ b/docs.json @@ -73,7 +73,8 @@ "group": "Account", "pages": [ "platform/account-settings", - "platform/security-settings" + "platform/security-settings", + "platform/organization-settings" ] }, { diff --git a/images/scan_filters.png b/images/scan_filters.png new file mode 100644 index 0000000000000000000000000000000000000000..7504b860cf341da8f3f1447a6aabede7f7303fd7 GIT binary patch literal 65492 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 literal 0 HcmV?d00001 diff --git a/platform/dashboard.mdx b/platform/dashboard.mdx index 6628d20..249aec7 100644 --- a/platform/dashboard.mdx +++ b/platform/dashboard.mdx @@ -18,22 +18,11 @@ by clicking on **Export**. ## Resolution Health - From the settings page, you can configure SLA tresholds for remediating findings of different severities. - - SLA thresholds - - This is used to track your resolution health. Hacktron calculates your Mean Time to Resolution (MTTR), - and the percentage of findings that are resolved within the SLA tresholds. + Hacktron calculates your Mean Time to Resolution (MTTR) and the percentage of findings resolved within your SLA thresholds. Resolution health - ## Check gate - - From the settings page, you can also set an org-wide **Severity threshold**. - - Severity threshold settings card - - See [Fail the check on findings](/code-review/config#fail-the-check-on-findings) for details and per-repository overrides. + Configure the resolution window and compliance target per severity in [Organization settings](/platform/organization-settings#sla-thresholds). diff --git a/platform/organization-settings.mdx b/platform/organization-settings.mdx new file mode 100644 index 0000000..df42fc8 --- /dev/null +++ b/platform/organization-settings.mdx @@ -0,0 +1,85 @@ +--- +title: "Organization settings" +description: "Configure scan filters, the check gate, and SLA thresholds for your organization." +--- + +Organization settings apply to every repository unless a repository's `.hacktron/config.yaml` overrides them. Only organization admins and owners can change these settings. + + + + Select your organization, then go to **Settings**. + + + +## Scan filters + +Choose which pull and merge requests Hacktron scans by default, across four dimensions: branches, labels, authors, and keywords. + + + + Locate **Filters**. + + + Select **Add filter**. Choose a dimension and a direction, then enter one or more values. + + Filters card + + + +| Dimension | Match style | +|---|---| +| Branches | Glob pattern, case-insensitive (e.g. `release/*`) | +| Labels | Exact name, case-insensitive | +| Authors | Exact username, case-insensitive | +| Keywords | Substring in the PR/MR title, case-insensitive | + + + **Include** and **Skip** can both be set for the same dimension: Skip takes priority within that dimension. Setting a filter for one dimension has no effect on the others. + + +Want per-repo control? Override any dimension in `.hacktron/config.yaml`. See [Repository configuration](/code-review/config) for the glob syntax, limits, and how repo config overrides org defaults. + +## Check gate + +Set an org-wide severity threshold that fails a PR or MR check when a finding meets or exceeds it. + + + + Locate **Severity threshold**. + + Severity threshold settings card + + + Pick a severity: **Critical**, **High**, **Medium**, or **Low**. Select **Off** to disable the gate org-wide. + + + +See [Fail the check on findings](/code-review/config#fail-the-check-on-findings) for the full severity table and per-repository overrides. + +## SLA thresholds + +Set the resolution window and minimum compliance target for each severity. + + + + Locate **SLA Thresholds**. + + SLA thresholds settings card + + + For each severity, set the number of days findings have to be resolved in, and the minimum percentage that should meet it. + + + +These values drive the Resolution Health widget on the [dashboard](/platform/dashboard#resolution-health), including Mean Time to Resolution (MTTR) and SLA compliance. + +## Related + + + + Connect a Git provider, enable repositories, and choose covered branches. + + + Use `.hacktron/config.yaml` to override scan filters and the check gate per repository. + +