Review pull requests and diffs in guide — the source of the rios0rios0 engineering standards, its wiki, and the generated AI-assistant rule files — against its own standards, with extra weight on wiki page-name uniqueness, link integrity, and the generator inputs. Use when reviewing a PR, a branch, or staged changes here.
Installs into .claude/skills of the current project.
Are you the author of Code Review?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/rios0rios0-code-review)
---
name: code-review
description: "Review pull requests and diffs in guide — the source of the rios0rios0 engineering standards, its wiki, and the generated AI-assistant rule files — against its own standards, with extra weight on wiki page-name uniqueness, link integrity, and the generator inputs. Use when reviewing a PR, a branch, or staged changes here."
---
# Code review — `guide`
`guide` is the canonical standards documentation: it publishes to the GitHub wiki and generates rule files for Claude Code, Cursor, Codex, and GitHub Copilot onto the `generated` branch. Everything every other repository is reviewed against starts here, so an ambiguous sentence propagates as a misapplied rule everywhere.
## When to use this skill
Use it whenever you are asked to review a pull request, a diff, a branch, or staged changes
in this repository — and before opening a pull request of your own, as a self-check. It is a
**review** skill: it produces findings, not commits.
## Source of truth
The canonical engineering standards live in the
**[rios0rios0/guide wiki](https://github.com/rios0rios0/guide/wiki)**. This file is a
repo-tailored index into that guide plus the rules that only apply here. Precedence, highest
first:
1. This repository's `.github/copilot-instructions.md`, `CLAUDE.md`, and `CONTRIBUTING.md` —
they describe *this* codebase and its load-bearing invariants.
2. The **rios0rios0/guide** wiki — the shared standard.
3. General language idiom.
When the guide and a general convention disagree, the guide wins. When this file and the
guide disagree, the guide wins and this file should be corrected in the same pull request.
### Guide pages that apply here
| Topic | Page |
|-------|------|
| YAML Conventions — `.yaml`, single quotes, unquoted scalars | [YAML](https://github.com/rios0rios0/guide/wiki/YAML) |
| Git Flow — branches, commits, SemVer, breaking changes | [Git-Flow](https://github.com/rios0rios0/guide/wiki/Git-Flow) |
| Documentation & Change Control — changelog and docs discipline | [Documentation-&-Change-Control](https://github.com/rios0rios0/guide/wiki/Documentation-&-Change-Control) |
| CHANGELOG Formatting — capitalisation and backticks | [CHANGELOG-Formatting](https://github.com/rios0rios0/guide/wiki/CHANGELOG-Formatting) |
| Security — OWASP checklist, secret hygiene, SAST | [Security](https://github.com/rios0rios0/guide/wiki/Security) |
| CI & CD — pipeline stages and the local quality gates | [CI-&-CD](https://github.com/rios0rios0/guide/wiki/CI-&-CD) |
| Code Style — baseline naming and the operations vocabulary | [Code-Style](https://github.com/rios0rios0/guide/wiki/Code-Style) |
## How to run the review
1. **Establish the range.** Resolve the default branch with
`git symbolic-ref refs/remotes/origin/HEAD` (strip `refs/remotes/origin/`; fall back to `main`),
then read the diff with `git diff <default>...HEAD` and the file list with
`git diff <default>...HEAD --name-only`.
2. **Read whole files, not just hunks.** A hunk cannot show a layering violation, a missing
test, or a duplicated helper. Open every changed file in full, plus the files it imports
from the layer below.
3. **Check the change set as a unit** — not only the code. A change that alters behaviour,
configuration, or architecture is incomplete without its changelog entry and its
documentation update, and that omission is a finding in its own right.
4. **Map every finding to a rule.** Each finding must name the rule it breaks and link the
guide page (or the repository file) that states it. A comment that cannot be traced to a
rule is a suggestion, not a defect — label it as such.
5. **Report, do not rewrite.** Produce the review in the output format below. Only edit files
when the request explicitly asks for fixes.
## What matters most in `guide`
These are the checks that catch real defects in this repository. Work through
them before the generic ones.
- **Wiki pages are flat — the base file name is the page name, so it must be unique across the whole tree.** `Life-Cycle/Git-Flow.md` publishes as the page `Git-Flow`. Two files sharing a base name collide and one silently overwrites the other. This is a **Critical** finding, and `README.md` says so explicitly.
- **A new page is not done until it is listed in `README.md`, `_Sidebar.md`, and its parent index page.** An orphaned page is unreachable from the wiki navigation.
- **Internal links are flattened by the generator** — it rewrites a link target to the base name. Use a link shape the generator can resolve, and check relative image paths resolve from the file's own directory.
- **The rule text must be actionable.** Every rule states what to do, why, and what a violation looks like. "Prefer clean code" is not a rule; it becomes noise in seventy repositories' reviews.
- **A change to a rule is a change to every repository.** Say in the pull-request description which repositories are already non-compliant and whether they need follow-up — a rule nobody follows is worse than no rule.
- **`.github/workflows/generate-ai-rules/` is the generator's input.** Agents, commands, and skills there become the `generated` branch consumed by [aisync](https://github.com/rios0rios0/aisync) and the Claude Code plugin. A change must keep the frontmatter valid for every target tool.
- **Examples must be correct and idiomatic.** They get copied verbatim; a broken snippet in the guide becomes a broken pattern in production code.
- **Both the TL;DR and the body change together.** The TL;DR is what most readers act on, so a body change that leaves it stale actively misleads.
- Follow the guide's own Markdown and YAML conventions: `.yaml`, single quotes, backticked identifiers, proper nouns capitalised.
### Commands a reviewer should be able to quote
```bash
# the docs themselves have no build step; check that no two Markdown files
# share a base name (a wiki page-name collision):
find . -name '*.md' -not -path './.git/*' -printf '%f\n' | sort | uniq -d
# the two Go tools under .github/workflows/ ARE built and tested — run these
# when a change touches update-wiki/ or generate-ai-rules/ (Go source, config,
# parser, or formatter). There is no Makefile and no sast target:
cd .github/workflows/update-wiki && go build -o update-wiki ./... && go test ./...
cd .github/workflows/generate-ai-rules && go build -o generate-ai-rules ./... && go test ./...
```
### YAML
See [YAML Conventions](https://github.com/rios0rios0/guide/wiki/YAML). The extension is `.yaml`, never `.yml`. String values are
single-quoted; double quotes appear only where interpolation or an escape needs them;
booleans and numbers are never quoted. This applies to workflows, compose files, manifests,
and YAML blocks inside Markdown.
## Tests
The wiki sync and the rule generator are the verification path: `update-wiki.yml` publishes the pages and `generate-ai-rules.yaml` builds the `generated` branch. A structural change should be checked against both workflows before merging. Each Go tool carries `*_test.go` unit tests (`update-wiki`; `generate-ai-rules` splits `config`, `parser`, and `formatter`) — a change to either tool that does not keep `go test ./...` green is a finding.
## Documentation and change control
See [Documentation & Change Control](https://github.com/rios0rios0/guide/wiki/Documentation-&-Change-Control) and
[CHANGELOG Formatting](https://github.com/rios0rios0/guide/wiki/CHANGELOG-Formatting).
This repository uses **chlog fragments**. `CHANGELOG.md` is generated and is never edited by
hand.
- Every change ships a fragment created with `chlog new --kind <Kind> --body '…'`, staged in
the **same commit** as the code. Kinds: `Added`, `Changed`, `Deprecated`, `Removed`,
`Fixed`, `Security`.
- A backward-incompatible change to the public interface additionally carries `--breaking`.
The kind alone never triggers a major bump.
- A hand-edited `CHANGELOG.md`, or a code change with no fragment under
`.changes/unreleased/`, is a **Critical** finding — `chlog check` fails the build for it.
- Fragment bodies start with a lowercase verb in simple past tense, capitalise proper nouns
(GitHub, Go, Docker), and wrap code identifiers and versions in backticks.
- `README.md` is updated whenever usage, setup, configuration, or architecture changes;
`.github/copilot-instructions.md` and `CLAUDE.md` whenever the workflow, commands, or
structure changes. Documentation and code ship in one commit.
## Git Flow and pull-request hygiene
See [Git Flow](https://github.com/rios0rios0/guide/wiki/Git-Flow) and [Merge Guide](https://github.com/rios0rios0/guide/wiki/Merge-Guide).
- Branch names are `feat/`, `fix/`, `refactor/`, `chore/`, `test/`, or `docs/` followed by a
ticket ID or a short slug — `feat/TICKET-000`, `fix/input-mask`.
- Commit subjects are `type(SCOPE): message`: simple past tense (`added`, `fixed`, `changed`,
`removed`), lowercase first word, no trailing period, code identifiers in backticks.
- Branches are synchronised with `git rebase`, never `git merge`. A merge commit from the
default branch inside a feature branch is a finding.
- Breaking changes are flagged in **three** places: the commit footer
(`**BREAKING CHANGE:** …`), the changelog, and the pull-request description. One or two of
the three is not enough.
- Versions follow [SemVer](https://semver.org/): MAJOR for incompatible changes, MINOR for
features, PATCH for fixes.
## Security
See [Security](https://github.com/rios0rios0/guide/wiki/Security).
- **No hard-coded secrets.** API keys, tokens, passwords, and private keys belong in
environment variables or a secret manager — never in source, tests, fixtures, or the
changelog. A secret that reaches a commit must be rotated, not merely deleted.
- **Never write a PEM header sentinel or a realistic key shape into a fixture**
(GitHub `ghp_` prefixes, OpenAI `sk-` prefixes, AWS `AKIA` prefixes, Slack `xoxb`
prefixes, JWT-shaped strings, or the dashed `BEGIN …` banners). Gitleaks matches
the shape, not the value, so a placeholder that merely *looks* like a credential
fails the pipeline. Use inert placeholders such as `fixture-token-placeholder`.
- **Suppressions must be justified.** Entries in `.gitleaksignore`, `.trivyignore`,
`.semgrepignore`, or `.codeql-false-positives` need a fingerprint, a dated comment, and a
reason. A suppression added to silence a real finding is a Critical.
- Validate and sanitise every external input; use parameterised queries; apply least
privilege; keep secrets out of logs.
- Dependency manifest changes are reviewed for new transitive vulnerabilities. When a fix
exists, bump the version rather than suppressing the finding.
## What not to flag
A review that raises noise gets ignored. Do not report these:
- The `_Sidebar.md` and `_Footer.md` naming — those are GitHub wiki conventions.
- Directory nesting in the source tree; the published wiki is flat by design.
- Anything the guide does not require and this file does not list, unless it is a genuine correctness or security defect — say so plainly and label it a Suggestion.
## Review output format
```
## Code review: <branch or PR>
### Critical (must fix before merge)
- `path/to/file.ext:LINE` — <what is wrong> — violates <rule> (<guide page or repo file>)
### Warning (should fix)
- `path/to/file.ext:LINE` — <what is wrong> — violates <rule>
### Suggestion (optional)
- `path/to/file.ext:LINE` — <improvement>
### Change-control checklist
- [ ] Changelog entry present for every behavioural change
- [ ] `README.md` updated if usage, setup, or architecture changed
- [ ] `.github/copilot-instructions.md` and `CLAUDE.md` updated if the workflow, commands, or structure changed
- [ ] Commit messages follow `type(SCOPE): message` in simple past tense
- [ ] Breaking changes flagged in the commit footer, the changelog, and the PR description
### Verdict: APPROVE / REQUEST CHANGES
<one paragraph: the blocking findings, or why the change is ready>
```
## Severity
| Severity | Use for |
|----------------|------------------------------------------------------------------------------------------------------------------------------------|
| **Critical** | Broken dependency direction, a leaked secret, an injection or authentication flaw, a missing changelog entry, a banned mock library, a load-bearing invariant broken, a test deleted rather than fixed. |
| **Warning** | Naming that departs from the guide, a missing test for a new branch of logic, an unexplained magic value, a stale README or instructions file, a `switch` that should be a map. |
| **Suggestion** | Readability, consistency with neighbouring modules, and performance ideas that no rule mandates. |
Rank findings most severe first, and state plainly when nothing blocks the merge — an empty
Critical section is a valid, useful review.