Add a new learning to the agent learnings file. Use when the user says /add-learning, asks to record a lesson, or when an implementation produced a reusable insight worth preserving for future agents.
日本語の概要は準備中です。原文の説明を表示しています。
Perform a thorough, Incan-project-aware code review. Use when the user asks for a review, code critique, PR review, or says /review. Checks Rust anti-patterns, compiler pipeline completeness, error handling, test coverage, style conventions, and RFC compliance specific to the Incan compiler codebase.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
For broad dirty worktrees or explicitly delegated review, prefer review-orchestrate over this generic reviewer. Use /review for smaller or local review passes.
/review must keep a live report in the current worktree at:
.agents/state/review-report.mdDo not keep the findings list only in memory. Create or update this file as you review.
The report is the shared source of truth for /fix, /loop, /review-and-fix, and ralph-loop.
The report must use this exact top-level shape:
# Review Report
- branch: <branch or worktree>
- status: in_progress | clean | blocked
## Scope
- user request:
- issue / RFC:
- reviewed worktree: true
## Activity
- [21:54] review started
- [21:55] scope derived from issue 73 / RFC 015 / dirty worktree
- [21:57] found 2 warnings in loaves/oven/oven_model/src/project_lifecycle/version.rs
- [22:01] running make fmt
- [22:04] make pre-commit passed
## Files
### <path/to/file_a>
- status: pending | clean | findings | fixed | blocked
- checks:
- scope_audit: pass | fail | n/a
- rust_prose_audit: pass | fail | n/a
- markdown_prose_audit: pass | fail | n/a
- rfc_reference_audit: pass | fail | n/a
- docs_claims_audit: pass | fail | n/a
- public_docs_audit: pass | fail | n/a
- test_style_audit: pass | fail | n/a
- release_note_inventory_audit: pass | fail | n/a
- notes:
- touched and reviewed
### <path/to/file_b>
- status: findings
- checks:
- scope_audit: pass
- rust_prose_audit: fail
- markdown_prose_audit: n/a
- rfc_reference_audit: n/a
- docs_claims_audit: n/a
- public_docs_audit: pass
- test_style_audit: n/a
- release_note_inventory_audit: n/a
- findings:
- [ ] blocker | <label> | <line>
<why it matters>
### <path/to/file_c>
- status: fixed
- checks:
- scope_audit: pass
- rust_prose_audit: pass
- markdown_prose_audit: n/a
- rfc_reference_audit: n/a
- docs_claims_audit: n/a
- public_docs_audit: pass
- test_style_audit: n/a
- release_note_inventory_audit: n/a
- findings:
- [x] warning | <label> | <line>
<what changed>
### <path/to/file_d>
- status: blocked
- checks:
- scope_audit: pass
- rust_prose_audit: fail
- markdown_prose_audit: n/a
- rfc_reference_audit: n/a
- docs_claims_audit: n/a
- public_docs_audit: pass
- test_style_audit: n/a
- release_note_inventory_audit: n/a
- findings:
- [ ] external_blocker | <label> | <command or line>
<why it is blocked>
## Verification
- <command> — <result>
Every touched/reviewed file in scope must appear under ## Files. Start each file as status: pending; do not mark a file clean before you actually audit it. Do not keep a separate mental list of "files I looked at". If a finding changes state during the review, update the report file instead of relying on a rewritten summary later.
For each file, fill out the applicable checks explicitly:
scope_audit: expected scope vs delivered scope for that filerust_prose_audit: touched .rs prose comments and rustdocmarkdown_prose_audit: touched .md prose qualityrfc_reference_audit: user-facing docs leaking RFC referencesdocs_claims_audit: docs/CLI/examples claiming unimplemented behaviorpublic_docs_audit: public or non-trivial docs/comments match behaviortest_style_audit: panic helpers / unwrap / expect / bad test style in touched testsrelease_note_inventory_audit: implemented user-facing work reflected in release-note inventory where applicableUse n/a only when the check genuinely does not apply to that file.
## Activity is append-only. Add a short timestamped entry every time you:
A prose summary that omits ## Activity or ## Files is invalid output. Do not replace the report with a narrative summary at the end.
Each new /review invocation starts a fresh report for the current run. Do not inherit findings, statuses, or activity entries from an older run. At the start of the review, overwrite .agents/state/review-report.md with a fresh scaffold using the required sections, then populate it from the current worktree state.
git status --short, git diff main...HEAD, and any files the user names. Review staged, unstaged, and untracked files that are part of the current task; do not silently narrow the review to committed diffs when the worktree is dirty.AGENTS.md, architecture.md, layering.md, readable-maintainable-rust.md, and extending_language.md as relevant.flag-compiler-bug: minimize the repro, judge blocking vs workaround, check whether the bug is already filed, and then raise or draft the bug before continuing./review is report-only unless the user explicitly asks for edits inside the same request. Do not silently fix findings by default; that responsibility belongs to /fix or /review-and-fix..rs file containing ///, //!, or prose //, inspect the touched prose blocks directly rather than assuming you would notice bad wrapping incidentally;.md file, inspect the touched paragraphs directly for short-prosed or mechanically chopped text..agents/state/review-report.md as you go. Do not wait until the end to reconstruct the review from memory..agents/state/review-report.md to a fresh scaffold for the current review. Do not preserve stale entries from prior runs.## Activity as a live audit trail while you work. Do not backfill it only at the end.pending to clean only after the applicable checks are filled in and all are pass or n/a.## Scope, ## Activity, ## Files, or ## Verification, the review is incomplete. Fix the report before you declare any result.These fail CI or panic at runtime. Flag every occurrence.
.unwrap() or .expect() — anywhere, including tests and examples.
Use ?, .map_err(|e| miette!(...)), or explicit match.
The only accepted exemption is #[cfg(test)] blocks in backend::project submodules that already carry #[allow(clippy::unwrap_used)].Result — fn my_test() -> Result<(), Box<dyn std::error::Error>> + ?, never .unwrap().cargo clippy clean — run cargo clippy --all-targets --all-features mentally or literally; flag any obvious clippy violations you can identify from the diff.Only applies when the diff touches a language feature (not a pure refactor or docs change).
check_decl, check_expr, or collect)?loaves/compiler/incan_ir/src/lower/?loaves/compiler/incan_emit/src/emit/?loaves/kernel/incan_syntax/src/diagnostics/catalog/errors/.loaves/stdlib/) have matching Rust-side backing in the owning component's facet (loaves/stdlib/<component>/rust/src/) and are registered in STDLIB_NAMESPACES (loaves/kernel/incan_lang/src/lang/stdlib.rs).| Check | Bad | Preferred |
|---|---|---|
| Parameter types | &String, &Vec<T>, &Box<T> | &str, &[T], &T |
| Type casting | x as u32 (silent truncation) | x.try_into()? or From/Into |
| Visibility | pub on everything | pub(crate) or private by default |
| Wildcard imports | use foo::* | use foo::{Bar, Baz} |
| Collecting to iterate | .collect::<Vec<_>>() then loop | chain iterators directly |
| Owned clone to appease borrow | .clone() as a reflex | restructure ownership or borrow |
| Stringly-typed APIs | fn set(role: &str) | typed enum / newtype |
| Code duplication | identical logic in multiple arms | extract shared helper before/after |
| Shared-state escape hatch | Rc<RefCell<_>> / Arc<Mutex<_>> by default | restructure ownership first |
.clone() is justified (crossing API boundary, shared ownership, or genuinely necessary).#[must_use] when silently ignoring them would hide a bug.thiserror), not Result<T, String>.tokio::fs or spawn_blocking, not std::fs.miette diagnostics carry a span and a human-readable message. The error variant lives in the catalog under the right module (errors/, warnings/).// ---- Context: ... ----) in functions ≥ 30 lines or ≥ 3 logical blocks.//, ///, and //! comments should be written as normal paragraphs, not manually width-managed line-by-line. For Rust comments, write the paragraph naturally and let make fmt do the width wrapping. Split prose into separate paragraphs only for real semantic breaks, not to manage width or visual shape. Prose in .md files is never hard-wrapped..rs files, ///, //!, and prose // comments must not be manually broken into clause-by-clause or narrow-column lines. The acceptable shape is: a natural paragraph that make fmt wraps, or multiple paragraphs when the content has a real meaning break. Treat pre-broken short-line rustdoc as a documentation defect and fix it during review..rs file with rustdoc/prose comments, inspect the touched comment blocks directly for manual chopping, narrow-column wrapping, or fake paragraph breaks..md files, prose paragraphs should read like natural paragraphs, not a stack of short broken lines or mechanically chopped clauses. This is distinct from the repo's "no hard wrap in docs-site markdown" rule: even in non-docs-site markdown, avoid narrow-column prose unless structure genuinely requires it..md file..incn module, class, model, enum, trait, function, and method needs a descriptive docstring, including private/internal helpers. This is stricter than Rust prose rules and mirrors the expected ruff/pylint/mypy-style Python documentation discipline.workspaces/docs-site/; if docs are touched, consider whether mkdocs build --strict should pass.AGENTS.md docs rules to the actual content. Reference pages must provide a complete factual lookup for their stated public surface, including signatures and error contracts; a truthful walkthrough or overview in reference/ is still a finding. Check page intent and completeness independently of MkDocs, and link to how-to or explanation material when needed. A reference page also states nothing beyond the contract: read every changed sentence against the list in Reference pages state the contract only in .agents/skills/review-docs-claims/SKILL.md; each hit is a blocker.// Increment the counter). Only intent, trade-offs, or non-obvious constraints.#[cfg(test)] block. For codegen changes: a fixture in loaves/compiler/incan_emit/tests/codegen_snapshots/ and a corresponding snapshot.INSTA_UPDATE=1 cargo test -p incan_emit --test codegen_snapshot_tests.loaves/toolchain/incan-cli/tests/integration_tests.rs) updated if the change affects end-to-end behavior.incan_syntax stays syntax-only; incan_lang stays pure/deterministic; orchestration layers stay thin.incan must not depend on a standard library facet (incan_std_core and the others) except as a dev-dependency; shared policy belongs in incan_lang, runtime glue belongs in the facets.incan_lang — shared semantics, canonical error text, and policy should come from incan_lang rather than duplicated logic or string literals.loaves/kernel/incan_lang/src/lang/, loaves/kernel/incan_lang/src/bin/generate_lang_reference.rs, or workspaces/docs-site/docs/language/reference/language.md, run cargo run -p incan_lang --bin generate_lang_reference, inspect the resulting language.md diff, and require that generated diff to be committed or explicitly reported as blocked.flag-compiler-bug instead of burying it in review notes.AGENTS.md should be updated.Produce a report with:
## Review — <subject / branch / files>
### Blockers 🔴
<item> — <file>:<line> — <explanation and fix>
### Warnings 🟡
<item> — <file>:<line> — <explanation and fix>
### Suggestions 🟢
<item> — <file>:<line> — <optional improvement>
### Notes 💡
<observation or question that doesn't require a change>
### Follow-up bugs
<drafted issue or explicit recommendation to file one, when review uncovered a likely compiler bug outside scope>
### Summary
One or two sentences on overall quality and merge-readiness.
.unwrap(), pipeline gap, missing test for new feature).Omit sections that have no items. If there are zero blockers and zero warnings, say so explicitly in the summary.
Before you write "no blockers", "no warnings", or equivalent clean-review language, explicitly verify all of the following:
.agents/state/review-report.md exists, matches the current review state, and includes every touched/reviewed file in scope..agents/state/review-report.md contains ## Scope, ## Activity, ## Files, and ## Verification.## Activity is a real timestamped log of the run, not a rewritten end summary.clean without a filled-in applicable checklist; untouched placeholders stay pending, not clean..rs files do not contain manually chopped rustdoc or prose comments; each prose block is either one natural paragraph wrapped by make fmt or multiple paragraphs separated for a real semantic reason..rs file with prose comments was explicitly audited block-by-block, not just skimmed..md files do not contain short-prosed or mechanically chopped paragraphs..md file was explicitly audited paragraph-by-paragraph where prose changed..unwrap(), or .expect().cargo run -p incan_lang --bin generate_lang_reference was run and any resulting workspaces/docs-site/docs/language/reference/language.md diff was reviewed and committed.make fmt was run after fixes.make pre-commit was run after the final fix pass, or you explicitly report why it was not run.If any item is unchecked, do not claim the review is clean. Report the remaining gap explicitly.
A failed broad verification command does not invalidate the review.
If make fmt, make pre-commit, mkdocs build --strict, or another broad check fails for reasons unrelated to the
current local findings, you must still:
Do not abandon the review merely because a broad verification command failed.
If the user explicitly asked for edits as part of the review request, use /fix or /review-and-fix rather than improvising your own repair loop.
Only stop short of a stronger verification claim when the gap is clearly one of:
flag-compiler-bug.For every unresolved verification gap or blocked check, say which of those categories applies.
When the user invokes /review or otherwise asks for a review without explicitly saying "report only" or "do not change code", you should:
.agents/state/review-report.md,/fix or /review-and-fix if actionable findings remain.Before declaring the loop clean, do one explicit final sweep for the common misses this skill is meant to catch:
.rs files,.md files,The default verification bar for a strong review is:
make fmtmake pre-commitIf either command was not run, say so explicitly in the final review report and treat that as residual risk rather than silently claiming the branch is clean.
.agents/state/review-report.md is per-worktree and gets overwritten by the next run (Step 11). To keep a durable record of what review actually catches over time, append one line to .agents/state/findings-ledger.md (a symlink into a private, non-git location — see AGENTS.md) whenever this run:
Format, appended not rewritten:
- YYYY-MM-DD | review | <one-line finding> | <what changed, or "pending" if not yet fixed>
Skip the ledger entirely for a clean pass with nothing to report — it should stay a record of real findings, not a heartbeat log. If .agents/state/findings-ledger.md doesn't exist (e.g. this workspace layout wasn't set up), skip this step silently rather than creating it yourself.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Add a new learning to the agent learnings file. Use when the user says /add-learning, asks to record a lesson, or when an implementation produced a reusable insight worth preserving for future agents.
日本語の概要は準備中です。原文の説明を表示しています。
Transition an Incan RFC from one status to the next. Use when the user asks to promote, advance, or finalize an RFC, or says /bump-rfc. Handles Draft → Planned, Planned → In Progress, and In Progress → Implemented transitions.
日本語の概要は準備中です。原文の説明を表示しています。
Safely close out completed Incan work after a PR is merged by verifying merge status, syncing the base branch, removing task-owned local worktrees/assets, deleting merged local/remote branches, pruning refs, and reporting dirty or ambiguous leftovers. Use when the user says /closeout, asks to clean up after a merged PR, or wants local RFC/issue branch/worktree cleanup.
日本語の概要は準備中です。原文の説明を表示しています。
Drafts a GitHub issue title and body using the target repository's issue templates under .github/ISSUE_TEMPLATE. Use when the user asks to create, draft, or file a GitHub issue, bug report, feature request, chore, documentation issue, or RFC proposal, or wants issue text that matches the repo's template.
日本語の概要は準備中です。原文の説明を表示しています。
Drafts implementation plans with TDD, documentation updates, and repository verification commands before coding. Use when the user asks for an implementation plan, /create-plan, or structured pre-implementation design for work in encero workspaces (e.g. Incan, IncQL).
日本語の概要は準備中です。原文の説明を表示しています。
Generate a PR description following the repository's pull request template. Use when the user asks to create, draft, or generate a PR description for a pull request. The skill automatically locates the PR template in the target repository and fills it in based on the git diff.
日本語の概要は準備中です。原文の説明を表示しています。