Skip to content

Add review skills and fix site findings - #9

Open
vartaxe wants to merge 18 commits into
mainfrom
copilot/review-and-skills-2026-10-17
Open

vartaxe wants to merge 18 commits into
mainfrom
copilot/review-and-skills-2026-10-17

Conversation

@vartaxe

@vartaxe vartaxe commented Oct 17, 2026

Copy link
Copy Markdown
Owner

Summary

  • Install github-actions-hardening, docs-sync-audit, and web-design-reviewer.
  • Fix nested section spacing and light-theme accent contrast.
  • Restore the legacy /ConfigMgr-OSD/ redirect and add redirect/contrast validation.
  • Improve the docs checker to resolve skill-relative scripts, ignore code spans/fences, handle PowerShell environment reads, and decode URL-encoded links.

Validation

  • Site contrast checks: 4.5012:1 light and 7.5680:1 dark.
  • Local HTTP checks: canonical homepage and legacy redirect returned successfully.
  • Docs-drift regression test passed; git diff --check passed.

Install the selected Copilot skills, correct site spacing and accent contrast, restore the legacy redirect, and validate contrast and redirect behavior.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Script-path normalization and query-bearing link handling incorrectly report valid resources as missing.

2 open issues
What changed in this PR

Adds reusable review skills and improves the static site’s presentation, legacy navigation, and validation.

Changes:

  • Adds workflow-security, documentation-audit, and visual-review skills.
  • Fixes section spacing and accent contrast, and restores the legacy redirect.
  • Adds redirect/contrast validation and documentation-checker improvements.
File Description
style.css Fixes nested spacing and light-theme contrast.
ConfigMgr-OSD/​index.html Restores the legacy redirect.
.github/​workflows/​validate-site.yml Validates redirect and label contrast.
.github/​skills/​web-design-reviewer/​SKILL.md Adds visual-review guidance.
.github/​skills/​web-design-reviewer/​references/​visual-checklist.md Adds visual and accessibility checks.
.github/​skills/​web-design-reviewer/​references/​framework-fixes.md Provides framework-specific fixes.
.github/​skills/​github-actions-hardening/​SKILL.md Adds workflow-security guidance.
.github/​skills/​github-actions-hardening/​references/​triggers-and-privilege.md Explains trigger trust boundaries.
.github/​skills/​github-actions-hardening/​references/​supply-chain.md Covers action and runner security.
.github/​skills/​github-actions-hardening/​references/​report-format.md Defines security report structure.
.github/​skills/​github-actions-hardening/​references/​permissions-and-tokens.md Documents token and secret controls.
.github/​skills/​github-actions-hardening/​references/​injection.md Explains injection prevention.
.github/​skills/​docs-sync-audit/​tests/​test_docs_drift.py Adds checker regression coverage.
.github/​skills/​docs-sync-audit/​SKILL.md Adds documentation-audit guidance.
.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py Adds automated documentation checks.

Review effort: Balanced

Preserve valid command paths and local Markdown links, and add regressions for the reviewed cases.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The audit has unresolved gaps that can miss broken commands and links or produce incorrect environment-variable findings.

No open issues 🎉

9 previously missed issues

In code that hasn't changed since last review

Medium severity Match example as a whole placeholder path component

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:79

The example alternative also matches the prefix of the common examples/ directory, so broken links such as [Guide](examples/missing.md) are silently skipped instead of checked. Match example as a whole placeholder component rather than as an arbitrary prefix.

Medium severity Include manifests with no scripts in the inventory

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:164

A valid package.json may omit scripts entirely. In that case this omits the package from the inventory, so if not npm_scripts later skips checking npm run build even though the command fails. Record an empty script set for manifests without a scripts field, as is already done for "scripts": {}.

Medium severity Handle tilde fences and match closing fence length

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:180

This only recognizes backtick fences, so commands in valid ~~~ Markdown fences are never checked. It also treats a shorter backtick run inside a longer fence as its end. Track the opening character and length, and only close on a matching fence with no trailing content.

Medium severity Track inline code spans across line breaks

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:201

Markdown code spans can cross line breaks, but applying INLINE_CODE to each line separately leaves the interior visible to the link checker. For example, a code span containing a line [example](missing.md) produces a spurious broken-link finding. Track inline-code delimiters across lines while preserving the original line numbers.

Medium severity Exclude PowerShell environment assignments from input reads

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:231

This treats PowerShell environment assignments as reads: $env:API_TOKEN = 'fixed' is counted as consuming API_TOKEN. Consequently the audit can accept a documented input that the script actually overwrites, and also report write-only variables as undocumented inputs. Distinguish assignments and comments from actual reads.

Medium severity Preserve PowerShell environment-variable case on case-sensitive platforms

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:231

Uppercasing every PowerShell name conflates distinct environment variables on Linux and macOS, where $env:api_token and $env:API_TOKEN differ. An .env.example declaration of API_TOKEN can therefore be incorrectly matched to a read of $env:api_token. Preserve the original spelling and make code/documentation matching account for the target platform's case sensitivity.

Medium severity Parse multiline Python imports with the AST

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:265

