From 235e66307472021c43ddb7c326f77a8534332d5f Mon Sep 17 00:00:00 2001 From: Hil-Ram-NWX <212961752+hilram7@users.noreply.github.com> Date: Wed, 11 Mar 2026 18:06:53 -0400 Subject: [PATCH 1/4] Fix broken KB link anchor in Auditor licensing FAQs (#421) Changed relative path to /docs/kb/ format so the KB copy script can properly rewrite links when copying to versioned directories. The link to determining-the-number-of-enabled-microsoft-entra-id-accounts with #instructions anchor was using relative path ../../ which broke when copied to versions 10.6, 10.7, and 10.8. The #instructions anchor exists on the target page (line 33). --- .../glossaries-and-faqs/netwrix-auditor-licensing-faqs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/kb/auditor/features-and-operations/glossaries-and-faqs/netwrix-auditor-licensing-faqs.md b/docs/kb/auditor/features-and-operations/glossaries-and-faqs/netwrix-auditor-licensing-faqs.md index 671dee6e14..45d42ef6e4 100644 --- a/docs/kb/auditor/features-and-operations/glossaries-and-faqs/netwrix-auditor-licensing-faqs.md +++ b/docs/kb/auditor/features-and-operations/glossaries-and-faqs/netwrix-auditor-licensing-faqs.md @@ -145,6 +145,6 @@ You may choose to no longer audit a data source, and thus not renew the license - [How to count the number of your network devices in your configuration?](/docs/kb/auditor/features-and-operations/glossaries-and-faqs/how-to-count-the-number-of-your-network-devices-in-your-configuration) - [Oracle Processor Core Factor Table](http://www.oracle.com/us/corporate/contracts/processor-core-factor-table-070634.pdf) - [How to Count Number of CPU Cores on Your Oracle Database Deployment](/docs/kb/auditor/system-administration/database-management/how-to-count-number-of-cpu-cores-on-your-oracle-database-deployment) -- [How to Determine the Count of Enabled Microsoft Entra ID Accounts](../../configuration-and-setup/microsoft-365-integration/determining-the-number-of-enabled-microsoft-entra-id-accounts#instructions) +- [How to Determine the Count of Enabled Microsoft Entra ID Accounts](/docs/kb/auditor/configuration-and-setup/microsoft-365-integration/determining-the-number-of-enabled-microsoft-entra-id-accounts#instructions) - [How to count number of licenses required for auditing a Microsoft Office 365 tenant?](/docs/kb/auditor/configuration-and-setup/microsoft-365-integration/how-to-count-number-of-licenses-required-for-auditing-a-microsoft-office-365-tenant) From bcfa4ab006b1a830950139303b8450656f8451d8 Mon Sep 17 00:00:00 2001 From: nbudeev-netwrix Date: Thu, 12 Mar 2026 11:50:12 +0100 Subject: [PATCH 2/4] Update NA FSA NetApp service policy configuration (#464) * Move the firewall policy to the service policy * Remove extra links * Fix issues * Fix issues --- .../fileservers/netappcmode/overview.md | 1 - .../fileservers/netappcmode/ports.md | 49 ------------------- .../fileservers/netappcmode/servicepolicy.md | 46 ++++++++++++++++- .../fileservers/netappcmode/overview.md | 1 - .../fileservers/netappcmode/ports.md | 49 ------------------- .../fileservers/netappcmode/servicepolicy.md | 46 ++++++++++++++++- 6 files changed, 90 insertions(+), 102 deletions(-) delete mode 100644 docs/auditor/10.7/configuration/fileservers/netappcmode/ports.md delete mode 100644 docs/auditor/10.8/configuration/fileservers/netappcmode/ports.md diff --git a/docs/auditor/10.7/configuration/fileservers/netappcmode/overview.md b/docs/auditor/10.7/configuration/fileservers/netappcmode/overview.md index 31f5c9c988..099754bfbe 100644 --- a/docs/auditor/10.7/configuration/fileservers/netappcmode/overview.md +++ b/docs/auditor/10.7/configuration/fileservers/netappcmode/overview.md @@ -121,7 +121,6 @@ To configure Clustered Data ONTAP 8 and ONTAP 9 for monitoring, perform the foll - Prerequisites - [Configure ONTAPI\RESTAPI Web Access](/docs/auditor/10.7/configuration/fileservers/netappcmode/webaccess.md) -- [Configure System Service Firewall Policies](/docs/auditor/10.7/configuration/fileservers/netappcmode/ports.md) - [Configure Service Policy](/docs/auditor/10.7/configuration/fileservers/netappcmode/servicepolicy.md) - [Configure Event Categories and Log](/docs/auditor/10.7/configuration/fileservers/netappcmode/eventcategories.md) diff --git a/docs/auditor/10.7/configuration/fileservers/netappcmode/ports.md b/docs/auditor/10.7/configuration/fileservers/netappcmode/ports.md deleted file mode 100644 index f31c0b3d50..0000000000 --- a/docs/auditor/10.7/configuration/fileservers/netappcmode/ports.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "Configure System Service Firewall Policies" -description: "Configure System Service Firewall Policies" -sidebar_position: 20 ---- - -# Configure System Service Firewall Policies - -Configure firewall to make file shares and Clustered Data ONTAP HTTP/HTTPS ports accessible from the -computer where Netwrix Auditor Server is installed. Your firewall configuration depends on network -settings and security policies in your organization. Below is an example of configuration: - -**NOTE:** For NetApp ONTAP 9.10.1 and higher, the command context system services firewall policy is -deprecated and might be removed in a future ONTAP release. Review the NetApp -[ONTAP 9.10.1 commands](https://docs.netapp.com/us-en/ontap-cli-9101/) article for additional -information. - -1. Navigate to your cluster command prompt through the SSH/Telnet connection. -2. Log in as a cluster administrator and review your current firewall configuration. For example: - - | | | | - | ----------------------------------------- | ------------ | ------- | - | cluster1::> system services firewall show | | | - | Node | Enabled | Logging | - | ------------ | ------------ | ------- | - | cluster1-01 | true | false | - -3. Create firewall policy or edit existing policy to allow HTTP/HTTPS (note that modifying a policy - you may overwrite some settings). For example: - - | To... | Execute... | - | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | NetApp Clustered Data ONTAP 8.2 | | - | Create a policy | `cluster1::> system services firewall policy create -policy netwrix_policy -service http -vserver svm1 -action allow -ip-list 192.168.1.0/24` `cluster1::> system services firewall policy create -policy netwrix_policy -service https -vserver svm1 -action allow -ip-list 192.168.1.0/24` | - | Modify existing policy | `cluster1::> system services firewall policy modify -policy netwrix_policy -service http -vserver svm1 -action allow -ip-list 192.168.1.0/24` `cluster1::> system services firewall policy modify -policy netwrix_policy -service https -vserver svm1 -action allow -ip-list 192.168.1.0/24` | - | NetApp Clustered Data ONTAP 8.3, ONTAP 9.0 - 9.10 | | - | Create a policy | `cluster1::> system services firewall policy create -policy netwrix_policy -service http -vserver svm1 -allow-list 192.168.1.0/24` `cluster1::> system services firewall policy create -policy netwrix_policy -service https -vserver svm1 -allow-list 192.168.1.0/24` | - | Modify existing policy | `cluster1::> system services firewall policy modify -policy netwrix_policy -service http -vserver svm1 -allow-list 192.168.1.0/24` `cluster1::> system services firewall policy modify -policy netwrix_policy -service https -vserver svm1 -allow-list 192.168.1.0/24` | - - where `pol1` is your Firewall policy name and `192.168.1.0/24` is your subnet where Netwrix - Auditor Server resides. - -4. Apply the firewall policy to a LIF. - - `cluster1::>network interface modify -vserver svm -lif vs1-cifs-lif1 -firewall-policy netwrix_policy` - - To verify the policy was applied correctly, execute the following: - - `cluster1::>network interface show -fields firewall-policy` diff --git a/docs/auditor/10.7/configuration/fileservers/netappcmode/servicepolicy.md b/docs/auditor/10.7/configuration/fileservers/netappcmode/servicepolicy.md index d65645b420..feeecbb928 100644 --- a/docs/auditor/10.7/configuration/fileservers/netappcmode/servicepolicy.md +++ b/docs/auditor/10.7/configuration/fileservers/netappcmode/servicepolicy.md @@ -6,7 +6,8 @@ sidebar_position: 30 # Configure Service Policy -**NOTE:** This paragraph only applies to NetApp ONTAP version 9.10.1 and higher. +**NOTE:** This section only applies to NetApp ONTAP version 9.10.1 and higher. +For older NetApp ONTAP versions use [System Service Firewall Policies](#configure-system-service-firewall-policies) instead. By default, the 'default-data-files' policy is applied to the SVM CIFS/SMB interface and HTTP/HTTPS options are not available. To make the ONTAPI available through HTTP/HTTPS ports on your SVM @@ -109,3 +110,46 @@ of the configuration: svm1 lif_svm1_126 netwrix-policy svm1 lif_svm1_349 netwrix-policy + + +## Configure System Service Firewall Policies + +**NOTE:** This section applies to NetApp ONTAP 9.10.1 and lower. For ONTAP versions higher than 9.10.1, the `system services firewall policy` command context is deprecated. +See the [NetApp ONTAP 9.10.1 CLI documentation](https://docs.netapp.com/us-en/ontap-cli-9101/system-services-firewall-policy-show.html#description) for details. + +Configure firewall to make file shares and Clustered Data ONTAP HTTP/HTTPS ports accessible from the +computer where Netwrix Auditor Server is installed. Your firewall configuration depends on network +settings and security policies in your organization. Below is an example of configuration: + +1. Navigate to your cluster command prompt through the SSH/Telnet connection. +2. Log in as a cluster administrator and review your current firewall configuration. For example: + + | | | | + | ----------------------------------------- | ------------ | ------- | + | cluster1::> system services firewall show | | | + | Node | Enabled | Logging | + | ------------ | ------------ | ------- | + | cluster1-01 | true | false | + +3. Create a firewall policy or edit an existing policy to allow HTTP/HTTPS. + When modifying an existing policy, be aware that some settings may be overwritten. + + | To... | Execute... | + | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | NetApp Clustered Data ONTAP 8.2 | | + | Create a policy | `cluster1::> system services firewall policy create -policy netwrix_policy -service http -vserver svm1 -action allow -ip-list 192.168.1.0/24` `cluster1::> system services firewall policy create -policy netwrix_policy -service https -vserver svm1 -action allow -ip-list 192.168.1.0/24` | + | Modify existing policy | `cluster1::> system services firewall policy modify -policy netwrix_policy -service http -vserver svm1 -action allow -ip-list 192.168.1.0/24` `cluster1::> system services firewall policy modify -policy netwrix_policy -service https -vserver svm1 -action allow -ip-list 192.168.1.0/24` | + | NetApp Clustered Data ONTAP 8.3, ONTAP 9.0 - 9.10 | | + | Create a policy | `cluster1::> system services firewall policy create -policy netwrix_policy -service http -vserver svm1 -allow-list 192.168.1.0/24` `cluster1::> system services firewall policy create -policy netwrix_policy -service https -vserver svm1 -allow-list 192.168.1.0/24` | + | Modify existing policy | `cluster1::> system services firewall policy modify -policy netwrix_policy -service http -vserver svm1 -allow-list 192.168.1.0/24` `cluster1::> system services firewall policy modify -policy netwrix_policy -service https -vserver svm1 -allow-list 192.168.1.0/24` | + + where `netwrix_policy` is your Firewall policy name and `192.168.1.0/24` is your subnet where Netwrix + Auditor Server resides. + +4. Apply the firewall policy to a LIF. + + `cluster1::>network interface modify -vserver svm -lif vs1-cifs-lif1 -firewall-policy netwrix_policy` + + To verify the policy was applied correctly, execute the following: + + `cluster1::>network interface show -fields firewall-policy` diff --git a/docs/auditor/10.8/configuration/fileservers/netappcmode/overview.md b/docs/auditor/10.8/configuration/fileservers/netappcmode/overview.md index 3f634008cf..f5813aef43 100644 --- a/docs/auditor/10.8/configuration/fileservers/netappcmode/overview.md +++ b/docs/auditor/10.8/configuration/fileservers/netappcmode/overview.md @@ -121,7 +121,6 @@ To configure Clustered Data ONTAP 8 and ONTAP 9 for monitoring, perform the foll - Prerequisites - [Configure ONTAPI\RESTAPI Web Access](/docs/auditor/10.8/configuration/fileservers/netappcmode/webaccess.md) -- [Configure System Service Firewall Policies](/docs/auditor/10.8/configuration/fileservers/netappcmode/ports.md) - [Configure Service Policy](/docs/auditor/10.8/configuration/fileservers/netappcmode/servicepolicy.md) - [Configure Event Categories and Log](/docs/auditor/10.8/configuration/fileservers/netappcmode/eventcategories.md) diff --git a/docs/auditor/10.8/configuration/fileservers/netappcmode/ports.md b/docs/auditor/10.8/configuration/fileservers/netappcmode/ports.md deleted file mode 100644 index f31c0b3d50..0000000000 --- a/docs/auditor/10.8/configuration/fileservers/netappcmode/ports.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "Configure System Service Firewall Policies" -description: "Configure System Service Firewall Policies" -sidebar_position: 20 ---- - -# Configure System Service Firewall Policies - -Configure firewall to make file shares and Clustered Data ONTAP HTTP/HTTPS ports accessible from the -computer where Netwrix Auditor Server is installed. Your firewall configuration depends on network -settings and security policies in your organization. Below is an example of configuration: - -**NOTE:** For NetApp ONTAP 9.10.1 and higher, the command context system services firewall policy is -deprecated and might be removed in a future ONTAP release. Review the NetApp -[ONTAP 9.10.1 commands](https://docs.netapp.com/us-en/ontap-cli-9101/) article for additional -information. - -1. Navigate to your cluster command prompt through the SSH/Telnet connection. -2. Log in as a cluster administrator and review your current firewall configuration. For example: - - | | | | - | ----------------------------------------- | ------------ | ------- | - | cluster1::> system services firewall show | | | - | Node | Enabled | Logging | - | ------------ | ------------ | ------- | - | cluster1-01 | true | false | - -3. Create firewall policy or edit existing policy to allow HTTP/HTTPS (note that modifying a policy - you may overwrite some settings). For example: - - | To... | Execute... | - | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | NetApp Clustered Data ONTAP 8.2 | | - | Create a policy | `cluster1::> system services firewall policy create -policy netwrix_policy -service http -vserver svm1 -action allow -ip-list 192.168.1.0/24` `cluster1::> system services firewall policy create -policy netwrix_policy -service https -vserver svm1 -action allow -ip-list 192.168.1.0/24` | - | Modify existing policy | `cluster1::> system services firewall policy modify -policy netwrix_policy -service http -vserver svm1 -action allow -ip-list 192.168.1.0/24` `cluster1::> system services firewall policy modify -policy netwrix_policy -service https -vserver svm1 -action allow -ip-list 192.168.1.0/24` | - | NetApp Clustered Data ONTAP 8.3, ONTAP 9.0 - 9.10 | | - | Create a policy | `cluster1::> system services firewall policy create -policy netwrix_policy -service http -vserver svm1 -allow-list 192.168.1.0/24` `cluster1::> system services firewall policy create -policy netwrix_policy -service https -vserver svm1 -allow-list 192.168.1.0/24` | - | Modify existing policy | `cluster1::> system services firewall policy modify -policy netwrix_policy -service http -vserver svm1 -allow-list 192.168.1.0/24` `cluster1::> system services firewall policy modify -policy netwrix_policy -service https -vserver svm1 -allow-list 192.168.1.0/24` | - - where `pol1` is your Firewall policy name and `192.168.1.0/24` is your subnet where Netwrix - Auditor Server resides. - -4. Apply the firewall policy to a LIF. - - `cluster1::>network interface modify -vserver svm -lif vs1-cifs-lif1 -firewall-policy netwrix_policy` - - To verify the policy was applied correctly, execute the following: - - `cluster1::>network interface show -fields firewall-policy` diff --git a/docs/auditor/10.8/configuration/fileservers/netappcmode/servicepolicy.md b/docs/auditor/10.8/configuration/fileservers/netappcmode/servicepolicy.md index 2a534eb325..49368c263c 100644 --- a/docs/auditor/10.8/configuration/fileservers/netappcmode/servicepolicy.md +++ b/docs/auditor/10.8/configuration/fileservers/netappcmode/servicepolicy.md @@ -6,7 +6,8 @@ sidebar_position: 30 # Configure Service Policy -**NOTE:** This paragraph only applies to NetApp ONTAP version 9.10.1 and higher. +**NOTE:** This section only applies to NetApp ONTAP version 9.10.1 and higher. +For older NetApp ONTAP versions use [System Service Firewall Policies](#configure-system-service-firewall-policies) instead. By default, the 'default-data-files' policy is applied to the SVM CIFS/SMB interface and HTTP/HTTPS options are not available. To make the ONTAPI available through HTTP/HTTPS ports on your SVM @@ -109,3 +110,46 @@ of the configuration: svm1 lif_svm1_126 netwrix-policy svm1 lif_svm1_349 netwrix-policy + + +## Configure System Service Firewall Policies + +**NOTE:** This section applies to NetApp ONTAP 9.10.1 and lower. For ONTAP versions higher than 9.10.1, the `system services firewall policy` command context is deprecated. +See the [NetApp ONTAP 9.10.1 CLI documentation](https://docs.netapp.com/us-en/ontap-cli-9101/system-services-firewall-policy-show.html#description) for details. + +Configure firewall to make file shares and Clustered Data ONTAP HTTP/HTTPS ports accessible from the +computer where Netwrix Auditor Server is installed. Your firewall configuration depends on network +settings and security policies in your organization. Below is an example of configuration: + +1. Navigate to your cluster command prompt through the SSH/Telnet connection. +2. Log in as a cluster administrator and review your current firewall configuration. For example: + + | | | | + | ----------------------------------------- | ------------ | ------- | + | cluster1::> system services firewall show | | | + | Node | Enabled | Logging | + | ------------ | ------------ | ------- | + | cluster1-01 | true | false | + +3. Create a firewall policy or edit an existing policy to allow HTTP/HTTPS. +When modifying an existing policy, be aware that some settings may be overwritten. + + | To... | Execute... | + | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | NetApp Clustered Data ONTAP 8.2 | | + | Create a policy | `cluster1::> system services firewall policy create -policy netwrix_policy -service http -vserver svm1 -action allow -ip-list 192.168.1.0/24` `cluster1::> system services firewall policy create -policy netwrix_policy -service https -vserver svm1 -action allow -ip-list 192.168.1.0/24` | + | Modify existing policy | `cluster1::> system services firewall policy modify -policy netwrix_policy -service http -vserver svm1 -action allow -ip-list 192.168.1.0/24` `cluster1::> system services firewall policy modify -policy netwrix_policy -service https -vserver svm1 -action allow -ip-list 192.168.1.0/24` | + | NetApp Clustered Data ONTAP 8.3, ONTAP 9.0 - 9.10 | | + | Create a policy | `cluster1::> system services firewall policy create -policy netwrix_policy -service http -vserver svm1 -allow-list 192.168.1.0/24` `cluster1::> system services firewall policy create -policy netwrix_policy -service https -vserver svm1 -allow-list 192.168.1.0/24` | + | Modify existing policy | `cluster1::> system services firewall policy modify -policy netwrix_policy -service http -vserver svm1 -allow-list 192.168.1.0/24` `cluster1::> system services firewall policy modify -policy netwrix_policy -service https -vserver svm1 -allow-list 192.168.1.0/24` | + + where `netwrix_policy` is your Firewall policy name and `192.168.1.0/24` is your subnet where Netwrix + Auditor Server resides. + +4. Apply the firewall policy to a LIF. + + `cluster1::>network interface modify -vserver svm -lif vs1-cifs-lif1 -firewall-policy netwrix_policy` + + To verify the policy was applied correctly, execute the following: + + `cluster1::>network interface show -fields firewall-policy` From ee2cdf4f5d78da568df7548c22055fc00c93ce7a Mon Sep 17 00:00:00 2001 From: leo-st-nwx <97438775+leo-st-nwx@users.noreply.github.com> Date: Thu, 12 Mar 2026 22:09:55 +0800 Subject: [PATCH 3/4] Fix: fixed broken lang packs links (#490) --- ...ow-to-enable-ocr-for-non-english-images.md | 106 +++++++++--------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/docs/kb/auditor/features-and-operations/glossaries-and-faqs/how-to-enable-ocr-for-non-english-images.md b/docs/kb/auditor/features-and-operations/glossaries-and-faqs/how-to-enable-ocr-for-non-english-images.md index 9f6009365f..29f758821b 100644 --- a/docs/kb/auditor/features-and-operations/glossaries-and-faqs/how-to-enable-ocr-for-non-english-images.md +++ b/docs/kb/auditor/features-and-operations/glossaries-and-faqs/how-to-enable-ocr-for-non-english-images.md @@ -56,56 +56,56 @@ Then, identify which files should be processed via a particular language pack: ## Language Packs: -- [Afrikaans](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/afr.traineddata) -- [Albanian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/sqi.traineddata) -- [Arabic](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/ara.traineddata) -- [Basque](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/eus.traineddata) -- [Belarusian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/bel.traineddata) -- [Bengali](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/ben.traineddata) -- [Bulgarian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/bul.traineddata) -- [Catalan](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/cat.traineddata) -- [Czech](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/ces.traineddata) -- [Chinese Simplified](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/chi_sim.traineddata) -- [Chinese Traditional](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/chi_tra.traineddata) -- [Croatian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/hrv.traineddata) -- [Danish](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/dan.traineddata) -- [Dutch](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/nld.traineddata) -- [English](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/eng.traineddata) -- [Estonian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/est.traineddata) -- [Finnish](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/fin.traineddata) -- [French](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/fra.traineddata) -- [Galician](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/glg.traineddata) -- [German](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/deu.traineddata) -- [Greek](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/ell.traineddata) -- [Hebrew](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/heb.traineddata) -- [Hindi](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/hin.traineddata) -- [Hungarian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/hun.traineddata) -- [Icelandic](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/isl.traineddata) -- [Italian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/ita.traineddata) -- [Japanese](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/jpn.traineddata) -- [Kannada](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/kan.traineddata) -- [Korean](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/kor.traineddata) -- [Latvian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/lav.traineddata) -- [Lithuanian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/lit.traineddata) -- [Malayalam](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/mal.traineddata) -- [Macedonian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/mkd.traineddata) -- [Maltese](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/mlt.traineddata) -- [Malay](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/msa.traineddata) -- [Norwegian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/nor.traineddata) -- [Polish](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/pol.traineddata) -- [Portuguese](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/por.traineddata) -- [Romanian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/ron.traineddata) -- [Russian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/rus.traineddata) -- [Slovak](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/slk.traineddata) -- [Slovenian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/slv.traineddata) -- [Spanish](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/spa.traineddata) -- [Serbian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/srp.traineddata) -- [Swahili](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/swa.traineddata) -- [Swedish](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/swe.traineddata) -- [Tamil](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/tam.traineddata) -- [Telugu](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/tel.traineddata) -- [Tagalog](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/tgl.traineddata) -- [Thai](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/tha.traineddata) -- [Turkish](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/tur.traineddata) -- [Ukrainian](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/ukr.traineddata) -- [Vietnamese](https://www.netwrix.com/download/products/DDC/TesseractLanguagePacks/vie.traineddata) +- [Afrikaans](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/afr.traineddata) +- [Albanian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/sqi.traineddata) +- [Arabic](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/ara.traineddata) +- [Basque](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/eus.traineddata) +- [Belarusian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/bel.traineddata) +- [Bengali](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/ben.traineddata) +- [Bulgarian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/bul.traineddata) +- [Catalan](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/cat.traineddata) +- [Czech](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/ces.traineddata) +- [Chinese Simplified](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/chi_sim.traineddata) +- [Chinese Traditional](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/chi_tra.traineddata) +- [Croatian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/hrv.traineddata) +- [Danish](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/dan.traineddata) +- [Dutch](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/nld.traineddata) +- [English](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/eng.traineddata) +- [Estonian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/est.traineddata) +- [Finnish](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/fin.traineddata) +- [French](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/fra.traineddata) +- [Galician](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/glg.traineddata) +- [German](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/deu.traineddata) +- [Greek](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/ell.traineddata) +- [Hebrew](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/heb.traineddata) +- [Hindi](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/hin.traineddata) +- [Hungarian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/hun.traineddata) +- [Icelandic](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/isl.traineddata) +- [Italian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/ita.traineddata) +- [Japanese](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/jpn.traineddata) +- [Kannada](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/kan.traineddata) +- [Korean](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/kor.traineddata) +- [Latvian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/lav.traineddata) +- [Lithuanian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/lit.traineddata) +- [Malayalam](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/mal.traineddata) +- [Macedonian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/mkd.traineddata) +- [Maltese](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/mlt.traineddata) +- [Malay](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/msa.traineddata) +- [Norwegian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/nor.traineddata) +- [Polish](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/pol.traineddata) +- [Portuguese](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/por.traineddata) +- [Romanian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/ron.traineddata) +- [Russian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/rus.traineddata) +- [Slovak](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/slk.traineddata) +- [Slovenian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/slv.traineddata) +- [Spanish](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/spa.traineddata) +- [Serbian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/srp.traineddata) +- [Swahili](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/swa.traineddata) +- [Swedish](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/swe.traineddata) +- [Tamil](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/tam.traineddata) +- [Telugu](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/tel.traineddata) +- [Tagalog](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/tgl.traineddata) +- [Thai](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/tha.traineddata) +- [Turkish](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/tur.traineddata) +- [Ukrainian](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/ukr.traineddata) +- [Vietnamese](https://dl.netwrix.com/products/DDC/TesseractLanguagePacks/vie.traineddata) From 6a731ac71046d2f7ed71cf060f0457eb8762bc7b Mon Sep 17 00:00:00 2001 From: jth-nw Date: Thu, 12 Mar 2026 11:08:18 -0500 Subject: [PATCH 4/4] feat: add Dale linting as inline PR review comments Run Dale in a separate claude-code-action step with its own turn budget, write results to JSON, then post as inline comments via a shell step. Editorial review updated to reference Dale count and avoid duplicating linter findings. Followup job resolves and dismisses both Vale and Dale threads after fixes. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/claude-doc-pr.yml | 79 +++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 5 deletions(-) diff --git a/.github/workflows/claude-doc-pr.yml b/.github/workflows/claude-doc-pr.yml index 6501f5b1b8..b7378f0ed6 100644 --- a/.github/workflows/claude-doc-pr.yml +++ b/.github/workflows/claude-doc-pr.yml @@ -123,6 +123,73 @@ jobs: echo "No Vale issues found" fi + - name: Run Dale linting + id: dale + if: steps.changed-files.outputs.count > 0 + uses: anthropics/claude-code-action@v1 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} + github_token: ${{ secrets.GITHUB_TOKEN }} + show_full_output: true + prompt: | + You are Dale, a documentation linter. Your ONLY job is to check files against Dale rules and write results to a JSON file. + + CHANGED FILES: ${{ steps.changed-files.outputs.files }} + + INSTRUCTIONS: + + Step 1: Read each Dale rule file: + - .claude/skills/dale/rules/minimizing-difficulty.yml + - .claude/skills/dale/rules/negative-assumptions.yml + - .claude/skills/dale/rules/xy-slop.yml + + Step 2: Read each changed file listed above (split on commas). + + Step 3: For each file, check every line against each rule's "reason" field. When a line triggers a rule, record it. + + Step 4: Write results to /tmp/dale-results.json as a JSON array. Each entry must have: + - "path": the file path exactly as given above + - "line": the line number (integer) + - "rule": the rule filename without extension (e.g. "minimizing-difficulty") + - "message": the rule's "message" field value + + If no issues found, write an empty array: [] + + Example output: + [{"path":"docs/foo/bar.md","line":7,"rule":"minimizing-difficulty","message":"Do not minimize the difficulty of tasks users are performing."}] + + IMPORTANT: Write ONLY the JSON file. Do not post comments, do not run any other tools. Your task is done when /tmp/dale-results.json exists. + claude_args: '--allowedTools "Read,Write"' + + - name: Post Dale inline comments + id: dale-post + if: steps.changed-files.outputs.count > 0 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + DALE_COUNT=0 + if [ -f /tmp/dale-results.json ]; then + DALE_COUNT=$(jq 'length' /tmp/dale-results.json 2>/dev/null || echo "0") + fi + + echo "dale_count=$DALE_COUNT" >> "$GITHUB_OUTPUT" + + if [ "$DALE_COUNT" -gt 0 ]; then + echo "Posting $DALE_COUNT Dale inline comments" + # Transform Dale results into PR review comment format + COMMENTS_JSON=$(jq '[.[] | {"path": .path, "line": .line, "body": ("**Dale** (`" + .rule + "`): " + .message)}]' /tmp/dale-results.json) + jq -n \ + --arg body "**Dale found ${DALE_COUNT} issue(s).** See inline comments below." \ + --argjson comments "$COMMENTS_JSON" \ + '{"body": $body, "event": "COMMENT", "comments": $comments}' \ + | gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews \ + --input - 2>&1 + else + echo "No Dale issues found" + fi + - name: Get PR diff id: diff if: steps.changed-files.outputs.count > 0 @@ -153,6 +220,7 @@ jobs: - PR number: ${{ github.event.pull_request.number }} - Changed files: ${{ steps.changed-files.outputs.files }} - Vale issues: ${{ steps.vale.outputs.vale_count }} (already posted as inline comments) + - Dale issues: ${{ steps.dale-post.outputs.dale_count }} (already posted as inline comments) - PR diff is at: /tmp/pr-diff.txt INSTRUCTIONS: @@ -163,6 +231,7 @@ jobs: - Voice: passive voice, first person, impersonal phrases - Clarity: hard-to-parse sentences, ambiguous references - Surface: wordiness, redundancy + Do NOT duplicate issues already caught by Vale or Dale — focus on what linters miss. Step 3: Write the review to /tmp/doc-pr-review.md with this EXACT structure: @@ -173,12 +242,12 @@ jobs: (if no issues found, write "No editorial issues found.") ### Summary - N Vale issues (see inline comments), N editorial suggestions across N files. + N Vale issues, N Dale issues (see inline comments), N editorial suggestions across N files. --- **What to do next:** Comment `@claude` on this PR followed by your instructions to get help: - - `@claude fix all issues` — fix all Vale and editorial issues + - `@claude fix all issues` — fix all Vale, Dale, and editorial issues - `@claude fix only the Vale issues` — fix just the linting problems - `@claude help improve the flow of this document` — get writing assistance > Automated fixes are only available for branches in this repository, not forks. @@ -290,7 +359,7 @@ jobs: } } }' -f owner="$OWNER" -f name="$NAME" -F pr="$PR_NUMBER" \ - --jq '.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false and (.comments.nodes[0].body | contains("**Vale**"))) | .id' 2>/dev/null || true) + --jq '.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false and ((.comments.nodes[0].body | contains("**Vale**")) or (.comments.nodes[0].body | contains("**Dale**")))) | .id' 2>/dev/null || true) for TID in $THREAD_IDS; do gh api graphql -f query=' mutation($tid:ID!) { @@ -298,9 +367,9 @@ jobs: }' -f tid="$TID" 2>/dev/null || true done - # Dismiss all previous Vale reviews + # Dismiss all previous Vale and Dale reviews REVIEW_IDS=$(gh api repos/${REPO}/pulls/${PR_NUMBER}/reviews \ - --jq '[.[] | select(.user.login == "github-actions[bot]" and (.body | contains("Vale found"))) | .id] | .[]' 2>/dev/null || true) + --jq '[.[] | select(.user.login == "github-actions[bot]" and ((.body | contains("Vale found")) or (.body | contains("Dale found")))) | .id] | .[]' 2>/dev/null || true) for ID in $REVIEW_IDS; do gh api repos/${REPO}/pulls/${PR_NUMBER}/reviews/${ID}/dismissals \ -f message="Superseded after fixes applied" -f event="DISMISS" 2>/dev/null || true