4.1 KiB
4.1 KiB
Page Reviewer — Checks
The full rule list the page-reviewer skill runs. Each check has a severity
(BLOCKER / MAJOR / MINOR), the pattern it looks for, and the verdict it
returns.
BLOCKER
| ID | Rule | How to detect |
|---|---|---|
B-SECRET |
Body contains a token, key, password, or PII pattern from confluence-page/references/secrets.md |
grep -nE "<patterns>" <draft> |
B-MIRROR-PATH |
Body references a local mirror path (~/Netcracker/Projects/NDO/knowledge/...) |
grep for the root path |
B-COLLISION |
A page with the same title exists under the same parent | confluence_search for the title |
B-WRONG-SPACE |
Draft targets a space that doesn't match content kind (see confluence-page/references/space-keys.md) |
manual check by reviewer |
B-WRONG-FORMAT |
Body is wiki markup or Markdown, not storage XHTML | header doesn't start with <p, <h, <ac:, or <table; presence of --- front-matter fences |
B-LOCAL-FS-LINK |
Body contains file://, ~/, or /home/masi1023/ paths |
grep |
B-CUSTOMER-PII |
Customer name, hostname, or payment info in body | grep + manual review |
B-PARENT-LOOP |
Parent resolves to a descendant of itself | confluence_get_page ancestry walk |
MAJOR
| ID | Rule | How to detect |
|---|---|---|
M-UNRENDERED-MACRO |
{plantuml}, {code}, {info}, {note}, etc. not in proper storage form |
grep for unclosed or naked {...} macros |
M-BROKEN-LINK |
Internal link points to a page id that doesn't exist or a URL that 404s | confluence_search for the target title; HEAD on the URL |
M-MISSING-ALT |
Image element without ac:alt |
grep for <ac:image without ac:alt |
M-DIAGRAM-IN-PANEL |
PlantUML block inside an info / note / warning panel | grep + structure check |
M-DIAGRAM-IN-CODE |
PlantUML block inside a {code} block |
grep + structure check |
M-CODE-NO-LANG |
{code} block without language parameter |
grep + structure check |
M-EMPTY-SECTION |
Section heading followed by nothing or a single sentence | structure walk |
M-STALE-SECTION |
Section in draft was deleted from upstream since the last pull (update flow) | diff against confluence_get_page_content |
M-SLOP-CLUSTER |
unslop skill returns >5 fixes for a 30-line block |
unslop report count |
M-NO-SUMMARY |
First paragraph is missing for a how-to or runbook | structure check |
M-OVER-300 |
Page body is over 300 lines and no justification header exists | wc -l |
MINOR (PASS with note)
| ID | Rule | How to detect |
|---|---|---|
m-HEADING-LEVEL |
Skipped heading level (h1 → h3 with no h2) | structure walk |
m-MISSING-ANCHOR |
Cross-page reference without an explicit anchor text | structure walk |
m-LOOSE-LINK |
"click here", "this link" | grep |
m-EMOJI-IN-HEADING |
Emoji in headings that (h1 / h2) | grep |
m-CAPITALIZED-LINE |
Long uppercase run (more than 5 words) | grep |
m-MULTI-COLON |
Multiple consecutive : in a sentence |
grep |
m-RUN-ON-LINE |
A single line over 200 chars | awk '{ print length, NR }' |
Severity → verdict
BLOCKER > 0 → BLOCK
MAJOR > 0 → REVISE
MINOR > 0 → PASS (with note)
A single BLOCKER short-circuits. The reviewer still lists MAJOR / MINOR findings so the author can fix them in the same pass.
Diff mode (updates)
When the reviewer is called for an update, also run:
| ID | Rule |
|---|---|
D-UNINTENDED-DROP |
A section in the upstream body that the draft does not have (and was not intentionally removed by versionMessage) |
D-UNINTENDED-RENAME |
A heading in the upstream body that the draft has under a different name |
D-STALE-VERSION |
The versionMessage does not match the change set |
D- rules are MAJOR by default; BLOCKER only if the dropped content was
flagged as load-bearing by the previous reviewer.
What the reviewer does NOT check
- Correctness of the technical content — that's an SME responsibility
- Style / voice — that's
unslop - Compliance with team conventions outside this list — escalate to the page owner