Skip to content

Reorganize Password Reset KB into 7 categorized folders and add sidebar - #8

Merged
hilram7 merged 2 commits into
devfrom
kb-passwordreset-reorg
Jan 5, 2026
Merged

hilram7 merged 2 commits into
devfrom
kb-passwordreset-reorg

Conversation

@hilram7

@hilram7 hilram7 commented Dec 29, 2025

Copy link
Copy Markdown
Collaborator

Summary

Reorganizes the Password Reset knowledge base into 7 categorized folders with improved navigation structure and updates sidebar navigation for versions 3.3 and 3.23.

Changes Made

  • Reorganized KB articles into 7 categorized folders:
    • Configuration and Customization (5 articles)
      • customization-of-logon-prompt-extension
      • how-to-change-a-domain-name-for-all-enrolled-users
      • how-to-change-default-language-of-the-self-service-portal
      • how-to-configure-website-accessibility-using-server-hostname-only
      • how-to-localize-password-manager
    • Deployment and Infrastructure (2 articles)
      • load-balancing-cluster-for-password-manager
      • migrate-netwrix-password-reset
    • Enrollment and User Setup (5 articles)
      • automatic-enrollment-failed-unknown-error
      • automatic-user-enrollment-failed-not-found-404
      • error-can-t-resolve-username-in-the-local-secret-questions-cache
      • error-no-mapping-between-account-names-and-security-ids-was-done
      • the-enrollment-wizard-starts-every-time-a-user-logs-in
    • Integrations and Notifications (2 articles)
      • how-to-use-twilio-cli-with-netwrix-password-reset-sms-verification
      • troubleshoot-missing-microsoft-365-emails-using-smtp-relay
    • Portal Access and Authentication (4 articles)
      • an-error-occured-on-the-server-when-processing-the-url
      • cannot-login-the-helpdesk-and-admin-portal
      • password-reset-link-is-missing
      • session-expired
    • Reporting and Monitoring (2 articles)
      • report-could-not-be-downloaded
      • reports-available-within-password-manager
    • Security and Administration (4 articles)
      • data-filtering-in-data-console
      • error-access-denied-or-insufficient-permissions
      • ppe-resolving-compatibility-issues-with-microsoft-teams
      • security-certificates-and-permissions
  • Moved 51 images to 0-images/ folder for improved organization
  • Updated _category_.json with new structure
  • Enhanced index.md with category descriptions
  • Updated sidebar navigation for both version 3.3 and version 3.23

Files Changed

  • 79 files total:
    • 24 KB articles reorganized
    • 51 images moved
    • 4 configuration/sidebar files updated

Testing

  • 🔁 Branch rebased onto latest dev
  • ✅ Server build completed successfully
  • ⏳ Navigation and link verification still needed (to be completed after repository rebuild)

Restored from archived repository with clean commit history.
Archived PR: https://github.com/netwrix/docs-archive-2025-12-22/pull/446

hilram7 and others added 2 commits December 29, 2025 16:45
- Create category folders following established KB pattern
- Reorganized 24 KB articles into 7 categorized folders for better organization
- Rename images/ to 0-images/
- Update all image references (./images/ → ../0-images/)
- Enable KB sections in version 3.3 and 3.23 sidebars
- Update index.md landing page with category descriptions
- Update _category_.json configuration

Restored from archived repository with clean commit history.
  - Remove 24 duplicate markdown files from root directory - Remove duplicate images/ folder  - Tested and verified successful build
@hilram7

hilram7 commented Jan 4, 2026

Copy link
Copy Markdown
Collaborator Author

Navigation and link verification tested successfully

  • Images load
  • Related links redirect
  • Sidebar structure appears
Screenshot 2026-01-04 at 4 24 22 PM

@hilram7
hilram7 marked this pull request as ready for review January 4, 2026 21:31
@hilram7
hilram7 requested a review from a team as a code owner January 4, 2026 21:31
@hilram7
hilram7 merged commit 689feb8 into dev Jan 5, 2026
5 checks passed
gustavofilippininetwrix added a commit that referenced this pull request Jan 19, 2026
@jth-nw
jth-nw deleted the kb-passwordreset-reorg branch March 16, 2026 22:28
hilram7 added a commit that referenced this pull request Aug 12, 2026
…-dump precedence

