4.9 KiB
4.9 KiB
name, description
| name | description |
|---|---|
| page-reviewer | Audit a Confluence-ready body before it is posted or updated. Use as the last gate before confluence_create_page_from_file or confluence_update_page_from_file; do not post a page that has not been through this skill. |
Page reviewer
A Confluence page is hard to walk back once it's live: watchers, reactions,
and links accumulate, and minorEdit=true will not save you from a body that
embarrasses the team. Run this skill before every create or update.
The reviewer reads the draft and the page-context, and returns one of three verdicts:
- PASS — body is ready, post it
- REVISE — specific, line-anchored changes are required before posting
- BLOCK — something about the draft cannot be fixed locally (wrong space, wrong parent, scope creep, secret leak) — escalate
The reviewer never edits the draft. It returns a checklist; the human or the
confluence-page skill applies the changes.
Hard rules
- No body that contains secrets, tokens, session cookies, customer PII, or
internal hostnames (
*.netcracker.cominternal suffixes are fine in links; IPs, hostnames and ports from runbooks are not). The reviewer blocks on first match. - No body that references the local mirror path (
~/Netcracker/Projects/NDO/knowledge/...). Use the public BASS URL. - No body larger than 300 lines without a one-line reason in the draft header. Pages drift; reviewers and readers both lose when they do.
- No body whose title collides with an existing page under the same parent — see step 2 of the workflow.
- No unrendered macros — every
{plantuml},{code},{info},{note},{warning}block must be in its proper storage form (seeconfluence-page/references/macros.md). The reviewer rejects raw wiki markup and raw Markdown inside storage bodies.
Workflow
- Identify the page. Title, parent, space key, target id (for update).
- Collision check. If creating:
mcp__atlassian.confluence_search(cql="space=<SPACE> AND title~\"<title>\"")- If a page already exists under the same parent, return BLOCK with "title collision — pick a more specific title or update the existing page instead".
- Pull upstream context. If updating, fetch the current body with
mcp__atlassian.confluence_get_page_content(pageId)and diff against the draft. Flag any section that was renamed or deleted upstream and carried forward in the draft without intent. - Lint the body. For each of the checks below, return a line number and a short rationale. See references/checks.md for the full list and severity table.
- Slop pass. Run the
unslopskill on the body. If unslop returns more than 5 fixes for a page under 100 lines, or more than 10 for any page, return REVISE — the author should reread, not the agent. - Diagram sanity. For every
{plantuml}block, parse to a.pumltemp file and runplantuml -checkonly -syntaxifplantumlis on$PATH. If the tool is missing, skip the parse and warn — do not block on a missing optional tool. - Render verdict.
Verdict shape
PASS:
- ready to post; no blocking issues
- (optional) minor notes for the author
REVISE:
- L<line>: <rule> — <one-line fix>
- L<line>: <rule> — <one-line fix>
- ...
- estimated fix effort: <s|m|l>
BLOCK:
- <rule>: <what's wrong, what to do instead>
- <rule>: ...
The verdict is the only thing the calling skill should consume. Everything else (diff, lint output, slop report) goes to stderr / a side file for the human.
What the reviewer does NOT do
- Edit the draft. The author or the
confluence-pageskill applies fixes. Reviewer that also edits is hard to audit. - Post anything. The reviewer never calls a write MCP tool.
- Judge voice. Use
unslopfor that. The reviewer enforces structure, safety, and rendering correctness; unslop enforces voice. - Approve secrets in test data. Even "obvious" test fixtures get blocked. If you need sample data with realistic-looking identifiers, generate them with the project's standard placeholder vocabulary.
Severity table
| Severity | Returns | Examples |
|---|---|---|
| Blocker | BLOCK | secret leak, wrong parent, wrong space, title collision, raw wiki markup in storage body |
| Major | REVISE | unrendered macro, broken internal link, image without alt text, slop cluster |
| Minor | PASS (with note) | inconsistent heading levels, missing one-line summary, sub-optimal anchor text |
Full rule list: references/checks.md.
Related
| Skill | Role |
|---|---|
confluence-page |
Calls the reviewer before every create/update |
unslop |
Voice-level pass; the reviewer delegates voice to it |
diagram-plantuml |
Owns PlantUML syntax; the reviewer delegates diagram parsing to it |