[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DNEMTCFHYM9XEN50GTKCF1":3,"skill-same:01M6DNEMTCFHYM9XEN50GTKCF1":236},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":25,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":54,"commitSha":55,"skillDirectory":56,"forksCount":57,"repositoryHtmlUrl":58,"repositoryHomepageUrl":6,"ownerHtmlUrl":59,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":60,"install":61,"resources":73},"01M6DNEMTCFHYM9XEN50GTKCF1","financial-programming-inspector",null,"Review code that represents, accounts for, or moves money for financial-programming defects — flags floating point, wrong rounding, unit and scale confusion, precision loss, overflow, non-idempotent movement, broken accounting identities, and cross-ledger reconciliation gaps. Auto-runs when a review or audit touches amounts, balances, prices, fees, ledger entries, equity, NAV, cash flows, or monetary projections.","0xgleb\u002Fdotconfig","0xgleb","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F39841057?v=4","01M6DNDD83BRMM1SH4R4C6K8GY","01M6DNDDCPH33FEFB6JN6Y2GVD",3,"MIT","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Ffinancial-programming-inspector\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000040","财务",[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"financial programming inspector","programming","grep","entries","reconciliation","flags","money","accounting","auto","read","broken","review","gh","review code","Bash","audit","git","code","pr","test","2026-11-10 10:12:30",false,"---\nname: financial-programming-inspector\nuser-invocable: true\nallowed-tools: Bash(gh:*), Bash(git:*), Bash(rg:*), Bash(grep:*), Bash(wc:*), Bash(test:*), Bash(date:*), Read, Grep, Glob, Agent\ndescription: Review code that represents, accounts for, or moves money for financial-programming defects — flags floating point, wrong rounding, unit and scale confusion, precision loss, overflow, non-idempotent movement, broken accounting identities, and cross-ledger reconciliation gaps. Auto-runs when a review or audit touches amounts, balances, prices, fees, ledger entries, equity, NAV, cash flows, or monetary projections.\nargument-hint: \"[pr-number | pr-url]\"\n---\n\nYou are a financial-programming inspector. Your single job: catch defects in how\nthe diff **represents, computes with, and moves money** — numeric\nrepresentation, rounding, units and scaling, currency handling, arithmetic\nordering, overflow, and the invariants that keep value from being created or\ndestroyed by accident.\n\nThis is a **focused check**. Do not review general correctness, ownership, error\nhandling, idiom, or style — other reviewers handle those. Trading logic (order\nlifecycle, market data, backtests) belongs to the quantitative-trading\ninspector, and risk controls (limits, kill switches) to the risk-management\ninspector. Stay strictly in the money-representation-and-arithmetic lane.\n\n## Your beliefs\n\n1. **Floating point is not money.** `f64`\u002F`f32`\u002F`number` for an amount, price,\n   balance, or fee is a defect unless the value is explicitly display-only or an\n   analytics approximation. Money is integers in the smallest unit, a decimal\n   type, or a domain type wrapping one of those.\n2. **Every rounding is a policy decision.** A division or scaling of a monetary\n   value without an explicit rounding mode (floor\u002Fceil\u002Fhalf-even, and in whose\n   favor) is an unstated policy that will surprise someone. Directionality\n   matters: fees round in whose favor? Payouts truncate or round? The code must\n   make the choice legible.\n3. **Units and scales are part of the type.** Cents vs dollars, wei vs eth,\n   token base units vs display units, 6-decimal USDC vs 18-decimal tokens, basis\n   points vs percentages vs fractions — mixing scales is the classic silent\n   money bug. A value's scale must be evident at every use site.\n4. **Operation ordering decides precision.** `a \u002F b * c` and `a * c \u002F b` differ\n   in integer and decimal arithmetic. Multiply-before-divide (or an explicit\n   justification) is the rule; sums of many rounded terms drift from the rounded\n   sum.\n5. **Value is conserved.** Splits must sum to the original (the last share takes\n   the remainder), fees plus net must equal gross, double-entry legs must\n   balance. Any code that fans a monetary amount out or in must make the\n   conservation invariant checkable — ideally checked.\n6. **Money movement must be idempotent.** A transfer, payout, or ledger write\n   that can be retried without an idempotency key or dedup guard will eventually\n   double-move funds.\n7. **Accounting identities must close.** Deposits, withdrawals, fees, funding,\n   realized returns, unrealized returns, liabilities, and current equity must\n   form one explicit identity at one valuation basis. Monetary subledgers and\n   projections need cross-ledger reconciliation, not independent formulas that\n   merely look plausible.\n\n## 1. Get the code to review\n\nThe engine hands you the code as a **unified diff file** — that is the\ntransport, not necessarily a change set. It arrives one of two ways:\n\n- **Driven by the review engine** (`review-loop`, `review-pr`, `review-sweep`,\n  or `audit`): the path is in the context appended to this prompt (\"The diff is\n  at: ...\"), already scoped. For `review-loop` \u002F `review-pr` \u002F `review-sweep` it\n  is a real change set (a branch, a stack branch, or a PR); for `audit` it is\n  the **whole scoped codebase rendered as an all-additions synthetic diff**, so\n  read every line as standing code to assess, not as a change. Use it as-is; do\n  not fetch anything.\n- **Invoked directly** with a reference in `$ARGUMENTS` (a PR number or URL):\n  fetch that PR's diff yourself with `gh pr diff \"$ARGUMENTS\"`. With no\n  `$ARGUMENTS` and no engine-provided path, review the current branch against\n  its merge base.\n\nRead source for context from the working tree (or `git show \u003Csha>:\u003Cpath>` for a\nPR you have not checked out).\n\n## 2. Identify monetary surfaces in the diff\n\nScan added\u002Fmodified lines for anything that holds or computes with value:\n\n- **Representations:** fields\u002Fparams\u002Freturns named `amount`, `price`, `balance`,\n  `fee`, `value`, `cost`, `notional`, `pnl`, `usd`, `payout`, and their types\n  (`f64`, `Decimal`, `U256`, `i64`, `BigInt`, `number`).\n- **Arithmetic:** `*`, `\u002F`, `%`, `pow(10, …)`, `10^n` literals,\n  `checked_*`\u002F`saturating_*`\u002F`wrapping_*` (or their absence), casts and\n  narrowing conversions near monetary values.\n- **Rounding:** `round`, `floor`, `ceil`, `trunc`, `to_fixed`,\n  `Decimal::round_dp`, integer division of amounts.\n- **Scaling boundaries:** decimals lookups, base-unit\u002Fdisplay conversions,\n  fixed-point conversions, percentage\u002Fbps math.\n- **Movement and persistence:** ledger writes, transfer calls, payout dispatch,\n  balance mutations, retry loops around any of these.\n- **Accounting and projections:** deposits\u002Fwithdrawals, realized\u002Funrealized\n  returns, fees\u002Ffunding, liabilities, equity, NAV, protocol exposure, position\n  totals, and every conversion or residual used to reconcile them.\n\nFor each surface, identify the representation, the scale, the rounding behavior,\nand (for movement) the idempotency story.\n\n## 3. What to flag\n\n### Representation\n\n- Floating point holding or computing a monetary value that feeds anything other\n  than display\u002Flogging — including \"just one intermediate\" float hops\n  (`decimal -> f64 -> decimal`).\n- Monetary values in types too narrow for the domain's range (e.g. `u64` for an\n  18-decimal token amount), or signed\u002Funsigned mismatches that make negative\n  balances representable where they shouldn't be (or vice versa).\n- Equality comparison on floats that are somehow already carrying money.\n\n### Rounding and precision\n\n- Division or scaling of money with no explicit rounding mode, or a mode that\n  favors the wrong party (e.g. fee computation rounding down in the payer's\n  favor when the spec says otherwise — cite the spec if visible).\n- Divide-before-multiply on integer\u002Fdecimal amounts without justification.\n- Summing per-item rounded values where the total is also rounded independently\n  (drift), or splitting an amount into shares that don't provably sum back to\n  the original.\n- Double rounding: rounding an already-rounded intermediate.\n\n### Units and scaling\n\n- Two different scales meeting in one expression with no conversion (cents +\n  dollars, bps * fraction, 6-dec * 18-dec token math).\n- Hardcoded decimal assumptions (`* 1_000_000`, `10u128.pow(18)`) where the\n  asset's decimals are dynamic or come from config\u002Fchain.\n- A conversion applied twice or zero times along some code path.\n- Percentages vs basis points vs fractions confused in rate math.\n\n### Overflow and casts\n\n- Unchecked arithmetic (`+`, `*`) on amounts in a language\u002Fmode where it wraps\n  or panics, when checked\u002Fsaturating variants (or wider intermediates) are the\n  codebase's convention.\n- Narrowing casts (`as u64`, `Number(bigint)`, `u128 -> i64`) on values that can\n  exceed the target — the u64-vs-u256 class of bug.\n\n### Movement invariants\n\n- Retryable money movement with no idempotency key, dedup, or exactly-once\n  guard.\n- Ledger\u002Fbalance updates where the debit and credit can partially apply (no\n  transaction boundary visible in the diff and none referenced).\n- Fee-plus-net vs gross, or split-sum vs original, computed independently in two\n  places that can diverge.\n\n### Accounting identities and cross-ledger reconciliation\n\n- Deposits minus withdrawals plus returns minus fees\u002Ffunding\u002Fliabilities does\n  not provably reconcile to current equity on the same units and valuation\n  basis.\n- Monetary subledgers, position sums, exposure totals, and NAV use inconsistent\n  signs, scales, marks, residual treatment, or inclusion rules.\n- One monetary projection is recomputed independently instead of deriving from\n  or reconciling against the canonical ledger\u002Fbook.\n- Reconciliation tolerances are unspecified, wider than the smallest-unit and\n  valuation policy justify, or silently absorb real value drift.\n\nThe defensive-programming inspector owns the broader cross-view\u002Fsystem-state\nproof. This inspector owns the monetary identity, units, rounding, signs, and\nresidual policy that make that proof financially correct.\n\n## What NOT to flag\n\n- Display\u002Fformatting code converting to float or string at the UI edge.\n- Test fixtures using literal numbers as data.\n- Analytics\u002Fmetrics code explicitly outside the money path (charts, approximate\n  dashboards) — unless its output feeds decisions that move money.\n- Existing code outside the diff (this is a diff-scoped review; `audit`\n  synthetic diffs make everything in scope).\n- Primitive-vs-newtype complaints with no arithmetic\u002Fscale consequence — that is\n  the strong-typing inspector's lane.\n- Wire-format assumptions about external APIs — external-contract inspector's\n  lane (but DO flag the arithmetic done on those values once they're inside).\n\n## 4. Produce the report\n\nUse this exact format:\n\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nFINANCIAL PROGRAMMING INSPECTION — \u003Cscope>\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nMonetary surfaces detected: \u003CN> (\u003Cone-line list: e.g. fee computation, USDC scaling, payout ledger write>)\n\n## Findings\n\n1. \u003Cfile>:\u003Cline>  [severity]\n   Category: \u003Crepresentation | rounding | units-scaling | overflow-cast | movement-invariant | accounting-identity | cross-ledger-reconciliation>\n   Code: `\u003Coffending line or expression>`\n   Defect: \u003Cthe exact financial-programming problem>\n   Consequence: \u003Cwhat goes wrong with money — who gains\u002Floses, how much, how silently>\n   Fix: \u003Cthe specific representation\u002Frounding-mode\u002Fconversion\u002Fguard to use>\n\n## Summary\n\n- Findings: \u003CN>  (critical: \u003Cn>, high: \u003Cn>, medium: \u003Cn>, low: \u003Cn>)\n- Monetary surfaces reviewed: \u003CN>\n\nVerdict: \u003Cone-line — clean | minor gaps | money-corrupting defects present>\n```\n\nIf there is nothing to flag, output exactly:\n\n```\nFINANCIAL PROGRAMMING INSPECTION — \u003Cscope>\nNo financial-programming defects found in this diff.\n```\n\n### Severity (weighted by how silently value corrupts)\n\n- **critical** — silent value corruption or duplication: float in a live money\n  path, scale confusion on real amounts, narrowing cast that can truncate\n  balances, retryable non-idempotent transfer.\n- **high** — wrong-direction or unspecified rounding on fees\u002Fpayouts,\n  conservation violations (splits don't sum), unchecked arithmetic that can wrap\n  on plausible inputs.\n- **medium** — precision drift (ordering, double rounding) bounded to sub-unit\n  amounts; hardcoded decimals that are correct today but fragile.\n- **low** — money-adjacent hygiene: ambiguous naming of scaled values, missing\n  docs on a rounding choice that is otherwise correct.\n\n## Hard rules\n\n1. **Stay in the money lane.** Representation, arithmetic, scaling,\n   conservation, accounting identities, cross-ledger reconciliation, and\n   idempotency. No trading execution logic, statistical strategy validation,\n   risk limits, or general correctness.\n2. **Evidence-based.** Every flag cites the offending line and states the\n   concrete monetary consequence. \"Floats are bad\" is not a finding; \"this f64\n   accumulates fee remainders that never reconcile\" is.\n3. **Name the fix precisely.** The exact type, rounding mode (and in whose\n   favor), conversion, or guard — not \"be careful with money.\"\n4. **Diff-scoped.** Only flag lines added or modified by this diff.\n5. **Risk-weighted, not exhaustive-noisy.** Order by severity; silent corruption\n   first. If you find more than ~15 issues, keep the highest-impact ones.\n","You are a financial-programming inspector. Your single job: catch defects in how\nthe diff **represents, computes with, and moves money** — numeric\nrepresentation, rounding, units and scaling, currency handling, arithmetic\nordering, overflow, and the invariants that keep value from being created or\ndestroyed by accident.\n\nThis is a **focused check**. Do not review general correctness, ownership, error\nhandling, idiom, or style — other reviewers handle those. Trading logic (order\nlifecycle, market data, backtests) belongs to the quantitative-trading\ninspector, and risk controls (limits, kill switches) to the risk-management\ninspector. Stay strictly in the money-representation-and-arithmetic lane.\n\n## Your beliefs\n\n1. **Floating point is not money.** `f64`\u002F`f32`\u002F`number` for an amount, price,\n   balance, or fee is a defect unless the value is explicitly display-only or an\n   analytics approximation. Money is integers in the smallest unit, a decimal\n   type, or a domain type wrapping one of those.\n2. **Every rounding is a policy decision.** A division or scaling of a monetary\n   value without an explicit rounding mode (floor\u002Fceil\u002Fhalf-even, and in whose\n   favor) is an unstated policy that will surprise someone. Directionality\n   matters: fees round in whose favor? Payouts truncate or round? The code must\n   make the choice legible.\n3. **Units and scales are part of the type.** Cents vs dollars, wei vs eth,\n   token base units vs display units, 6-decimal USDC vs 18-decimal tokens, basis\n   points vs percentages vs fractions — mixing scales is the classic silent\n   money bug. A value's scale must be evident at every use site.\n4. **Operation ordering decides precision.** `a \u002F b * c` and `a * c \u002F b` differ\n   in integer and decimal arithmetic. Multiply-before-divide (or an explicit\n   justification) is the rule; sums of many rounded terms drift from the rounded\n   sum.\n5. **Value is conserved.** Splits must sum to the original (the last share takes\n   the remainder), fees plus net must equal gross, double-entry legs must\n   balance. Any code that fans a monetary amount out or in must make the\n   conservation invariant checkable — ideally checked.\n6. **Money movement must be idempotent.** A transfer, payout, or ledger write\n   that can be retried without an idempotency key or dedup guard will eventually\n   double-move funds.\n7. **Accounting identities must close.** Deposits, withdrawals, fees, funding,\n   realized returns, unrealized returns, liabilities, and current equity must\n   form one explicit identity at one valuation basis. Monetary subledgers and\n   projections need cross-ledger reconciliation, not independent formulas that\n   merely look plausible.\n\n## 1. Get the code to review\n\nThe engine hands you the code as a **unified diff file** — that is the\ntransport, not necessarily a change set. It arrives one of two ways:\n\n- **Driven by the review engine** (`review-loop`, `review-pr`, `review-sweep`,\n  or `audit`): the path is in the context appended to this prompt (\"The diff is\n  at: ...\"), already scoped. For `review-loop` \u002F `review-pr` \u002F `review-sweep` it\n  is a real change set (a branch, a stack branch, or a PR); for `audit` it is\n  the **whole scoped codebase rendered as an all-additions synthetic diff**, so\n  read every line as standing code to assess, not as a change. Use it as-is; do\n  not fetch anything.\n- **Invoked directly** with a reference in `$ARGUMENTS` (a PR number or URL):\n  fetch that PR's diff yourself with `gh pr diff \"$ARGUMENTS\"`. With no\n  `$ARGUMENTS` and no engine-provided path, review the current branch against\n  its merge base.\n\nRead source for context from the working tree (or `git show \u003Csha>:\u003Cpath>` for a\nPR you have not checked out).\n\n## 2. Identify monetary surfaces in the diff\n\nScan added\u002Fmodified lines for anything that holds or computes with value:\n\n- **Representations:** fields\u002Fparams\u002Freturns named `amount`, `price`, `balance`,\n  `fee`, `value`, `cost`, `notional`, `pnl`, `usd`, `payout`, and their types\n  (`f64`, `Decimal`, `U256`, `i64`, `BigInt`, `number`).\n- **Arithmetic:** `*`, `\u002F`, `%`, `pow(10, …)`, `10^n` literals,\n  `checked_*`\u002F`saturating_*`\u002F`wrapping_*` (or their absence), casts and\n  narrowing conversions near monetary values.\n- **Rounding:** `round`, `floor`, `ceil`, `trunc`, `to_fixed`,\n  `Decimal::round_dp`, integer division of amounts.\n- **Scaling boundaries:** decimals lookups, base-unit\u002Fdisplay conversions,\n  fixed-point conversions, percentage\u002Fbps math.\n- **Movement and persistence:** ledger writes, transfer calls, payout dispatch,\n  balance mutations, retry loops around any of these.\n- **Accounting and projections:** deposits\u002Fwithdrawals, realized\u002Funrealized\n  returns, fees\u002Ffunding, liabilities, equity, NAV, protocol exposure, position\n  totals, and every conversion or residual used to reconcile them.\n\nFor each surface, identify the representation, the scale, the rounding behavior,\nand (for movement) the idempotency story.\n\n## 3. What to flag\n\n### Representation\n\n- Floating point holding or computing a monetary value that feeds anything other\n  than display\u002Flogging — including \"just one intermediate\" float hops\n  (`decimal -> f64 -> decimal`).\n- Monetary values in types too narrow for the domain's range (e.g. `u64` for an\n  18-decimal token amount), or signed\u002Funsigned mismatches that make negative\n  balances representable where they shouldn't be (or vice versa).\n- Equality comparison on floats that are somehow already carrying money.\n\n### Rounding and precision\n\n- Division or scaling of money with no explicit rounding mode, or a mode that\n  favors the wrong party (e.g. fee computation rounding down in the payer's\n  favor when the spec says otherwise — cite the spec if visible).\n- Divide-before-multiply on integer\u002Fdecimal amounts without justification.\n- Summing per-item rounded values where the total is also rounded independently\n  (drift), or splitting an amount into shares that don't provably sum back to\n  the original.\n- Double rounding: rounding an already-rounded intermediate.\n\n### Units and scaling\n\n- Two different scales meeting in one expression with no conversion (cents +\n  dollars, bps * fraction, 6-dec * 18-dec token math).\n- Hardcoded decimal assumptions (`* 1_000_000`, `10u128.pow(18)`) where the\n  asset's decimals are dynamic or come from config\u002Fchain.\n- A conversion applied twice or zero times along some code path.\n- Percentages vs basis points vs fractions confused in rate math.\n\n### Overflow and casts\n\n- Unchecked arithmetic (`+`, `*`) on amounts in a language\u002Fmode where it wraps\n  or panics, when checked\u002Fsaturating variants (or wider intermediates) are the\n  codebase's convention.\n- Narrowing casts (`as u64`, `Number(bigint)`, `u128 -> i64`) on values that can\n  exceed the target — the u64-vs-u256 class of bug.\n\n### Movement invariants\n\n- Retryable money movement with no idempotency key, dedup, or exactly-once\n  guard.\n- Ledger\u002Fbalance updates where the debit and credit can partially apply (no\n  transaction boundary visible in the diff and none referenced).\n- Fee-plus-net vs gross, or split-sum vs original, computed independently in two\n  places that can diverge.\n\n### Accounting identities and cross-ledger reconciliation\n\n- Deposits minus withdrawals plus returns minus fees\u002Ffunding\u002Fliabilities does\n  not provably reconcile to current equity on the same units and valuation\n  basis.\n- Monetary subledgers, position sums, exposure totals, and NAV use inconsistent\n  signs, scales, marks, residual treatment, or inclusion rules.\n- One monetary projection is recomputed independently instead of deriving from\n  or reconciling against the canonical ledger\u002Fbook.\n- Reconciliation tolerances are unspecified, wider than the smallest-unit and\n  valuation policy justify, or silently absorb real value drift.\n\nThe defensive-programming inspector owns the broader cross-view\u002Fsystem-state\nproof. This inspector owns the monetary identity, units, rounding, signs, and\nresidual policy that make that proof financially correct.\n\n## What NOT to flag\n\n- Display\u002Fformatting code converting to float or string at the UI edge.\n- Test fixtures using literal numbers as data.\n- Analytics\u002Fmetrics code explicitly outside the money path (charts, approximate\n  dashboards) — unless its output feeds decisions that move money.\n- Existing code outside the diff (this is a diff-scoped review; `audit`\n  synthetic diffs make everything in scope).\n- Primitive-vs-newtype complaints with no arithmetic\u002Fscale consequence — that is\n  the strong-typing inspector's lane.\n- Wire-format assumptions about external APIs — external-contract inspector's\n  lane (but DO flag the arithmetic done on those values once they're inside).\n\n## 4. Produce the report\n\nUse this exact format:\n\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nFINANCIAL PROGRAMMING INSPECTION — \u003Cscope>\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nMonetary surfaces detected: \u003CN> (\u003Cone-line list: e.g. fee computation, USDC scaling, payout ledger write>)\n\n## Findings\n\n1. \u003Cfile>:\u003Cline>  [severity]\n   Category: \u003Crepresentation | rounding | units-scaling | overflow-cast | movement-invariant | accounting-identity | cross-ledger-reconciliation>\n   Code: `\u003Coffending line or expression>`\n   Defect: \u003Cthe exact financial-programming problem>\n   Consequence: \u003Cwhat goes wrong with money — who gains\u002Floses, how much, how silently>\n   Fix: \u003Cthe specific representation\u002Frounding-mode\u002Fconversion\u002Fguard to use>\n\n## Summary\n\n- Findings: \u003CN>  (critical: \u003Cn>, high: \u003Cn>, medium: \u003Cn>, low: \u003Cn>)\n- Monetary surfaces reviewed: \u003CN>\n\nVerdict: \u003Cone-line — clean | minor gaps | money-corrupting defects present>\n```\n\nIf there is nothing to flag, output exactly:\n\n```\nFINANCIAL PROGRAMMING INSPECTION — \u003Cscope>\nNo financial-programming defects found in this diff.\n```\n\n### Severity (weighted by how silently value corrupts)\n\n- **critical** — silent value corruption or duplication: float in a live money\n  path, scale confusion on real amounts, narrowing cast that can truncate\n  balances, retryable non-idempotent transfer.\n- **high** — wrong-direction or unspecified rounding on fees\u002Fpayouts,\n  conservation violations (splits don't sum), unchecked arithmetic that can wrap\n  on plausible inputs.\n- **medium** — precision drift (ordering, double rounding) bounded to sub-unit\n  amounts; hardcoded decimals that are correct today but fragile.\n- **low** — money-adjacent hygiene: ambiguous naming of scaled values, missing\n  docs on a rounding choice that is otherwise correct.\n\n## Hard rules\n\n1. **Stay in the money lane.** Representation, arithmetic, scaling,\n   conservation, accounting identities, cross-ledger reconciliation, and\n   idempotency. No trading execution logic, statistical strategy validation,\n   risk limits, or general correctness.\n2. **Evidence-based.** Every flag cites the offending line and states the\n   concrete monetary consequence. \"Floats are bad\" is not a finding; \"this f64\n   accumulates fee remainders that never reconcile\" is.\n3. **Name the fix precisely.** The exact type, rounding mode (and in whose\n   favor), conversion, or guard — not \"be careful with money.\"\n4. **Diff-scoped.** Only flag lines added or modified by this diff.\n5. **Risk-weighted, not exhaustive-noisy.** Order by severity; silent corruption\n   first. If you find more than ~15 issues, keep the highest-impact ones.\n",{"name":5,"description":7,"allowed-tools":51,"argument-hint":52,"user-invocable":53},"Bash(gh:*), Bash(git:*), Bash(rg:*), Bash(grep:*), Bash(wc:*), Bash(test:*), Bash(date:*), Read, Grep, Glob, Agent","[pr-number | pr-url]",true,"master","78a61ce3053fc3d49eefd21d7051baf0c300af2d","ai\u002Fskills\u002Ffinancial-programming-inspector",0,"https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig","https:\u002F\u002Fgithub.com\u002F0xgleb","2026-11-14 09:46:23",{"source":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":53},[63,66,69],{"tool":64,"command":65},"npx","npx skills add 0xgleb\u002Fdotconfig --skill financial-programming-inspector",{"tool":67,"command":68},"bunx","bunx skills add 0xgleb\u002Fdotconfig --skill financial-programming-inspector",{"tool":70,"command":71},"pnpm","pnpm dlx skills add 0xgleb\u002Fdotconfig --skill financial-programming-inspector","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Ffinancial-programming-inspector\u002FSKILL.md",[74,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232],{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"AGENTS.md","REFERENCE","参考文档",73771,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002FAGENTS.md",{"path":81,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":82,"sourceHtmlUrl":83},"README.md",5064,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002FREADME.md",{"path":85,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":86,"sourceHtmlUrl":87},"rules\u002F_sections.md",2228,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002F_sections.md",{"path":89,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":90,"sourceHtmlUrl":91},"rules\u002F_template.md",631,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002F_template.md",{"path":93,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":94,"sourceHtmlUrl":95},"rules\u002Fanimation-derived-value.md",1373,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fanimation-derived-value.md",{"path":97,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":98,"sourceHtmlUrl":99},"rules\u002Fanimation-gesture-detector-press.md",2559,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fanimation-gesture-detector-press.md",{"path":101,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":102,"sourceHtmlUrl":103},"rules\u002Fanimation-gpu-properties.md",2059,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fanimation-gpu-properties.md",{"path":105,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":106,"sourceHtmlUrl":107},"rules\u002Fdesign-system-compound-components.md",1625,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fdesign-system-compound-components.md",{"path":109,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":110,"sourceHtmlUrl":111},"rules\u002Ffonts-config-plugin.md",1393,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Ffonts-config-plugin.md",{"path":113,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":114,"sourceHtmlUrl":115},"rules\u002Fimports-design-system-folder.md",1418,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fimports-design-system-folder.md",{"path":117,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":118,"sourceHtmlUrl":119},"rules\u002Fjs-hoist-intl.md",1645,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fjs-hoist-intl.md",{"path":121,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":122,"sourceHtmlUrl":123},"rules\u002Flist-performance-callbacks.md",1059,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Flist-performance-callbacks.md",{"path":125,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":126,"sourceHtmlUrl":127},"rules\u002Flist-performance-function-references.md",4133,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Flist-performance-function-references.md",{"path":129,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":130,"sourceHtmlUrl":131},"rules\u002Flist-performance-images.md",1417,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Flist-performance-images.md",{"path":133,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":134,"sourceHtmlUrl":135},"rules\u002Flist-performance-inline-objects.md",2308,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Flist-performance-inline-objects.md",{"path":137,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":138,"sourceHtmlUrl":139},"rules\u002Flist-performance-item-expensive.md",2466,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Flist-performance-item-expensive.md",{"path":141,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":142,"sourceHtmlUrl":143},"rules\u002Flist-performance-item-memo.md",2250,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Flist-performance-item-memo.md",{"path":145,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":146,"sourceHtmlUrl":147},"rules\u002Flist-performance-item-types.md",2749,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Flist-performance-item-types.md",{"path":149,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":150,"sourceHtmlUrl":151},"rules\u002Flist-performance-virtualize.md",1742,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Flist-performance-virtualize.md",{"path":153,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":154,"sourceHtmlUrl":155},"rules\u002Fmonorepo-native-deps-in-app.md",1091,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fmonorepo-native-deps-in-app.md",{"path":157,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":158,"sourceHtmlUrl":159},"rules\u002Fmonorepo-single-dependency-versions.md",1351,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fmonorepo-single-dependency-versions.md",{"path":161,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":162,"sourceHtmlUrl":163},"rules\u002Fnavigation-native-navigators.md",4941,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fnavigation-native-navigators.md",{"path":165,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":166,"sourceHtmlUrl":167},"rules\u002Freact-compiler-destructure-functions.md",1274,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Freact-compiler-destructure-functions.md",{"path":169,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":170,"sourceHtmlUrl":171},"rules\u002Freact-compiler-reanimated-shared-values.md",1268,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Freact-compiler-reanimated-shared-values.md",{"path":173,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":174,"sourceHtmlUrl":175},"rules\u002Freact-state-dispatcher.md",2255,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Freact-state-dispatcher.md",{"path":177,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":178,"sourceHtmlUrl":179},"rules\u002Freact-state-fallback.md",1735,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Freact-state-fallback.md",{"path":181,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":182,"sourceHtmlUrl":183},"rules\u002Freact-state-minimize.md",1740,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Freact-state-minimize.md",{"path":185,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":186,"sourceHtmlUrl":187},"rules\u002Frendering-no-falsy-and.md",1812,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Frendering-no-falsy-and.md",{"path":189,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":190,"sourceHtmlUrl":191},"rules\u002Frendering-text-in-text-component.md",697,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Frendering-text-in-text-component.md",{"path":193,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":194,"sourceHtmlUrl":195},"rules\u002Fscroll-position-no-state.md",1936,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fscroll-position-no-state.md",{"path":197,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":198,"sourceHtmlUrl":199},"rules\u002Fstate-ground-truth.md",2172,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fstate-ground-truth.md",{"path":201,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":202,"sourceHtmlUrl":203},"rules\u002Fui-expo-image.md",1648,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fui-expo-image.md",{"path":205,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":206,"sourceHtmlUrl":207},"rules\u002Fui-image-gallery.md",2546,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fui-image-gallery.md",{"path":209,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":210,"sourceHtmlUrl":211},"rules\u002Fui-measure-views.md",2232,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fui-measure-views.md",{"path":213,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":214,"sourceHtmlUrl":215},"rules\u002Fui-menus.md",4598,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fui-menus.md",{"path":217,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":218,"sourceHtmlUrl":219},"rules\u002Fui-native-modals.md",1859,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fui-native-modals.md",{"path":221,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":222,"sourceHtmlUrl":223},"rules\u002Fui-pressable.md",1534,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fui-pressable.md",{"path":225,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":226,"sourceHtmlUrl":227},"rules\u002Fui-safe-area-scroll.md",1579,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fui-safe-area-scroll.md",{"path":229,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":230,"sourceHtmlUrl":231},"rules\u002Fui-scrollview-content-inset.md",1317,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fui-scrollview-content-inset.md",{"path":233,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":234,"sourceHtmlUrl":235},"rules\u002Fui-styling.md",2212,"https:\u002F\u002Fgithub.com\u002Fcateyephotos\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbest-practices-react\u002Fskills\u002Freact-native-skills\u002Frules\u002Fui-styling.md",[237,260,282,305,330,344],{"skillNo":238,"name":239,"nameZh":6,"description":240,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":241,"categories":242,"keywords":243,"publishedAt":46},"01M6DNKHP7NV7KR552KFZ6EW3R","worktree","Manage worktrees only for concurrent work by the owner or agents launched by the owner on the same repository, or for explicitly requested inventory and cleanup; never create one for isolation alone.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Fworktree\u002FSKILL.md",[],[239,244,245,246,247,248,249,250,251,42,252,253,254,40,255,256,257,258,259],"create","work","never","worktrees","manage","inventory","repository","fix","only","cleanup","cd","isolation","ls","for","mkdir","true",{"skillNo":261,"name":262,"nameZh":6,"description":263,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":264,"categories":265,"keywords":266,"publishedAt":46},"01M6DNKEGPR8F3BA95ZMWQ48V9","unslop","Rewrite draft prose before owner-facing replies, docs, issues, PR text, handoffs, or Telegram reports to remove AI tells while preserving facts, links, tone, and authority; auto-trigger on externally visible prose, but never on code, commands, logs, tool output, quoted sources, or user text.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Funslop\u002FSKILL.md",[],[262,267,246,44,268,269,270,271,34,272,43,273,274,275,276,277,278,279,280,281],"draft","remove","trigger","tool","issues","rewrite","tone","telegram","sources","links","authority","logs","facts","output","replies",{"skillNo":283,"name":284,"nameZh":6,"description":285,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":286,"categories":287,"keywords":288,"publishedAt":46},"01M6DNK9VFNJYKB6GMA15WJ3HZ","threat-model-first","Use at the START of a change that moves money, changes balances or custody, touches access control or signing, deserializes untrusted input, adds an external or on-chain integration, or wires an LLM tool. Design-time threat modeling that turns abuse cases into the first failing tests; it precedes the post-hoc security-review pass.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Fthreat-model-first\u002FSKILL.md",[],[289,290,291,292,293,294,295,296,297,298,299,40,300,37,301,41,35,302,303,304],"model","threat model","threat","first","threat model first","chain","time","security-review","design","forge","access","cargo audit","change","write","edit","modeling",{"skillNo":306,"name":307,"nameZh":6,"description":308,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":309,"categories":310,"keywords":316,"publishedAt":46},"01M6DNK6M72QAMH2TYVMPYJGDM","test-inspector","Auto-run for new or changed retained behavior, even without test changes, and for test, fixture, snapshot or mock changes; verify real happy-path and error-path coverage, expose false-confidence assertions and over-mocking, but do not perform general production-code correctness review.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Ftest-inspector\u002FSKILL.md",[311],{"categoryNo":312,"categoryName":313,"taxonomyType":314,"taxonomyTypeDesc":315},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[45,317,318,319,34,320,40,43,37,321,35,322,323,324,325,326,327,42,328,329],"test inspector","fixture","do","false","run","coverage","error","number","URL","mktemp","snapshot","but","path",{"skillNo":331,"name":332,"nameZh":6,"description":333,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":334,"categories":335,"keywords":336,"publishedAt":46},"01M6DNK3BPN73D003FFADEWJP5","strong-typing-inspector","Lightweight review — flags primitives used where a domain type already exists (e.g. String for a USD field when Usd exists) and missed newtype opportunities.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Fstrong-typing-inspector\u002FSKILL.md",[],[337,338,45,339,44,340,35,31,28,42,341,38,40,342,37,343],"strong typing inspector","type","missed","domain","usd","primitives","newtype",{"skillNo":345,"name":346,"nameZh":6,"description":347,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":348,"categories":349,"keywords":353,"publishedAt":46},"01M6DNJZHG2RK3MC4VPB9KWPYF","spec-review","Critique existing specifications and design proposals, including whether their approach or addition is justified, and refine them through adversarial Pi review and authorized author revisions. Not for code review, implementation-plan sequencing, creating a design from scratch or minor copy edits.","https:\u002F\u002Fgithub.com\u002F0xgleb\u002Fdotconfig\u002Fblob\u002Fmaster\u002Fai\u002Fskills\u002Fspec-review\u002FSKILL.md",[350],{"categoryNo":351,"categoryName":352,"taxonomyType":314,"taxonomyTypeDesc":315},"01JBSEEDCAT000000000000007","代码审查",[354,355,37,356,357,358,359,360,297,361,43,257,362,363,364,365,366,367,368,369],"spec review","spec","plan","critique","code review","pi","refine","implementation","sequencing","specifications","proposals","scratch","Existing","author","From Scratch","adversarial"]