Per explicit decisions on two open questions:

1. derek's Error-vs-Symptom classification was circular: it
   classified Resolution as Error only if the title already started
   with Error:, then checked that Error titles start with Error: —
   trivially true by construction, so an Error article missing the
   prefix silently passed as Symptom. Now classifies by content
   (does the Symptom section name a specific, identifiable error
   code/message) independent of title, then checks the title
   against that classification as a real, reachable check.

2. The <Component> Error - <phrase> log-dump normalization now
   explicitly wins over and is exempt from the Error: prefix
   requirement, rather than leaving both rules asserted with no
   stated precedence. None of the three existing worked examples in
   the rulebook use the Error: prefix, so this keeps them valid
   instead of requiring a rewrite. Updated the rulebook §12, derek
   §3, and kb-pr-open's title-format rules to state the same
   precedence consistently.

Also fixed two nits: escaped-metacharacter guidance for the title-
change link-sweep regex (titles containing . or + would otherwise
silently mismatch), and disambiguated "rows §7, §8" to "rows #7,
#8" in the two example tables, since § means rulebook section
everywhere else in the file.

kb-pr-review's un-propagated callout-severity rule and the
products.js hyphenation migration debt (explicit decision: keep
the strict rule, treat as migration debt like the heading
pluralization) are logged on the tracked dedup issue.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>
hilram7 added a commit that referenced this pull request Aug 12, 2026
- Title-change link-sweep escape guidance said to escape ".", "+",
  "(", ")", ":" — omitting "?" (which this PR's own Q&A carve-out
  newly makes valid in titles, e.g. "How Do You Export Event Logs?"),
  "*", "[", "]", "{", "}", "|", "^", "$", and incorrectly including
  ":" (not an ERE metacharacter). Replaced the partial enumeration
  with "escape every ERE metacharacter" plus a grep -rF fallback
  that sidesteps escaping entirely.

