Skip to content
NexusArchitect Docs
English
Esc
navigateopen⌘Jpreview
On this page

review-issue

Epic-wide review, the auto-fix loop, and how to distill findings into review-knowledge.md

The defining feature of this skill is an EpicEpicThe largest unit of work, grouping multiple Issues together.See in glossary-wide review. “Epic-wide” means looking not only at the diff of the Issue currently under review, but also at its parent Epic, Sub-EpicsSub-EpicA subdivision of an Epic, split by feature area or ownership domain.See in glossary, and sibling Issues (other Issues that share the same parent). The review also loads the shared-context pack (the set of files containing shared team assumptions), and in particular review-knowledge.md, before proceeding.

Command and main options

/architect:review-issue [item] [--epic=<id>] [--max-fix-rounds=N] [--base=<branch>] [--no-fix] [--dry-run] [--auto] [--lang=en|ja]
Option Meaning
item The review target. Specified as I1.2.3, #<iid>, or a URL. If omitted, items with status::doing / status::review are picked up and confirmation is requested.
--epic Narrow the target to a specific Epic.
--max-fix-rounds=N Maximum number of auto-fix loop iterations. Default is 3.
--base Base branch for the PR/MR.
--no-fix Output review results only; do not run the auto-fix loop.
--dry-run Report what would be created without actually creating the PR/MR.
--auto Skip intermediate confirmation prompts.
--lang Output language for comments and reports.

The three severity levels

Every finding is assigned one of three severity levels. The level determines what happens next and whether action is required.

A problem that blocks mergingmergeIncorporating the changes from a PR/MR. Difficult to undo once performed.See in glossary. The PR/MR cannot be merged until this is resolved; it becomes a target of the auto-fix loop.

Recorded in the report but does not block the merge. Whether to address it can be decided later.

A question the reviewer noticed. No action is required.

Auto-fix loop

When a blocker is found, the skill repeats a “fix → re-review” cycle until the blocker is resolved, subject to a maximum number of iterations.

In short: when the blocker count reaches zero the skill creates a PR/MRPR/MRPull Request / Merge Request. A submission that requests review and incorporation of changes.See in glossary and moves to the next stage. If the iteration limit (default 3) is reached without resolution, or if the same problem fails to be fixed in two consecutive rounds (no-progress), processing stops, the item is set to status::blocked, and a human is asked to decide.

How findings are distilled into review-knowledge.md

The raw record of findings from each round is preserved as-is in reports/backlog/reviews/review-<issue>-round<N>.md. In addition, [B] (blocker) and [S] (important) findings are also preserved through a process called distillation. Distillation means extracting from the detailed record only the general rules (KN-<n>) that are likely to apply to other Issues as well. If an entry for the same rule already exists, only the occurrences field is updated — no duplicate entries are created.

KN-1: Client-supplied actor/owner fields can be spoofed

Values such as ownerId, changedBy, and role can be freely specified by the client side. Without authentication, these values can be spoofed (overwritten by an impersonator).

KN-2: No authentication or authorization exists anywhere on the endpoint

There is no authentication (identity verification) or authorization (permission checking) anywhere. This is treated not as a single-Issue problem but as a persistent gap (a hole that remains open indefinitely) spanning the entire Epic.

KN-3: Many-to-many join tables require a uniqueness constraint

A join table representing a many-to-many relationship requires a uniqueness constraint (a setting that prevents duplicate combinations from being inserted). Without it, data corruption is easy to trigger, as demonstrated by the actual duplicate bug encountered in TeamMembership.

KN-4: Foreign-key reference parameters should be existence-checked symmetrically across sibling services

When a foreign key (a reference value pointing to another piece of data) is received, its existence must be verified. If only one of several related (sibling) services performs this check, the result is an asymmetric security hole present on only one side.

review-knowledge.md serves as a mechanism to prevent the same problem from being implemented twice.

Was this page helpful?