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.
日本語の概要は準備中です。原文の説明を表示しています。
Review touched Incan source for Python-quality readability, idiomatic Incan structure, dogfooding integrity, public API polish, and source-level anti-patterns. Use for `.incn` stdlib, examples, language-surface implementations, or when the user asks whether Incan code reads like well-written Python rather than Rust-shaped scaffolding.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
/review-incan-source-quality is a report-only reviewer for touched .incn source.
The standard is not merely "has comments" or "passes tests". The standard is:
Own:
.incn readability and source organizationDo not own:
.incn test fixtures/examplesWrite a slice report at:
.agents/state/review-report.incan-source-quality.mdDo not write to the canonical .agents/state/review-report.md.
When the source-quality report has findings, also copy the scope and findings into the shared lightweight central snapshot folder outside individual repo worktrees under FINDINGS_ROOT. Resolve it once per review and record the absolute path in the slice report:
COMMON_GIT_DIR="$(git rev-parse --path-format=absolute --git-common-dir)"
WORKSPACE_ROOT="$(dirname "$(dirname "$COMMON_GIT_DIR")")"
FINDINGS_ROOT="${INCAN_REVIEW_FINDINGS_ROOT:-$WORKSPACE_ROOT/.incan-review-findings}"
mkdir -p "$FINDINGS_ROOT"
git-common-dir keeps the default stable when the review runs in a linked worktree. Set INCAN_REVIEW_FINDINGS_ROOT to use a different shared corpus location.
Use a deterministic, descriptive filename when possible:
YYYY-MM-DD-pr-<number>-incan-source-quality-<slug>.mdYYYY-MM-DD-branch-<branch-slug>-incan-source-quality.mdYYYY-MM-DD-review-incan-source-quality.md when no PR or branch context is knownDo not create a snapshot for clean reviews. The snapshot is raw corpus for later analysis, not canonical guidance.
Treat FINDINGS_ROOT as an append-only central corpus for local review work: create new snapshot files, but do not delete, overwrite, prune, or "clean up" existing snapshots unless the user explicitly asks for that exact maintenance.
Snapshot content is evidence, not a fix log. Preserve the original finding blocks verbatim, including severity, category, file path, line reference, and explanatory text. If the finding is fixed before the snapshot is written, keep the original finding as observed and add a separate Resolution note after it; do not replace the evidence with a resolved checklist item or a summary of the fix.
Treat touched Incan source as user-facing language showcase code, especially under loaves/stdlib/, examples, fixtures that teach behavior, and RFC-backed language features.
Good Incan source should have:
?, if let, while let, loop: with break <value>, early return, and value-enum/model usage where those make the code simpler;std.fs-style shape: summary, semantic notes, and Args, Returns, or Example sections where useful, not one-line labels that restate the name;.incn source still owns the behavior.Reviewers must assume the branch can use the current v0.2+v0.3 language and stdlib surface unless it proves otherwise. Do not accept Rust-shaped or pre-current scaffolding without evidence.
Before judging .incn source quality, read the generated feature inventory, current release notes, and relevant reference pages. At minimum check workspaces/docs-site/docs/language/reference/feature_inventory.md, workspaces/docs-site/docs/release_notes/0_2.md, workspaces/docs-site/docs/release_notes/0_3.md, and the detailed inventories in those release-note files. If the touched code claims a limitation, verify it against source, examples, tests, or a probe.
Baseline v0.2 surfaces to remember:
std.*, including std.web, std.testing, std.async, std.derives, std.traits, std.serde.json, std.reflection, and std.math;from rust import ..., from rust::... import ..., keyword-named Rust path imports with as, rusttype, interop: adapters, [rust-dependencies], @rust.extern, and @staticmethod where that is the correct type-scoped Rust boundary;pub:: imports, public API manifests, pub from ... import ... reexports, const vs static, pub static, source-root imports, and explicit src/ project layout;Callable[...] sugar, explicit call-site generics (callee[T](...), receiver.method[T](...), and _ inference placeholders), generic instance methods, and direct trait-typed annotations;std.derives and std.traits.* are source-defined capability contracts, generic with bounds use nominal trait conformance, and @derive(...) should read as language-surface adoption rather than ad hoc backend magic;list.extend, enumerate with tuple unpacking in loops, strict KeyError / IndexError / ValueError runtime diagnostics, and precise f-string interpolation spans;incan fmt, public type-like docs feed library tooling, and the formatter preserves source intent instead of requiring hand-shaped whitespace.Current v0.3 surfaces to remember:
if let, while let, pattern alternation with |, loop: as an expression, break <value>, direct ?, and Result combinators (map, map_err, and_then, or_else, inspect, inspect_err);property declarations, generic methods, direct trait annotations, supertraits, multi-instantiation trait adoption, associated type declarations, and method-level for Trait disambiguation;partial callable presets when a new name or preset should project an existing callable instead of adding a hand-written wrapper;*args / **kwargs, call-site unpacking with f(*xs) / f(**kw), spread entries ([*xs], {**kw}), list.repeat, List[T].clone() only when semantically needed, and std.collections types when specialized collection behavior is the point;std.fs, std.io, std.tempfile, std.datetime, std.graph, std.logging, and std.telemetry surfaces;module tests:, assert expr[, msg], assert ... raises ..., fixtures, parametrization, markers, and async fixtures where the touched .incn file is test or example source;Awaitable[T], race for, std.async.race, task/channel/time/sync helpers, cancellation-safety comments, and explicit await rather than hidden fire-and-forget calls;std.builtins.<name> when a DSL or import shadows a builtin;with TraitName, method-level for Trait, associated types, narrow @rust.allow(...), imported extension-trait metadata, and ordinary Rust imports only where the .incn source still owns the behavior.Flag stale source that:
loop: / break <value>, if let, while let, ?, or a Result combinator would make intent direct;partial declaration would expose the intended public API more clearly;std.* surface is expected;pub::, pub static, pub from, call-site generics, first-class function references, or Callable[...] when those are the established surface for the shape at hand;.clone(), .to_string(), str(...), .into(), or Rust-facing conversion noise only to satisfy generated Rust rather than because the Incan semantics need ownership or conversion;Flag Incan source that has:
.incn wrapper when the behavior should be dogfooded;@rust.extern, rusttype, or rust.module used to avoid writing expressible Incan behavior;value = 0 only to satisfy later branch assignment;match ladders that only peel Option/enum variants before continuing, when if let, early returns, or a focused shallow match would state the same control flow more directly; also flag helper forests that merely hide the ladder one branch at a time;match blocks that just rewrap a Result where ? would read naturally;match blocks that only transform one Result branch where RFC 070 combinators such as map, map_err, and_then, or or_else would state the intent directly;.clone(), .to_string(), or manual conversion scaffolding leaking into .incn;partial preset would state the API relation more honestly;.incn files in the current worktree plus any .incn files named by the user.std.fs, std.io, std.collections, or the relevant domain module.FINDINGS_ROOT if needed and write a new snapshot containing only the review source metadata, Scope, and Findings sections. Copy the finding blocks verbatim from .agents/state/review-report.incan-source-quality.md; do not generalize them into policy or rewrite them as fix summaries. Preserve exact file:line evidence when the report has it; if a finding is only file-level, make that explicit in the finding text. Do not overwrite an existing snapshot path; add a suffix if needed.Keep findings first. Only list clean surfaces when the clean call is useful because the file is a visible Incan surface or had prior risk.
# Review Slice Report
- role: incan-source-quality
- worker: <agent-id or stable label>
- status: in_progress | clean | blocked
## Scope
- assigned files:
- loaves/stdlib/data/src/uuid.incn
## Findings
- [ ] warning | source-quality | Rust-shaped sentinel read | loaves/stdlib/data/src/uuid.incn:117
The function initializes a placeholder byte and overwrites it from a match arm. A direct helper returning `Result[u8, UuidError]` would read like authored Incan rather than generated Rust-shaped control flow.
## Reviewed Clean Surfaces
- loaves/stdlib/system/src/fs/path.incn — used as style baseline
Finding severities:
blocker: source violates an explicit dogfooding or implementation-boundary requirement.error: source is misleading, generated-looking, or exposes backend shape in a user-facing API.warning: source works but is below the Python-quality readability bar.note: cleanup is optional but useful if the file is already being edited.If there are no findings, say so explicitly.
Only write this file when findings are present.
# Incan Source Quality Findings Snapshot
- source: PR #<number> / <branch-or-context>
- date: YYYY-MM-DD
- reviewer: review-incan-source-quality
## Scope
- assigned files:
- loaves/stdlib/data/src/uuid.incn
## Findings
- [ ] warning | source-quality | Rust-shaped sentinel read | loaves/stdlib/data/src/uuid.incn:117
The function initializes a placeholder byte and overwrites it from a match arm. A direct helper returning `Result[u8, UuidError]` would read like authored Incan rather than generated Rust-shaped control flow.
## Resolution
- <optional, only if this snapshot is written after a fix loop>
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
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.
日本語の概要は準備中です。原文の説明を表示しています。