- kb-pr-review had fallen out of sync with three rule changes this
  PR already made to derek/kb-pr-open: it still called the Error:
  prefix "retired" (contradicting kb_style_guide.md, derek §3, and
  kb-pr-open, and disagreeing with the reviewer on the same
  article's title fix), its scan row 1 still listed WARNING as a
  valid callout, and it had no equivalent to kb-pr-open's row 23
  (flagging wrong-severity blockquotes and Docusaurus admonitions).
  Given this has now recurred across four review rounds with
  concrete file-level evidence each time, fixed directly here
  instead of deferring again: updated the retired-prefix line,
  added row 23, dropped WARNING from row 1, and bumped all five
  "22 rows"/"22/22" references to 23. Also removed a stale "row 23
  removed" comment that predated this reuse of row 23, and
  disambiguated "rows §7, §8" to "rows #7, #8" to match kb-pr-open.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>
hilram7 added a commit that referenced this pull request Aug 12, 2026
* Add kb-writer and kb-pr-open skills

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix kb-pr-open all-clean short-circuit and remove hardcoded path

Address code review: base the all-clean exit on branch state
(git status/log vs dev) instead of run-local fix count, so
already-committed content isn't stranded; use safe branch -d
gated on no unmerged commits; drop personal machine path from
the PR description memory reference.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Harden dev-ref check and fix knowledge_article_id contradiction

Address second code review round:
- Fetch origin/dev before diffing and use the remote-tracking ref
  instead of a bare dev, which may not exist locally or may be
  stale; fail open to Step 5 if the git commands error instead of
  treating a failure as "clean."
- Resolve kb-pr-open's internal self-contradiction on
  knowledge_article_id: the field's state is informational only,
  so drop the "add it if missing" and "must always be present"
  language that conflicted with the documented never-add/never-remove
  policy.
- Drop citations to feedback_kb_* memory files that don't exist in
  the repo and are unreachable for other TSEs; the conventions they
  referenced are already inlined in the skill.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Strip + verbose before path validation; fix branch-delete sequencing

Address third code review round:
- Step 1 now strips a trailing "+ verbose" token before validating
  file paths, so the documented invocation form doesn't fail its
  own path check.
- All-clean exit message now switches to dev before running
  git branch -d, since git refuses to delete the branch you have
  checked out.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix misfiled callout guidance and false branch-delete refusal

Address fourth code review round:
- Move the stray ":::note is not the KB format" guidance out of
  the title:semantic Derek row (unrelated to titles, only read
  while scoring titles) into a new scan row (23) that actually
  enforces it: flag ::: admonitions and convert to blockquote
  callout form per kb_style_guide.md. Update row-count references
  from 22 to 23 accordingly.
- All-clean exit now suggests git switch --detach origin/dev
  before git branch -d, since evaluating merge status against a
  stale or missing local dev could falsely refuse a delete.

The shared-rule-drift finding (kb-pr-open vs kb-pr-review) is the
same class of issue as the already-tracked dedup follow-up;
evidence added as a comment on that issue instead of fixing here.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Add Vale fallback, fix dead rule reference and links-check gaps

Address fifth code review round:
- Step 1 now checks Vale availability up front, and both this and
  the Step 2 fallback note render a missing/erroring Vale as
  "not run (Vale not installed)" rather than a silent false
  "Clean" row.
- Ported the NetwrixKB scoping sentence explaining why KB files
  fire NetwrixKB.* rules only, and dropped BoilerplateCrossRef
  from the WeakLinkText fix guidance since that rule lives only
  in the Netwrix style and can never fire on docs/kb/ files.
- Links check now recognizes pathname:///docs/... (the form
  rulebook §8 mandates for internal cross-doc links, in active
  use in 10 KB articles) in addition to /docs/..., and flags
  dotted version segments (8.2 instead of 8_2) per the same
  section. Restored the npm run build backstop note.
- All-clean short-circuit pathspec widened from docs/kb/ to
  docs/, matching the blast radius of the title-change link-text
  sweep that runs immediately before it.

The same BoilerplateCrossRef and pathname:// gaps exist in
kb-pr-review (inherited, not introduced here); documented as
follow-up evidence on the tracked dedup issue instead of fixing
kb-pr-review in this PR.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Align resolution heading convention to singular-only; widen clean-tree check