Parenthesized multiline imports are not captured by FROM_IMPORT_SPEC: for from package import ( followed by config on the next line, this loop sees only (. Consequently, a live package/config.py can be marked unreferenced and its documented environment settings reported as ineffective. Parse Python imports with ast while retaining the existing handling for other languages.

Medium severity Recognize explicit PowerShell variables in documentation

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:313

The PowerShell code scanner recognizes $env:windir and $env:COMPUTERNAME, but the documentation scanner rejects lowercase names and names without underscores. Even explicitly documented PowerShell variables are therefore reported as undocumented. Recognize explicit $env:NAME references separately from bare-token heuristics and apply the same case-matching policy in both inventories.

Medium severity Check Makefile presence even when no targets are extracted

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:356

When a Makefile exists but contains no explicit targets (for example, only variable assignments), make_targets is empty and this skips every documented make command. Thus make all is silently accepted even though it fails. Check Makefile presence independently of the extracted target set.

2 resolved since last review

Review effort: Balanced

vartaxe and others added 2 commits November 1, 2026 03:01
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The audit has unresolved parsing and working-directory issues that can produce both false findings and missed documentation drift.

No open issues 🎉

11 previously missed issues

In code that hasn't changed since last review

Medium severity Parse balanced and escaped parentheses in Markdown links

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:74

Valid Markdown destinations can contain balanced parentheses. For example, [Linux setup](docs/setup_(linux).md) is parsed as docs/setup_(linux, so an existing link is reported as broken. Parse balanced or escaped parentheses in link destinations instead of stopping at the first ).

Medium severity Require segment boundaries for exact placeholder names

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:83

The placeholder alternatives match prefixes of path segments, so a normal link such as examples/install.md is classified as a placeholder and never checked, even when the file is missing. Require a segment boundary for exact placeholder names while retaining intentional prefixes such as your-.

Medium severity Require whitespace after closing Markdown fence markers

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:270

A closing Markdown fence may only have whitespace after its marker, but this accepts a line such as ```python as a close. Inside a fenced example, that exposes subsequent fake links to checking and can hide real links after the actual closing fence. Require a whitespace-only suffix here and in fenced_block_groups at lines 195–197.

Medium severity Track inline code spans across line breaks

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:279

Markdown inline code spans may cross line breaks, but masking each line independently leaves their contents visible to the link checker. For example, a span containing [example](missing.md) on a subsequent line is incorrectly reported as a broken link. Track backtick spans across lines while preserving their line numbers.

Medium severity Exclude strings and comments from environment-read scanning

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:308

Scanning raw source lines also counts environment reads inside strings and comments. For example, tests/test_docs_drift.py:102 embeds os.getenv('API_TOKEN') in a fixture string, which this scan counts as a configuration read and can turn into spurious env findings. Distinguish executable reads from fixture text and comments before adding names to the inventory.

Medium severity Exclude PowerShell environment assignments from read detection

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:309

This treats every PowerShell environment-variable occurrence as a read, including assignments such as $env:BUILD_MODE = 'release'. Consequently, scripts that only set a variable are reported as depending on undocumented configuration. Distinguish assignments from actual reads before adding the name to found.

Medium severity Limit environment inventory to recognized sample files

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:367

This treats every .env* file, including runtime .env and .env.local files, as documentation. When filesystem fallback includes a developer's local env file, its keys suppress undocumented-env findings even though no documentation or sample contains them, and the audit unnecessarily reads that file. Restrict this inventory to explicitly recognized sample/example files.

Medium severity Allow short keys in environment sample files

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:379

This requires at least three characters, so legitimate keys such as CI or TZ in .env.example are discarded even though the code-read patterns accept them. Consequently a documented process.env.CI is incorrectly reported as undocumented. Allow short environment variable names in the sample-file inventory without broadening the prose heuristic.

Medium severity Track Makefile targets by invocation working directory

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:442

Make targets are merged across every Makefile, so a target in packages/web/Makefile makes a broken root-level make deploy appear valid; an existing Makefile with no targets also suppresses missing-target checks altogether. Track Makefile presence and targets by the invocation's working directory, including cd and make -C, and distinguish a missing Makefile from an empty target set.

Medium severity Resolve script paths against the effective working directory

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:453

Script paths are checked against the repository and document directories, but not the working directory tracked after cd. For example, cd tools followed by python scripts/check.py is reported missing when tools/scripts/check.py exists; conversely, a root-level file can make a broken command pass. Resolve script paths against the effective directory at each invocation, including directory changes on the same line.

Medium severity Exclude all absolute URI schemes from filesystem checks

.github/​skills/​docs-sync-audit/​scripts/​docs_drift.py:462

This skips only a fixed set of URL schemes, so valid links such as ftp://host/file or vscode://... are treated as repository-relative paths and reported as broken. Exclude all absolute URI schemes before checking the filesystem.

Review effort: Balanced

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The breadth of command-resolution, documentation-parsing, and security-guidance concerns warrants human assessment before approval.

No open issues 🎉

Review effort: Balanced

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

vartaxe and others added 2 commits November 1, 2026 06:41
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread .github/workflows/validate-site.yml Resolved
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The environment scanner counts comments, string literals, and write-only assignments as reads, causing incorrect drift findings.

No open issues 🎉

5 resolved since last review

Review effort: Balanced

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The environment-variable scanner misses reads in compound assignments and increments, causing documented variables to be incorrectly reported as unused.

1 open issue

Review effort: Balanced

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Several nuanced audit edge cases and a potential performance concern warrant human assessment of the change’s reliability.

No open issues 🎉

1 resolved since last review

Review effort: Balanced

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The audit scanner can produce false findings because it misses valid environment-variable reads, silently skips source files, and misinterprets Markdown comments, code blocks, and link titles.

5 open issues

Review effort: Balanced

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The audit involves several subtle parsing and validation edge cases that warrant human assessment.

No open issues 🎉

5 resolved since last review

Review effort: Balanced

This branch has not been deployed

No deployments
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.

3 participants