From 2e49e09b5f43247cd585c6864cc97f7c05b39dc3 Mon Sep 17 00:00:00 2001 From: naaa760 Date: Fri, 12 Dec 2025 09:08:27 +0530 Subject: [PATCH 1/3] docs: add diff rule presets for threading guardrails --- docs/assets/threading-guardrails.yaml | 39 ++++++++++++++++ docs/getting-started/diff-rule-presets.md | 57 +++++++++++++++++++++++ mkdocs.yml | 1 + 3 files changed, 97 insertions(+) create mode 100644 docs/assets/threading-guardrails.yaml create mode 100644 docs/getting-started/diff-rule-presets.md diff --git a/docs/assets/threading-guardrails.yaml b/docs/assets/threading-guardrails.yaml new file mode 100644 index 0000000..e74db5d --- /dev/null +++ b/docs/assets/threading-guardrails.yaml @@ -0,0 +1,39 @@ +rules: + - description: "Prefer ThreadPoolExecutor over raw threading.Thread" + enabled: true + severity: "medium" + event_types: ["pull_request"] + parameters: + file_patterns: ["**/*.py"] + forbidden_patterns: + - "threading\\.Thread" + require_patterns: + - "concurrent\\.futures\\.ThreadPoolExecutor" + + - description: "Require locks when using threading for shared data" + enabled: true + severity: "high" + event_types: ["pull_request"] + parameters: + file_patterns: ["**/*.py"] + require_patterns: + - "threading\\.Lock" + + - description: "Use queue.Queue for thread communication (avoid shared lists/dicts)" + enabled: true + severity: "medium" + event_types: ["pull_request"] + parameters: + file_patterns: ["**/*.py"] + require_patterns: + - "queue\\.Queue" + + - description: "Limit ThreadPoolExecutor max_workers to 10" + enabled: true + severity: "medium" + event_types: ["pull_request"] + parameters: + file_patterns: ["**/*.py"] + forbidden_patterns: + - "ThreadPoolExecutor\\(max_workers\\s*=\\s*(1[1-9]|[2-9][0-9])" + diff --git a/docs/getting-started/diff-rule-presets.md b/docs/getting-started/diff-rule-presets.md new file mode 100644 index 0000000..4731170 --- /dev/null +++ b/docs/getting-started/diff-rule-presets.md @@ -0,0 +1,57 @@ +# Diff rule presets (threading guardrails) + +These presets use the diff-aware validators already supported by Watchflow. Paste them directly into `.watchflow/rules.yaml` or upload to watchflow.dev as a YAML file. They avoid any unsupported sections (no `actions`, only `description`, `enabled`, `severity`, `event_types`, and `parameters` with `file_patterns`, `require_patterns`, `forbidden_patterns`). + +## Preset file + +The file `docs/assets/threading-guardrails.yaml` contains ready-to-use rules: + +```yaml +rules: + - description: "Prefer ThreadPoolExecutor over raw threading.Thread" + enabled: true + severity: "medium" + event_types: ["pull_request"] + parameters: + file_patterns: ["**/*.py"] + forbidden_patterns: + - "threading\\.Thread" + require_patterns: + - "concurrent\\.futures\\.ThreadPoolExecutor" + + - description: "Require locks when using threading for shared data" + enabled: true + severity: "high" + event_types: ["pull_request"] + parameters: + file_patterns: ["**/*.py"] + require_patterns: + - "threading\\.Lock" + + - description: "Use queue.Queue for thread communication (avoid shared lists/dicts)" + enabled: true + severity: "medium" + event_types: ["pull_request"] + parameters: + file_patterns: ["**/*.py"] + require_patterns: + - "queue\\.Queue" + + - description: "Limit ThreadPoolExecutor max_workers to 10" + enabled: true + severity: "medium" + event_types: ["pull_request"] + parameters: + file_patterns: ["**/*.py"] + forbidden_patterns: + - "ThreadPoolExecutor\\(max_workers\\s*=\\s*(1[1-9]|[2-9][0-9])" +``` + +## How to use on watchflow.dev + +1) Click “Upload config” (or paste the YAML directly if enabled). +2) Ensure event type is `pull_request`. +3) Adjust file globs or regexes as needed for your repo. + +If the form still shows “Rule not supported,” it means the UI is filtering diff-pattern rules. In that case, use the YAML upload path or apply the config directly in your repo. A follow-up change to the site can whitelist these presets so they appear without warnings. + diff --git a/mkdocs.yml b/mkdocs.yml index 8298626..398de32 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -62,6 +62,7 @@ nav: - Getting Started: - Quick Start: getting-started/quick-start.md - Configuration: getting-started/configuration.md + - Diff Rule Presets: getting-started/diff-rule-presets.md - Features & Capabilities: - Features: features.md - Comparative Analysis: benchmarks.md From 9a78a574839ee40ca503446c7ceae15d4494c0b7 Mon Sep 17 00:00:00 2001 From: naaa760 Date: Fri, 12 Dec 2025 17:06:46 +0530 Subject: [PATCH 2/3] docs: refine threading guardrails to reduce noise --- docs/assets/threading-guardrails.yaml | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/docs/assets/threading-guardrails.yaml b/docs/assets/threading-guardrails.yaml index e74db5d..24a570d 100644 --- a/docs/assets/threading-guardrails.yaml +++ b/docs/assets/threading-guardrails.yaml @@ -1,5 +1,5 @@ rules: - - description: "Prefer ThreadPoolExecutor over raw threading.Thread" + - description: "Avoid raw threading.Thread; prefer ThreadPoolExecutor" enabled: true severity: "medium" event_types: ["pull_request"] @@ -7,33 +7,13 @@ rules: file_patterns: ["**/*.py"] forbidden_patterns: - "threading\\.Thread" - require_patterns: - - "concurrent\\.futures\\.ThreadPoolExecutor" - - description: "Require locks when using threading for shared data" - enabled: true - severity: "high" - event_types: ["pull_request"] - parameters: - file_patterns: ["**/*.py"] - require_patterns: - - "threading\\.Lock" - - - description: "Use queue.Queue for thread communication (avoid shared lists/dicts)" - enabled: true - severity: "medium" - event_types: ["pull_request"] - parameters: - file_patterns: ["**/*.py"] - require_patterns: - - "queue\\.Queue" - - - description: "Limit ThreadPoolExecutor max_workers to 10" + - description: "Warn when ThreadPoolExecutor max_workers is greater than 10" enabled: true severity: "medium" event_types: ["pull_request"] parameters: file_patterns: ["**/*.py"] forbidden_patterns: - - "ThreadPoolExecutor\\(max_workers\\s*=\\s*(1[1-9]|[2-9][0-9])" + - "ThreadPoolExecutor\\(max_workers\\s*=\\s*(1[1-9]|[2-9][0-9]|\\d{3,})" From eadf2445fa916321801bc0802c45acf7ee0e1811 Mon Sep 17 00:00:00 2001 From: naaa760 Date: Fri, 12 Dec 2025 18:33:29 +0530 Subject: [PATCH 3/3] docs: align threading guardrail presets and regex --- docs/assets/threading-guardrails.yaml | 1 - docs/getting-started/diff-rule-presets.md | 33 +++++------------------ 2 files changed, 6 insertions(+), 28 deletions(-) diff --git a/docs/assets/threading-guardrails.yaml b/docs/assets/threading-guardrails.yaml index 24a570d..ac9e1a8 100644 --- a/docs/assets/threading-guardrails.yaml +++ b/docs/assets/threading-guardrails.yaml @@ -16,4 +16,3 @@ rules: file_patterns: ["**/*.py"] forbidden_patterns: - "ThreadPoolExecutor\\(max_workers\\s*=\\s*(1[1-9]|[2-9][0-9]|\\d{3,})" - diff --git a/docs/getting-started/diff-rule-presets.md b/docs/getting-started/diff-rule-presets.md index 4731170..64319cf 100644 --- a/docs/getting-started/diff-rule-presets.md +++ b/docs/getting-started/diff-rule-presets.md @@ -8,7 +8,7 @@ The file `docs/assets/threading-guardrails.yaml` contains ready-to-use rules: ```yaml rules: - - description: "Prefer ThreadPoolExecutor over raw threading.Thread" + - description: "Avoid raw threading.Thread; prefer ThreadPoolExecutor" enabled: true severity: "medium" event_types: ["pull_request"] @@ -16,42 +16,21 @@ rules: file_patterns: ["**/*.py"] forbidden_patterns: - "threading\\.Thread" - require_patterns: - - "concurrent\\.futures\\.ThreadPoolExecutor" - - description: "Require locks when using threading for shared data" - enabled: true - severity: "high" - event_types: ["pull_request"] - parameters: - file_patterns: ["**/*.py"] - require_patterns: - - "threading\\.Lock" - - - description: "Use queue.Queue for thread communication (avoid shared lists/dicts)" - enabled: true - severity: "medium" - event_types: ["pull_request"] - parameters: - file_patterns: ["**/*.py"] - require_patterns: - - "queue\\.Queue" - - - description: "Limit ThreadPoolExecutor max_workers to 10" + - description: "Warn when ThreadPoolExecutor max_workers is greater than 10" enabled: true severity: "medium" event_types: ["pull_request"] parameters: file_patterns: ["**/*.py"] forbidden_patterns: - - "ThreadPoolExecutor\\(max_workers\\s*=\\s*(1[1-9]|[2-9][0-9])" + - "ThreadPoolExecutor\\(max_workers\\s*=\\s*(1[1-9]|[2-9][0-9]|\\d{3,})" ``` ## How to use on watchflow.dev -1) Click “Upload config” (or paste the YAML directly if enabled). -2) Ensure event type is `pull_request`. -3) Adjust file globs or regexes as needed for your repo. +1) Click “Upload config” (or paste the YAML directly if enabled). +2) Ensure event type is `pull_request`. +3) Adjust file globs or regexes as needed for your repo. If the form still shows “Rule not supported,” it means the UI is filtering diff-pattern rules. In that case, use the YAML upload path or apply the config directly in your repo. A follow-up change to the site can whitelist these presets so they appear without warnings. -