Address sixth code review round:
- kb_style_guide.md and derek/SKILL.md incorrectly allowed plural
  resolution headings (## Symptoms/## Causes/## Resolutions),
  contradicting kb-pr-open's and kb-pr-review's singular-only rule.
  Singular-only is the correct, established convention (confirmed
  by kb-pr-review); corrected the style guide and derek to match,
  and dropped the plural forms from kb-writer's Section Depth table.
- All-clean short-circuit in kb-pr-open now checks the whole
  working tree and full branch history vs. origin/dev, not just
  docs/ — the exit message claims the tree is clean enough to
  delete the branch, which a docs/-scoped check couldn't actually
  establish (e.g. an uncommitted static/ asset would be invisible
  to the old pathspec).

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Remove leftover contradictory pathspec sentence

Address seventh code review round: drop the stale "scope the
pathspec to docs/" lead-in sentence, left over from an earlier
revision, that contradicted the no-pathspec code block and
whole-tree wording that already follow it.

Reviewer's rulebook §12 circular-reference finding did not
reproduce — §12 already contains the raw log-line/error-dump
title rule content, not just a pointer back to the skill.

Migration debt (169 files with plural resolution headings) and
the cross-section table row-count drift vs. the rulebook are
documented as follow-up evidence on the tracked dedup issue.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix Step 1 Vale-availability guard skipping Dale and Derek

When Vale is missing, Step 1 told the agent to jump straight to
Step 3 (report), bypassing Step 2 (Dale and Derek) entirely.
Step 3's N/N-scanned receipt mechanism would then certify checks
that never ran, producing a false all-clean report on exactly the
fresh-machine case (Vale not yet installed) this skill's TSE
audience is most likely to hit. Point to Step 2 instead, which
already has the correct continue-on-error guard for Vale.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Gate the push in Step 7, fix PR-update wording, add detached-HEAD case

- Step 7 Option A now confirms with the TSE before running git
  push, matching the skill's own stated rule ("does not run git
  operations without explicit TSE approval") — the push was the
  only ungated git action in the flow.
- "Update existing PR" no longer claims "I pushed" when Option B
  means the TSE did the push, not the skill.
- Step 1's branch check now handles detached HEAD explicitly
  (stop and warn) instead of falling through to "proceed," since
  a later git push would have no upstream to resolve.

The Derek-rules-in-four-places finding is the same class of issue
as the tracked dedup follow-up; added as further evidence there.
The gh pr list fork-branch edge case is noted there too, flagged
as possibly out of scope rather than fixed.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Dedupe push instruction, skip fix prompt on clean reports, add recount caveats

- Create new PR Option A/B no longer tell the agent to push again —
  Step 7 item 1 already pushed (and now gates that push on TSE
  approval per the prior commit). Two push sites for one action was
  a leftover from before that gate existed.
- Step 4 now skips the "Ready to apply fixes?" prompt when Step 3's
  report already shows zero Required fixes, going straight to the
  All-clean short-circuit instead. Kept the report-clean condition
  explicit rather than just reordering the git checks earlier —
  moving the short-circuit's git status/log checks alone in front of
  the prompt would have incorrectly short-circuited runs that found
  real, not-yet-fixed findings (nothing would be in git yet either
  way).
- Added the same "recount if the table changes" caveat already on
  the Derek row to the kb-editing-conventions scan and cross-section
  consistency row counts, keeping the N/N scanned receipt honest as
  those tables grow.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix link-sweep pattern gap, conditional build backstop, wording nits

- Title-change link-text sweep grep pattern now makes pathname://
  optional, so it catches pathname:///docs/... links (17 in the
  repo) instead of only the bare /docs/... form.
- Links check no longer claims onBrokenLinks unconditionally
  throws — docusaurus.config.js relaxes onBrokenLinks/
  onBrokenMarkdownLinks/onBrokenAnchors to warn for single-product
  builds (the faster path CLAUDE.md recommends), so the build
  backstop only reliably fails on a full build.
