[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6RVSD6QXBVC6D9T0T0KNXD7":3,"skill-same:01M6RVSD6QXBVC6D9T0T0KNXD7":62},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":13,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":48,"install":49,"resources":61},"01M6RVSD6QXBVC6D9T0T0KNXD7","nodejs-keccak256",null,"Prevent Ethereum hashing bugs in JavaScript and TypeScript. Node's sha3-256 is NIST SHA3, not Ethereum Keccak-256, and silently breaks selectors, signatures, storage slots, and address derivation.","sakamoto-family-smile\u002Fagent_monorepo","sakamoto-family-smile","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F132812403?v=4","01M6RTAT3H8PMWX5SJ65KP3VYF","01M6RTAV321WB5RAHCWTZMX5CV",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fnodejs-keccak256\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"nodejs","nodejs keccak256","typescript","storage","javascript","ethereum","NIST","direct","node","hashing","signatures","adaptation","port","bugs","slots","2026-11-10 10:12:30",false,"---\nname: be-clean-code\ndescription: \"Audit Java source for DRY, KISS, YAGNI, naming, and structure violations (god classes, deep nesting, long parameter lists). Use when the user asks to check code smells, DRY\u002FKISS\u002FYAGNI, or 'is this file too complex' — distinct from be-review (multi-dimension review orchestration), be-test-review (test quality only), and be-security (vulnerabilities only).\"\nargument-hint: \"[file-or-directory-path]\"\nuser-invocable: true\nallowed-tools: Read, Glob, Grep\n---\n\n# Clean Code Audit\n\nAudit Java source code for clean code principles: DRY, KISS, YAGNI, naming, and structure.\n\n**Mode**: Semi-Structured. Input is a plain file\u002Fdirectory path; output is a fixed-shape\nreport (counts + `{file}:{line} — {description}` lines) meant to be pasted into a ticket\nor PR comment as-is. No `\u003Cthinking>` block, no free-flow prose. Findings are heuristic —\nsee \"Failure Modes & Exclusions\" before treating any single finding as ground truth.\n\n## Instructions\n\n### Step 0: Validate Configuration\n\n1. Read `.claude\u002Fbackend-webflux-plugin.json`\n2. If missing, tell the user to run `\u002Fbackend-webflux-plugin:be-init` first and stop\n\n### Step 1: Determine Scope\n\n- If argument provided: audit the specified file or directory\n- If no argument: audit all Java files in `{sourceDir}\u002F{basePackage}\u002F`\n\n### Step 1b: Handle Empty \u002F Invalid Scope\n\nBefore scanning, resolve the scope and check it:\n\n- **Path does not exist** (argument given but `Glob`\u002F`Read` finds nothing at that path):\n  report `\"Path not found: {path}. Nothing to audit.\"` and stop — do not fall back to the\n  default scope silently.\n- **Zero Java files found** (path exists but contains no `.java` files, or the default\n  `{sourceDir}\u002F{basePackage}\u002F` is empty): report `\"0 files scanned, no audit performed.\"`\n  and stop — never emit an empty findings report or a pass message for zero files scanned.\n- **Large scope** (`Glob` returns more than ~150 files): warn the user that a full scan\n  at this size will take significant time and context, and suggest scoping to a\n  subdirectory or domain package. If the user supplied an explicit path argument, treat\n  that as confirmation and proceed without asking; only ask for confirmation when the\n  large scope came from the no-argument default.\n\n### Step 2: Scan for Issues\n\nFor each rule below: the threshold defines what counts as a candidate finding, the\nrationale explains why it matters, and the exclusion lists cases that must not be\nflagged even though they match the raw pattern. If a candidate is close to a threshold\n(within ~10%) or its intent is unclear from static text alone, report it suffixed\n`(uncertain — needs human judgment)` instead of asserting it as a definitive violation.\n\n#### DRY (Don't Repeat Yourself)\n\n- **Duplicate code blocks across classes** (>5 lines of near-identical logic, found via\n  `Grep` on distinctive line fragments across files). *Why*: duplicated logic diverges\n  silently — one copy gets fixed, the other doesn't. *Exclude*: near-identical test\n  setup\u002Ffixture blocks across independent test classes (test isolation is intentional\n  here), and the standard `onErrorResume` exception-mapping chain repeated per domain\n  router (each domain's error mapping is meant to be self-contained, not shared).\n- **Copy-pasted validation logic** that should be extracted to a shared validator.\n  *Exclude*: two validators that happen to look similar today but validate different\n  business rules (e.g. two `{Entity}PropertyValidator` classes checking different\n  fields) — flag only when the exact same rule is duplicated, not merely similar shape.\n- **Repeated DTO-to-entity mapping** that could use a shared mapper method.\n\n#### KISS (Keep It Simple)\n\n- **Overly complex conditional logic** (>3 nested `if`\u002F`else`, counted from the Read\n  tool's indentation levels). *Why*: each nested level roughly doubles the number of\n  paths a reader must hold in mind at once. *Exclude*: a `switch` expression's arms, and\n  a stream lambda's own body indentation — neither compounds cognitive load the way\n  nested `if`\u002F`else` branching does.\n- **Method doing too many things** (>30 lines, counted via `Read`'s line-numbered\n  output from the method's opening `{` to its closing `}`). *Why*: a method that doesn't\n  fit on one screen forces the reader to scroll and lose context mid-review. *Exclude*: a\n  method that is mostly a single large `switch`\u002Fpattern-match mapping, or a builder chain\n  assembling one object — these are linear, not complex, despite the line count.\n- **Unnecessary abstraction layers** (interface with a single implementation that will\n  never change). *Exclude*: `{Entity}Repository` (R2DBC) and `{Entity}Mapper` (MyBatis)\n  interfaces — single-impl-by-design under Spring Data \u002F MyBatis proxy mechanics, not a\n  YAGNI\u002FKISS violation even though they match the raw \"single impl\" pattern.\n- **Complex stream operations** where a simple loop would be clearer.\n\n#### YAGNI (You Ain't Gonna Need It)\n\n- **Unused methods** (defined but never called, checked via `Grep` for the method name\n  across the scope). *Exclude from a hard \"unused\" claim*: methods that satisfy a\n  framework contract (`ReactiveCrudRepository`\u002F`R2dbcRepository` overrides, `@Mapper`\n  interface methods bound via XML, Lombok-generated accessors) or that may be invoked\n  reflectively\u002Fvia Spring wiring outside the scanned scope — `Grep` cannot prove absence\n  of a caller outside the scan path, so report these as `(uncertain — needs human\n  judgment)` rather than a confirmed violation.\n- **Unused fields** in classes — same reflective\u002Fframework caveat as above.\n- **Over-engineered factory patterns** for simple object creation.\n- **Generic implementations** for single-use cases.\n- **Unused imports** (low ambiguity — `Grep` for the imported symbol's usage in the same\n  file is reliable here; report these as confirmed findings, not uncertain).\n\n#### Naming\n\n- Single-letter variable names (except loop counters `i`, `j`, `k`)\n- Generic names: `data`, `info`, `temp`, `result`, `obj`, `item`\n- Boolean variables without `is`\u002F`has`\u002F`can` prefix context\n- Methods that don't describe their action\n- Classes that don't describe their responsibility\n- Inconsistency with the naming conventions table in CLAUDE.md\n\n#### Structure\n\n- **God classes**: files exceeding 300 lines (count via `Read`'s line-numbered output,\n  or `Glob` + reading the file to its end). *Why*: beyond ~300 lines a class usually\n  mixes multiple responsibilities and stops being reviewable as one unit. *Exclude*:\n  generated code and enum-heavy constant classes whose length comes from a flat list of\n  named entries, not logic.\n- **Deep nesting**: more than 3 levels of indentation — same measurement and exclusions\n  as the KISS conditional-logic rule above.\n- **Long parameter lists**: methods with >5 parameters. *Why*: past ~5 parameters,\n  callers routinely swap argument order by mistake and the signature stops being\n  self-documenting. *Exclude*: constructor DI on `Router`\u002F`Handler`\u002F`CommandExecutor`\u002F\n  `QueryProcessor` records where each parameter is a distinct collaborator (repository,\n  mapper, client) — record-based constructor injection is this plugin's CQRS\n  convention, not a smell.\n- **Missing `record` usage**: classes that should be records (immutable DTOs with only\n  fields and constructor).\n- **Mutable state** where immutable would suffice.\n\n### Step 3: Report\n\nDisplay findings in the working language. Evidence (the exact file:line and offending\nsnippet) always precedes any summary verdict — never lead with a conclusion the counts\ndon't back up. Any finding that falls under an \"uncertain\" case above must carry the\n`(uncertain — needs human judgment)` suffix; do not silently upgrade it to a confirmed\nviolation.\n\n```\nClean Code Audit\n================\n\nFiles scanned: {count}\nScope: {path}\n\nDRY Issues ({count}):\n  {file}:{line} — {description}\n\nKISS Issues ({count}):\n  {file}:{line} — {description}\n\nYAGNI Issues ({count}):\n  {file}:{line} — {description}\n\nNaming Issues ({count}):\n  {file}:{line} — {description}\n\nStructure Issues ({count}):\n  {file}:{line} — {description}\n```\n\nIf no issues found, restate scope instead of asserting a bare quality claim:\n\n> \"Clean code audit passed: {count} files scanned under {path}, no violations found\n> against the DRY\u002FKISS\u002FYAGNI\u002Fnaming\u002Fstructure rules in Step 2.\"\n\n## Examples\n\n### Example 1 — Clean pass\n\nInput: `\u002Fbe-clean-code src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fhr\u002F`, 3 files found:\n`Employee.java` (record, 12 lines), `EmployeeRepository.java` (R2DBC interface, 9 lines),\n`CreateEmployeeCommandExecutor.java` (28 lines, single responsibility, 4 constructor\nparams).\n\nNone of the files cross a Step 2 threshold: no method over 30 lines, no class over 300\nlines, no duplicate blocks, all imports used. Report:\n\n```\nClean Code Audit\n================\n\nFiles scanned: 3\nScope: src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fhr\u002F\n\nDRY Issues (0):\nKISS Issues (0):\nYAGNI Issues (0):\nNaming Issues (0):\nStructure Issues (0):\n```\n\n> \"Clean code audit passed: 3 files scanned under src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fhr\u002F, no\n> violations found against the DRY\u002FKISS\u002FYAGNI\u002Fnaming\u002Fstructure rules in Step 2.\"\n\n### Example 2 — Findings across categories\n\nInput: `\u002Fbe-clean-code src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fbooking\u002F`. Source excerpt from\n`BookingHandler.java`:\n\n```java\npublic Mono\u003CServerResponse> create(ServerRequest request) {\n    return request.bodyToMono(CreateBooking.class)\n        .flatMap(cmd -> {\n            if (cmd.checkIn() != null) {\n                if (cmd.checkOut() != null) {\n                    if (cmd.checkIn().isBefore(cmd.checkOut())) {\n                        if (cmd.guestCount() > 0) {\n                            return executor.execute(cmd);\n                        }\n                    }\n                }\n            }\n            return Mono.error(new InvalidBookingException());\n        })\n        .flatMap(id -> ServerResponse.status(201).bodyValue(id));\n}\n```\n\nAn unused field found via `Grep` returning zero call sites within the scanned scope:\n\n```java\nprivate final Clock clock; \u002F\u002F never referenced elsewhere in this file or package\n```\n\nAnd a generic variable name in the same method:\n\n```java\nvar data = cmd.checkIn(); \u002F\u002F generic name gives no hint about what \"data\" is\n```\n\nReport:\n\n```\nClean Code Audit\n================\n\nFiles scanned: 14\nScope: src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fbooking\u002F\n\nDRY Issues (0):\nKISS Issues (1):\n  BookingHandler.java:5 — 4 levels of nested if inside create() exceeds the >3 nesting\n  threshold; flatten with an early-return guard clause or combine conditions with &&\n\nYAGNI Issues (1):\n  BookingHandler.java:2 — field `clock` has no call site within the scanned scope\n  (uncertain — needs human judgment: may be used via a superclass or reflectively)\n\nNaming Issues (1):\n  BookingHandler.java:9 — variable `data` is a generic name; rename to describe what\n  it holds (e.g. `checkInDate`)\n\nStructure Issues (0):\n```\n\n## Failure Modes & Exclusions\n\nThis is a static, heuristic text scan using only `Read`\u002F`Glob`\u002F`Grep` — not a compiler\nor bytecode analysis. Declared limitations:\n\n- **No cross-scope proof of absence.** \"Unused method\u002Ffield\" findings can only prove\n  \"no call site found within the scanned scope\" — never \"unused\" in the whole codebase.\n  Always report these as uncertain (see YAGNI section above), never as confirmed.\n- **Indentation-based nesting\u002Fline counts can misjudge non-standard formatting** (tabs\n  vs. spaces, chained builder calls, generated code). Treat borderline cases as\n  uncertain rather than a hard violation.\n- **Generated code, record-heavy DTOs, and `config\u002F`-package bean-wiring classes are\n  out of scope for length\u002Fparameter-count thresholds** unless a rule above states\n  otherwise — these are expected to look different from hand-written business logic.\n- **This skill does not run the build or tests.** It reads source text only; it cannot\n  confirm a method is dead code the way a coverage report or IDE \"find usages\" can. Treat\n  every finding as a lead for the developer to confirm, not a verified defect.\n","# Clean Code Audit\n\nAudit Java source code for clean code principles: DRY, KISS, YAGNI, naming, and structure.\n\n**Mode**: Semi-Structured. Input is a plain file\u002Fdirectory path; output is a fixed-shape\nreport (counts + `{file}:{line} — {description}` lines) meant to be pasted into a ticket\nor PR comment as-is. No `\u003Cthinking>` block, no free-flow prose. Findings are heuristic —\nsee \"Failure Modes & Exclusions\" before treating any single finding as ground truth.\n\n## Instructions\n\n### Step 0: Validate Configuration\n\n1. Read `.claude\u002Fbackend-webflux-plugin.json`\n2. If missing, tell the user to run `\u002Fbackend-webflux-plugin:be-init` first and stop\n\n### Step 1: Determine Scope\n\n- If argument provided: audit the specified file or directory\n- If no argument: audit all Java files in `{sourceDir}\u002F{basePackage}\u002F`\n\n### Step 1b: Handle Empty \u002F Invalid Scope\n\nBefore scanning, resolve the scope and check it:\n\n- **Path does not exist** (argument given but `Glob`\u002F`Read` finds nothing at that path):\n  report `\"Path not found: {path}. Nothing to audit.\"` and stop — do not fall back to the\n  default scope silently.\n- **Zero Java files found** (path exists but contains no `.java` files, or the default\n  `{sourceDir}\u002F{basePackage}\u002F` is empty): report `\"0 files scanned, no audit performed.\"`\n  and stop — never emit an empty findings report or a pass message for zero files scanned.\n- **Large scope** (`Glob` returns more than ~150 files): warn the user that a full scan\n  at this size will take significant time and context, and suggest scoping to a\n  subdirectory or domain package. If the user supplied an explicit path argument, treat\n  that as confirmation and proceed without asking; only ask for confirmation when the\n  large scope came from the no-argument default.\n\n### Step 2: Scan for Issues\n\nFor each rule below: the threshold defines what counts as a candidate finding, the\nrationale explains why it matters, and the exclusion lists cases that must not be\nflagged even though they match the raw pattern. If a candidate is close to a threshold\n(within ~10%) or its intent is unclear from static text alone, report it suffixed\n`(uncertain — needs human judgment)` instead of asserting it as a definitive violation.\n\n#### DRY (Don't Repeat Yourself)\n\n- **Duplicate code blocks across classes** (>5 lines of near-identical logic, found via\n  `Grep` on distinctive line fragments across files). *Why*: duplicated logic diverges\n  silently — one copy gets fixed, the other doesn't. *Exclude*: near-identical test\n  setup\u002Ffixture blocks across independent test classes (test isolation is intentional\n  here), and the standard `onErrorResume` exception-mapping chain repeated per domain\n  router (each domain's error mapping is meant to be self-contained, not shared).\n- **Copy-pasted validation logic** that should be extracted to a shared validator.\n  *Exclude*: two validators that happen to look similar today but validate different\n  business rules (e.g. two `{Entity}PropertyValidator` classes checking different\n  fields) — flag only when the exact same rule is duplicated, not merely similar shape.\n- **Repeated DTO-to-entity mapping** that could use a shared mapper method.\n\n#### KISS (Keep It Simple)\n\n- **Overly complex conditional logic** (>3 nested `if`\u002F`else`, counted from the Read\n  tool's indentation levels). *Why*: each nested level roughly doubles the number of\n  paths a reader must hold in mind at once. *Exclude*: a `switch` expression's arms, and\n  a stream lambda's own body indentation — neither compounds cognitive load the way\n  nested `if`\u002F`else` branching does.\n- **Method doing too many things** (>30 lines, counted via `Read`'s line-numbered\n  output from the method's opening `{` to its closing `}`). *Why*: a method that doesn't\n  fit on one screen forces the reader to scroll and lose context mid-review. *Exclude*: a\n  method that is mostly a single large `switch`\u002Fpattern-match mapping, or a builder chain\n  assembling one object — these are linear, not complex, despite the line count.\n- **Unnecessary abstraction layers** (interface with a single implementation that will\n  never change). *Exclude*: `{Entity}Repository` (R2DBC) and `{Entity}Mapper` (MyBatis)\n  interfaces — single-impl-by-design under Spring Data \u002F MyBatis proxy mechanics, not a\n  YAGNI\u002FKISS violation even though they match the raw \"single impl\" pattern.\n- **Complex stream operations** where a simple loop would be clearer.\n\n#### YAGNI (You Ain't Gonna Need It)\n\n- **Unused methods** (defined but never called, checked via `Grep` for the method name\n  across the scope). *Exclude from a hard \"unused\" claim*: methods that satisfy a\n  framework contract (`ReactiveCrudRepository`\u002F`R2dbcRepository` overrides, `@Mapper`\n  interface methods bound via XML, Lombok-generated accessors) or that may be invoked\n  reflectively\u002Fvia Spring wiring outside the scanned scope — `Grep` cannot prove absence\n  of a caller outside the scan path, so report these as `(uncertain — needs human\n  judgment)` rather than a confirmed violation.\n- **Unused fields** in classes — same reflective\u002Fframework caveat as above.\n- **Over-engineered factory patterns** for simple object creation.\n- **Generic implementations** for single-use cases.\n- **Unused imports** (low ambiguity — `Grep` for the imported symbol's usage in the same\n  file is reliable here; report these as confirmed findings, not uncertain).\n\n#### Naming\n\n- Single-letter variable names (except loop counters `i`, `j`, `k`)\n- Generic names: `data`, `info`, `temp`, `result`, `obj`, `item`\n- Boolean variables without `is`\u002F`has`\u002F`can` prefix context\n- Methods that don't describe their action\n- Classes that don't describe their responsibility\n- Inconsistency with the naming conventions table in CLAUDE.md\n\n#### Structure\n\n- **God classes**: files exceeding 300 lines (count via `Read`'s line-numbered output,\n  or `Glob` + reading the file to its end). *Why*: beyond ~300 lines a class usually\n  mixes multiple responsibilities and stops being reviewable as one unit. *Exclude*:\n  generated code and enum-heavy constant classes whose length comes from a flat list of\n  named entries, not logic.\n- **Deep nesting**: more than 3 levels of indentation — same measurement and exclusions\n  as the KISS conditional-logic rule above.\n- **Long parameter lists**: methods with >5 parameters. *Why*: past ~5 parameters,\n  callers routinely swap argument order by mistake and the signature stops being\n  self-documenting. *Exclude*: constructor DI on `Router`\u002F`Handler`\u002F`CommandExecutor`\u002F\n  `QueryProcessor` records where each parameter is a distinct collaborator (repository,\n  mapper, client) — record-based constructor injection is this plugin's CQRS\n  convention, not a smell.\n- **Missing `record` usage**: classes that should be records (immutable DTOs with only\n  fields and constructor).\n- **Mutable state** where immutable would suffice.\n\n### Step 3: Report\n\nDisplay findings in the working language. Evidence (the exact file:line and offending\nsnippet) always precedes any summary verdict — never lead with a conclusion the counts\ndon't back up. Any finding that falls under an \"uncertain\" case above must carry the\n`(uncertain — needs human judgment)` suffix; do not silently upgrade it to a confirmed\nviolation.\n\n```\nClean Code Audit\n================\n\nFiles scanned: {count}\nScope: {path}\n\nDRY Issues ({count}):\n  {file}:{line} — {description}\n\nKISS Issues ({count}):\n  {file}:{line} — {description}\n\nYAGNI Issues ({count}):\n  {file}:{line} — {description}\n\nNaming Issues ({count}):\n  {file}:{line} — {description}\n\nStructure Issues ({count}):\n  {file}:{line} — {description}\n```\n\nIf no issues found, restate scope instead of asserting a bare quality claim:\n\n> \"Clean code audit passed: {count} files scanned under {path}, no violations found\n> against the DRY\u002FKISS\u002FYAGNI\u002Fnaming\u002Fstructure rules in Step 2.\"\n\n## Examples\n\n### Example 1 — Clean pass\n\nInput: `\u002Fbe-clean-code src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fhr\u002F`, 3 files found:\n`Employee.java` (record, 12 lines), `EmployeeRepository.java` (R2DBC interface, 9 lines),\n`CreateEmployeeCommandExecutor.java` (28 lines, single responsibility, 4 constructor\nparams).\n\nNone of the files cross a Step 2 threshold: no method over 30 lines, no class over 300\nlines, no duplicate blocks, all imports used. Report:\n\n```\nClean Code Audit\n================\n\nFiles scanned: 3\nScope: src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fhr\u002F\n\nDRY Issues (0):\nKISS Issues (0):\nYAGNI Issues (0):\nNaming Issues (0):\nStructure Issues (0):\n```\n\n> \"Clean code audit passed: 3 files scanned under src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fhr\u002F, no\n> violations found against the DRY\u002FKISS\u002FYAGNI\u002Fnaming\u002Fstructure rules in Step 2.\"\n\n### Example 2 — Findings across categories\n\nInput: `\u002Fbe-clean-code src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fbooking\u002F`. Source excerpt from\n`BookingHandler.java`:\n\n```java\npublic Mono\u003CServerResponse> create(ServerRequest request) {\n    return request.bodyToMono(CreateBooking.class)\n        .flatMap(cmd -> {\n            if (cmd.checkIn() != null) {\n                if (cmd.checkOut() != null) {\n                    if (cmd.checkIn().isBefore(cmd.checkOut())) {\n                        if (cmd.guestCount() > 0) {\n                            return executor.execute(cmd);\n                        }\n                    }\n                }\n            }\n            return Mono.error(new InvalidBookingException());\n        })\n        .flatMap(id -> ServerResponse.status(201).bodyValue(id));\n}\n```\n\nAn unused field found via `Grep` returning zero call sites within the scanned scope:\n\n```java\nprivate final Clock clock; \u002F\u002F never referenced elsewhere in this file or package\n```\n\nAnd a generic variable name in the same method:\n\n```java\nvar data = cmd.checkIn(); \u002F\u002F generic name gives no hint about what \"data\" is\n```\n\nReport:\n\n```\nClean Code Audit\n================\n\nFiles scanned: 14\nScope: src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fbooking\u002F\n\nDRY Issues (0):\nKISS Issues (1):\n  BookingHandler.java:5 — 4 levels of nested if inside create() exceeds the >3 nesting\n  threshold; flatten with an early-return guard clause or combine conditions with &&\n\nYAGNI Issues (1):\n  BookingHandler.java:2 — field `clock` has no call site within the scanned scope\n  (uncertain — needs human judgment: may be used via a superclass or reflectively)\n\nNaming Issues (1):\n  BookingHandler.java:9 — variable `data` is a generic name; rename to describe what\n  it holds (e.g. `checkInDate`)\n\nStructure Issues (0):\n```\n\n## Failure Modes & Exclusions\n\nThis is a static, heuristic text scan using only `Read`\u002F`Glob`\u002F`Grep` — not a compiler\nor bytecode analysis. Declared limitations:\n\n- **No cross-scope proof of absence.** \"Unused method\u002Ffield\" findings can only prove\n  \"no call site found within the scanned scope\" — never \"unused\" in the whole codebase.\n  Always report these as uncertain (see YAGNI section above), never as confirmed.\n- **Indentation-based nesting\u002Fline counts can misjudge non-standard formatting** (tabs\n  vs. spaces, chained builder calls, generated code). Treat borderline cases as\n  uncertain rather than a hard violation.\n- **Generated code, record-heavy DTOs, and `config\u002F`-package bean-wiring classes are\n  out of scope for length\u002Fparameter-count thresholds** unless a rule above states\n  otherwise — these are expected to look different from hand-written business logic.\n- **This skill does not run the build or tests.** It reads source text only; it cannot\n  confirm a method is dead code the way a coverage report or IDE \"find usages\" can. Treat\n  every finding as a lead for the developer to confirm, not a verified defect.\n",{"name":38,"description":39,"allowed-tools":40,"argument-hint":41,"user-invocable":42},"be-clean-code","Audit Java source for DRY, KISS, YAGNI, naming, and structure violations (god classes, deep nesting, long parameter lists). Use when the user asks to check code smells, DRY\u002FKISS\u002FYAGNI, or 'is this file too complex' — distinct from be-review (multi-dimension review orchestration), be-test-review (test quality only), and be-security (vulnerabilities only).","Read, Glob, Grep","[file-or-directory-path]",true,"main","99f07e592261c66756a2927d0440fc5fef950507",".claude\u002Fskills\u002Fecc\u002Fnodejs-keccak256","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile","2026-11-08 20:29:14",{"source":8,"skillName":38,"commands":50,"prompt":60,"zipAvailable":42},[51,54,57],{"tool":52,"command":53},"npx","npx skills add sakamoto-family-smile\u002Fagent_monorepo --skill be-clean-code",{"tool":55,"command":56},"bunx","bunx skills add sakamoto-family-smile\u002Fagent_monorepo --skill be-clean-code",{"tool":58,"command":59},"pnpm","pnpm dlx skills add sakamoto-family-smile\u002Fagent_monorepo --skill be-clean-code","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fnodejs-keccak256\u002FSKILL.md",[],[63,98,106,126,149,178],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":77,"publishedAt":33},"01M6RW50THEFSKK42YNR8XFZA1","remotion-video-creation","Best practices for Remotion - Video creation in React. 29 domain-specific rules covering 3D, animations, audio, captions, charts, transitions, and more.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fremotion-video-creation\u002FSKILL.md",[69,74],{"categoryNo":70,"categoryName":71,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":75,"categoryName":76,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000016","图像与多媒体",[78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],"Video","remotion video","remotion video creation","creation","Remotion","Charts","Captions","Audio","3D","Composition","Animation","best practices","more","animations","domain-specific","domain","three","Rules","Lottie","for",{"skillNo":99,"name":100,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":33},"01M6VCJ23NPECPSZJKGY691F75","hotcook-recipes","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fhotcook-agent\u002Fdata\u002Fskills\u002Fhotcook-recipes\u002FSKILL.md",[],[104,105],"hotcook recipes","recipes",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":120,"publishedAt":33},"01M6VCHHE00X5XHSDRD1KH1BW2","code-helper","Code review and assistance skill","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fagent-system-2\u002Fskills\u002Fcode-helper\u002Fskill.md",[112,115],{"categoryNo":113,"categoryName":114,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":116,"categoryName":117,"taxonomyType":118,"taxonomyTypeDesc":119},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[121,122,123,124,125],"code helper","helper","code","code review","review",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":138,"publishedAt":33},"01M6VCH3Q31A20H6SQ1H0J7JB2","research-assistant","Web research assistant skill using Brave Search MCP","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fagent-system-1\u002Fskills\u002Fresearch-assistant\u002Fskill.md",[132,135],{"categoryNo":133,"categoryName":134,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":136,"categoryName":137,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000023","Skill与智能体开发",[139,140,141,142,143,144,145,146,147,148],"research assistant","research","assistant","MCP","web","search","brave search","web research","brave","web research assistant",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":159,"publishedAt":33},"01M6VCGZZGPNVJSCZ1JTMNZAHY","x-api","X\u002FTwitter API integration for posting tweets, threads, reading timelines, search, and analytics. Covers OAuth auth patterns, rate limits, and platform-native content posting. Use when the user wants to interact with X programmatically.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fx-api\u002FSKILL.md",[155,158],{"categoryNo":156,"categoryName":157,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":116,"categoryName":117,"taxonomyType":118,"taxonomyTypeDesc":119},[160,161,162,163,164,165,97,166,167,168,169,170,171,172,173,174,175,176,144,177],"x api","api","with","when","limits","rate","threads","reading","native","posting","platform","patterns","api integration","twitter","use","auth","analytics","OAuth",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":185,"publishedAt":33},"01M6VCGVX6DGB1FKTA53QBBCQB","workspace-surface-audit","Audit the active repo, MCP servers, plugins, connectors, env surfaces, and harness setup, then recommend the highest-value ECC-native skills, hooks, agents, and operator workflows. Use when the user wants help setting up Claude Code or understanding what capabilities are actually available in their environment.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fworkspace-surface-audit\u002FSKILL.md",[184],{"categoryNo":136,"categoryName":137,"taxonomyType":72,"taxonomyTypeDesc":73},[186,187,188,189,142,190,191,123,192,193,194,195,174,196,197,198,199,168,200,163],"workspace surface audit","workspace","audit","hooks","workflows","connectors","capabilities","harness","repo","environment","up","harness setup","active","env","value"]