- derek/SKILL.md now flags a pluralized resolution heading
  (## Symptoms/Causes/Resolutions) as a rename, not as a missing
  heading — matches the explicit heading-labels rule kb-pr-open
  and kb-pr-review already have, instead of relying on the
  presence check's generic "add this heading" message.
- Reworded the "no git operations without approval" rule to carve
  out read-only status commands (fetch/status/log used internally
  by the all-clean short-circuit) from the approval gate that
  covers state-changing operations (commit, push, branch create/
  delete) — the flow already ran the read-only commands unprompted;
  the stated rule now matches.
- Disambiguated "no pathspec on either command" (which reads oddly
  against a 3-command block) to name status/log specifically.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix Gate B qualifier drop, dead citations, relative-link gap, detached-HEAD note

Proactive audit + latest review round, combined:

- Restored "and represent sequential steps of the same procedure"
  to Gate B (scan row 8) — dropped relative to the rulebook and
  kb-pr-review, which would have applied Step N labeling to any
  3+ subheadings regardless of whether they're actually sequential
  steps of one procedure.
- Added the missing H1/sidebar_label-consistency bullet to the
  mechanical title-fix list — present in kb-pr-review, absent here,
  so the areas-table citation to this section pointed at content
  that wasn't there.
- Repointed the ::: admonition rule's citation from kb_style_guide.md
  (which never mentions Docusaurus admonition syntax at all) to
  derek/SKILL.md §7, the actual source.
- Links check and title-change sweep now also cover relative .md
  links (../other-article.md), which kb_style_guide.md's own "Do"
  example uses and which were previously excluded as "external."
- All-clean exit message now tells the TSE to check out a branch
  before the next article, since the suggested branch-delete
  command intentionally leaves them on a detached HEAD, which this
  same skill's Step 1 guard would otherwise stop them on next run.

Empirically verified (Vale installed locally) that NetwrixKB truly
replaces rather than merges with Netwrix on docs/kb/ files, per a
review round questioning that claim: a Netwrix-only rule
(BoilerplateCrossRef) produced zero alerts on a docs/kb/ test file.
kb-pr-open's existing guidance was already correct; no change
needed there. kb-pr-review's contradicting guidance, plus its
missing admonition scan row and stale link-sweep pattern, are
already logged as follow-up evidence on the tracked dedup issue.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix admonition-type mismatch, false-clean exit wording, skip-condition, push -u

- Canonicalize the admonition-type list (note/tip/info/warning/danger/
  important) across derek/SKILL.md §7 and kb-pr-open's scan rows 1
  and 23 — the two files previously enumerated different four-item
  subsets, neither covering :::info or :::danger (both in real use).
- Step 4's skip-the-prompt condition now keys on "zero findings of
  any kind," not "zero Required fixes" — a file with only soft
  reminders (semantic title reframes, knowledge_article_id notes,
  low-priority keyword observations) was previously skipped past
  the fix prompt entirely, giving the TSE no chance to act on them.
- All-clean exit message now has two variants: the original for
  when the report was genuinely empty, and a new one for when
  findings existed but were declined/dismissed — the old single
  wording ("no fixes were needed") was false in the latter case.
- Step 7's numbered push step now carries the -u fallback that was
  already in the STOP callout above it but not in the step actually
  being executed, so a fresh branch with no upstream doesn't fail.

The Derek-rules-hardcoded finding and the un-anchored N/N receipt
risk are the same class of issue as the tracked dedup follow-up;
added as further evidence there, including the admonition-list
drift this commit fixes as a concrete example of the failure mode.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Resolve Q&A gerund policy, collapse callout severities, add malformed-ID state

Per explicit product decisions on two open policy questions this
review round surfaced:

1. Q&A title gerund exception: kb-pr-open's existing carve-out
   (Q&A titles stay in question/topic form, not forced to gerund)
   is now the stated policy everywhere. Fixed kb_style_guide.md and
   derek/SKILL.md §3, which previously required gerund form for ALL
   How-To titles with no exception — contradicting kb-pr-open,
   kb-pr-review (which already had the same carve-out), and derek's
   own article-type classifier (which uses "title starts with 'How
   to'/is a question" as the Q&A signal, so derek's classifier and
   title-format check were self-contradictory independent of this
   PR).

2. Callout severity taxonomy: collapsed to the two severities
   kb_style_guide.md already formally defines (NOTE, IMPORTANT).
   derek/SKILL.md §7 and kb-pr-open's scan rows 1/23 previously
   disagreed on whether WARNING/TIP were separate target severities
   (2 vs 3 vs 4-way splits), and none handled :::info/:::danger.
   Added an explicit six-to-two conversion mapping in derek §7 and
   kb-pr-open row 23, and removed WARNING from kb-editing-
   conventions.md §5's blank-line rule to match.

Also added the missing "present but malformed" state to kb-pr-open's
knowledge_article_id table — a value that doesn't start with kA+
alphanumeric (e.g. "12345") previously fell through to the
never-rewrite policy meant for valid/placeholder/empty/missing
states and was reported clean, while derek §1 already flags the
same case as a Required fix.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix derek's title-only classifier and blockquote-severity enforcement gap

1. derek's article-type classifier determined type purely from title
   phrasing, contradicting this PR's own Q&A carve-out (Q&A titles
   are allowed to be non-interrogative). A Q&A article with a
   topical title fell through to Resolution (Symptom) and got
   flagged for missing headings it was never supposed to have —
   confirmed against real data: 131 of 234 ## Question files have
   non-interrogative, non-"How to" titles. Made the classifier
   structure-first (## Question+## Answer, ## Overview+
   ## Instructions, ## Symptom/Cause/Resolution), falling back to
   title only when no recognized structure exists — matching how
   kb-pr-open/kb-pr-review already scope by structure, not title.

2. The "NOTE/IMPORTANT only" severity policy had no enforcement path
   for callouts already in blockquote form with a disallowed
   severity (> **TIP:**, > **WARNING:**, etc.) — every existing rule
   only matched Docusaurus ::: syntax. 16 files (15 TIP, 1 WARNING)
   were invisible to any check. derek §7 and kb-pr-open row 23 now
   flag both the ::: form and the wrong-severity blockquote form,
   with an explicit mapping covering both spellings of each severity.

Migration blast radius for both changes logged on the tracked
dedup issue rather than swept in this PR.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix classifier plural-heading miss, PNG-only claim, Error: prefix status, report routing

1. derek's structure-first classifier (added last commit) only
   matched singular Symptom/Cause/Resolution headings. A plural-
   headed Resolution article (171 files use plural headings) fell
   through to the title fallback and got misclassified as How-To —
   exactly the failure mode the §2 plural-rename note exists to
   prevent. Now matches singular or plural for the structure check,
   and still flags plural as a rename per §2. Also switched the
   "/" separator between Symptom/Cause/Resolution to explicit "and"
   semantics via prose, since "/" read ambiguously as "any of"
   next to the Question/Answer and Overview/Instructions bullets,
   which correctly used "and".

2. kb-pr-open's images:location rule said PNG-only; 4 committed
   .webp images (docs/kb/endpointprotector, docs/kb/accessanalyzer)
   are real, referenced, non-violating images that would have been
   flagged. Now allows PNG or WebP.

3. The rulebook and kb-pr-open both called the Error: title prefix
   "retired," which contradicts kb_style_guide.md and derek/
   SKILL.md §3, both of which still require it for Resolution
   (Error) titles, and 24 files actively use it. Corrected both
   to state the prefix is still required and distinct from the
   inline "Error - <phrase>" log-dump normalization, rather than
   claiming either is retired.

4. Step 3's report contract required a findings section for any
   non-clean Overview row, but only defined table shapes for Vale/
   Dale/Derek — cross-section consistency findings had no place to
   be reported. Routed them into the Derek table with `cross-section`
   as the area, mirroring how kb-editing-conventions findings
   already route there.

kb-pr-review's identical PNG-only wording noted as follow-up on
the tracked dedup issue.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Break Error/Symptom classification circularity, resolve prefix-vs-log-dump precedence

Per explicit decisions on two open questions:

1. derek's Error-vs-Symptom classification was circular: it
   classified Resolution as Error only if the title already started
   with Error:, then checked that Error titles start with Error: —
   trivially true by construction, so an Error article missing the
   prefix silently passed as Symptom. Now classifies by content
   (does the Symptom section name a specific, identifiable error
   code/message) independent of title, then checks the title
   against that classification as a real, reachable check.

2. The <Component> Error - <phrase> log-dump normalization now
   explicitly wins over and is exempt from the Error: prefix
   requirement, rather than leaving both rules asserted with no
   stated precedence. None of the three existing worked examples in
   the rulebook use the Error: prefix, so this keeps them valid
   instead of requiring a rewrite. Updated the rulebook §12, derek
   §3, and kb-pr-open's title-format rules to state the same
   precedence consistently.

Also fixed two nits: escaped-metacharacter guidance for the title-
change link-sweep regex (titles containing . or + would otherwise
silently mismatch), and disambiguated "rows §7, §8" to "rows #7,
#8" in the two example tables, since § means rulebook section
everywhere else in the file.

kb-pr-review's un-propagated callout-severity rule and the
products.js hyphenation migration debt (explicit decision: keep
the strict rule, treat as migration debt like the heading
pluralization) are logged on the tracked dedup issue.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix self-contradiction reintroducing the Error: prefix false positive

The classifier section (Article Type Identification) said a
Resolution (Error) title must start with Error: "regardless of
what the title currently says," directly contradicting the §3
exception added in the same commit for titles already normalized
to the <Component> Error - <phrase> log-dump form. An agent
following the classifier section literally would flag the exact
false positive that §3, kb-editing-conventions.md §12, and
kb-pr-open's title-format rules were all just changed to prevent.
Made the classifier defer to §3's actual condition instead of
restating a stricter one.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix regex escape list gap; sync kb-pr-review to the Error/callout rules

- Title-change link-sweep escape guidance said to escape ".", "+",
  "(", ")", ":" — omitting "?" (which this PR's own Q&A carve-out
  newly makes valid in titles, e.g. "How Do You Export Event Logs?"),
  "*", "[", "]", "{", "}", "|", "^", "$", and incorrectly including
  ":" (not an ERE metacharacter). Replaced the partial enumeration
  with "escape every ERE metacharacter" plus a grep -rF fallback
  that sidesteps escaping entirely.

- kb-pr-review had fallen out of sync with three rule changes this
  PR already made to derek/kb-pr-open: it still called the Error:
  prefix "retired" (contradicting kb_style_guide.md, derek §3, and
  kb-pr-open, and disagreeing with the reviewer on the same
  article's title fix), its scan row 1 still listed WARNING as a
  valid callout, and it had no equivalent to kb-pr-open's row 23
  (flagging wrong-severity blockquotes and Docusaurus admonitions).
  Given this has now recurred across four review rounds with
  concrete file-level evidence each time, fixed directly here
  instead of deferring again: updated the retired-prefix line,
  added row 23, dropped WARNING from row 1, and bumped all five
  "22 rows"/"22/22" references to 23. Also removed a stale "row 23
  removed" comment that predated this reuse of row 23, and
  disambiguated "rows §7, §8" to "rows #7, #8" to match kb-pr-open.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix pathname:// mandate misstatement and shell-quoting hazard in link sweep

1. kb-pr-open's links row claimed "rulebook §8 mandates the
   pathname:// form for internal cross-doc links" — the rulebook
   only constrains pathname:// links that already exist (underscore
   version segments, must resolve), it doesn't mandate using that
   form. The bare /docs/... form is dominant (~218 KB files) and
   builds clean. Reworded to state all three internal link forms
   are valid and none should be converted to another.

2. The title-change link-text sweep in both kb-pr-open and
   kb-pr-review built a shell grep command by interpolating the
   old title into a single-quoted string. Over 20 KB titles contain
   an internal apostrophe (e.g. "Unable to Login to UI due to
   'Invalid Token' Error"), which breaks out of a single-quoted
   shell string — on top of the regex-metacharacter escaping this
   already called for. Reworded to use a dedicated search tool
   with the title passed as a parameter (removing the shell-quoting
   layer entirely) while keeping the regex-escaping requirement,
   since the underlying match is still regex-based. Applied the
   same fix to kb-pr-review's copy, which had not been updated
   with the multi-form pattern from an earlier round either.

3. kb-pr-review's Overview-table bullet said "Cross-section
   consistency (all patterns)" while every other reference to this
   row in the same file says "6 patterns" — matched kb-pr-open's
   phrasing, including the recount caveat.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Broaden Error: exemption, carve out unmapped product IDs, fix heading-labels scope

1. The Error:-prefix exemption only covered titles normalized from
   a raw log dump, but kb_style_guide.md's actual exemption is
   broader: any Resolution (Error) title where the error message
   itself already contains the word "error" (e.g. "Agents Have
   Become Unresponsive Error") is exempt, independent of whether
   it's a log-dump normalization. Dozens of real KB titles hit this
   broader case. Fixed in derek/SKILL.md (classifier and §3),
   kb-pr-open, kb-pr-review, and kb-editing-conventions.md §12 to
   state both exemptions consistently. Also fixed two derek/SKILL.md
   shorthand path references (should be .claude/skills/derek/SKILL.md
   from within .claude/references/).

2. products frontmatter rule had no valid target for three values
   in active use: general (44 files, cross-product content, no
   corresponding product.js entry), onesecure (5 files — has a
   real target, 1secure, so this one should still be flagged and
   corrected), and recoveryad (1 file — genuinely ambiguous, the
   copy script maps two different products to this KB folder).
   Carved out general/recoveryad as non-flaggable and clarified
   onesecure as a normal correction, in both kb-pr-open and
   kb-pr-review.

3. article-type: heading-labels was scoped to "Symptom Resolution
   articles" only, but the singular-heading rule applies to both
   Resolution formats (kb_style_guide.md, derek §2). An Error
   Resolution article with plural headings would have been skipped
   by this check and only caught downstream. Fixed in both
   kb-pr-open and kb-pr-review.

Also added derek, kb-writer, kb-pr-open, and kb-pr-review to
CLAUDE.md's Skills and Agents table — all four were missing.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Add kb-pr-review frontmatter, fix image-format/heading-scope gaps, resolve Q&A wording contradiction

1. kb-pr-review/SKILL.md had no YAML frontmatter (no name/description/
   argument-hint), unlike every other skill — including the two new
   ones this PR adds. Added it, matching the convention.

2. images:location still disagreed between kb-pr-open (PNG or WebP)
   and kb-pr-review (PNG only) — and neither actually matched the
   repo, which also has committed .jpg/.jpeg files. Widened both to
   "format doesn't matter, only location does," covering all four
   formats in active use.

3. :::caution (valid Docusaurus admonition syntax) was missing from
   every six-item ::: enumeration (derek §7, kb-pr-open/kb-pr-review
   rows 1 and 23) despite the blockquote half of the same rule
   already targeting > **CAUTION:**. Added it everywhere.

4. Derek's structure-first classifier required ALL of a type's
   headings before classifying (## Question AND ## Answer, etc.).
   An article missing just one heading fell through to the title
   fallback and got misclassified as an unrelated type, demanding a
   Symptom/Cause/Resolution structure it never needed. Changed to
   partial-match tolerance (any one of a type's headings is enough
   to classify; §2 flags the rest as missing) — extending the same
   forgiveness already given to Resolution's plural-heading case.

5. kb_style_guide.md's Q&A title rule was self-contradictory:
   "describes the topic, not the action" immediately followed by
   "a 'How to...' title is expected" (which is action-form). Fixed
   in kb_style_guide.md, derek §3, and the gerund-carve-out wording
   in both kb-pr-open and kb-pr-review to state consistently that
   topic-descriptive, "How to...", and question-form titles are all
   valid for Q&A — none is a gerund violation.

Also caught while reviewing: kb-pr-review's links row was still the
pre-sync version (missing pathname:// and relative-.md link forms,
and the unconditional build-backstop claim) — synced to match
kb-pr-open's already-fixed version.

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

* Fix classifier ordering regression and stale PNG-only claim in docs/CLAUDE.md

1. The partial-match classifier fix from the previous commit checked
   Q&A and Instructions before Resolution, with "first match wins."
   Since a Resolution article can legitimately carry an ## Overview
   heading alongside Symptom/Cause/Resolution, that combination now
   matched the Instructions check first and misclassified. Confirmed
   against three real KB files: two Overview+Symptom+Cause+Resolution
   articles would have been told to add an unneeded ## Instructions
   section and gerund-ize an error title; a Symptom+Cause+Answer
   article would have been told to add ## Question instead of being
   told its real defect (## Answer should be ## Resolution) — the
   exact opposite of what the prior title-based rule got right.
   Reordered to check Resolution first, since How-To articles never
   carry ## Symptom but Resolution articles routinely carry
   ## Overview — the asymmetry that made this safe to reorder.

2. docs/CLAUDE.md (auto-loaded whenever an agent works under docs/)
   still asserted KB images are PNG-only, contradicting the format
   rule this PR already relaxed in kb-pr-open and kb-pr-review to
   match what's actually committed on disk (PNG/WebP/JPG/JPEG).

Generated with AI

Co-Authored-By: Claude Code <ai@netwrix.com>

---------

Co-authored-by: Claude Code <ai@netwrix.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants