fix: refresh stale technical content in agents, rules, and skills (#2168)

Several published examples contained APIs that no longer exist, code that
does not run, or model versions that drifted from reality:

- agents/performance-optimizer.md used the web-vitals v3 API
  (getCLS/getFID/getLCP/getFCP/getTTFB) and reported FID. web-vitals v4
  renamed the imports to onCLS/onINP/onLCP/onFCP/onTTFB and FID was
  replaced by INP (target < 200ms)
- rules/common/performance.md pinned stale model versions in the
  model-selection guidance; refresh to the versions the repo itself uses
  (agent.yaml pins claude-opus-4-6) and add the PowerShell variant for
  MAX_THINKING_TOKENS next to the bash export
- skills/python-patterns/SKILL.md: both get_value examples referenced
  default_value without declaring the parameter (NameError); add
  default_value: Any = None to the EAFP and LBYL signatures
- skills/frontend-patterns/SKILL.md: the custom useQuery example rebuilt
  refetch whenever callers passed inline fetchers/options, re-triggering
  the effect after every state update (infinite fetch loop). Keep the
  latest fetcher/options in refs so refetch stays referentially stable.
  The PASS-labelled useMemo example mutated its input with in-place sort;
  copy before sorting
- skills/coding-standards/SKILL.md repeated the same PASS-labelled
  in-place-sort-in-useMemo example; same fix
- rules/typescript/security.md used a vendor-specific OPENAI_API_KEY in
  generic guidance; switch to a neutral API_KEY

Every hand-maintained copy of the affected content is synced in the same
change: locale mirrors (ja-JP, ko-KR, pt-BR, tr, zh-CN, zh-TW - each only
where it carries the affected file) and the .agents/.kiro/.cursor harness
mirrors. Two structural divergences are left alone and noted here:
.kiro/steering/performance.md has no extended-thinking control list to
carry the PowerShell variant, and docs/zh-TW/rules/performance.md keeps an
older condensed thinking section without the budget-cap line.
rules/zh/performance.md is intentionally untouched - the rules/zh tree is
being retired in a separate change
This commit is contained in:
konstapukarifastnetfi
2026-06-07 08:26:01 +03:00
committed by GitHub
parent 36bec90d45
commit 8b24f63ede
31 changed files with 215 additions and 112 deletions
+8 -8
View File
@@ -353,14 +353,14 @@ npx lighthouse https://your-app.com --only-categories=performance
### Web Vitals 监控
```typescript
// Track Core Web Vitals
import { getCLS, getFID, getLCP, getFCP, getTTFB } from 'web-vitals';
// Track Core Web Vitals (web-vitals v4 API)
import { onCLS, onINP, onLCP, onFCP, onTTFB } from 'web-vitals';
getCLS(console.log); // Cumulative Layout Shift
getFID(console.log); // First Input Delay
getLCP(console.log); // Largest Contentful Paint
getFCP(console.log); // First Contentful Paint
getTTFB(console.log); // Time to First Byte
onCLS(console.log); // Cumulative Layout Shift
onINP(console.log); // Interaction to Next Paint
onLCP(console.log); // Largest Contentful Paint
onFCP(console.log); // First Contentful Paint
onTTFB(console.log); // Time to First Byte
```
## 性能报告模板
@@ -384,7 +384,7 @@ getTTFB(console.log); // Time to First Byte
| 指标 | 当前值 | 目标值 | 状态 |
|--------|---------|--------|--------|
| LCP | X.X秒 | < 2.5秒 | 通过: |
| FID | XX毫秒 | < 100毫秒 | 通过: |
| INP | XX毫秒 | < 200毫秒 | 通过: |
| CLS | X.XX | < 0.1 | 警告: |
## 关键问题
+2 -2
View File
@@ -14,7 +14,7 @@
* 编排多智能体工作流
* 复杂的编码任务
**Opus 4.5** (最深的推理能力):
**Opus 4.6** (最深的推理能力):
* 复杂的架构决策
* 最高级别的推理需求
@@ -43,7 +43,7 @@
* **切换**Option+T (macOS) / Alt+T (Windows/Linux)
* **配置**:在 `~/.claude/settings.json` 中设置 `alwaysThinkingEnabled`
* **预算上限**`export MAX_THINKING_TOKENS=10000`
* **预算上限**`export MAX_THINKING_TOKENS=10000`bash)或 `$env:MAX_THINKING_TOKENS = "10000"`PowerShell
* **详细模式**:Ctrl+O 查看思考输出
对于需要深度推理的复杂任务:
+2 -2
View File
@@ -17,10 +17,10 @@ paths:
const apiKey = "sk-proj-xxxxx"
// ALWAYS: Environment variables
const apiKey = process.env.OPENAI_API_KEY
const apiKey = process.env.API_KEY
if (!apiKey) {
throw new Error('OPENAI_API_KEY not configured')
throw new Error('API_KEY not configured')
}
```
+2 -1
View File
@@ -400,8 +400,9 @@ export async function searchMarkets(
import { useMemo, useCallback } from 'react'
// PASS: GOOD: Memoize expensive computations
// Copy before sorting - Array.prototype.sort mutates in place
const sortedMarkets = useMemo(() => {
return markets.sort((a, b) => b.volume - a.volume)
return [...markets].sort((a, b) => b.volume - a.volume)
}, [markets])
// PASS: GOOD: Memoize callbacks
+21 -7
View File
@@ -169,28 +169,41 @@ export function useQuery<T>(
const [error, setError] = useState<Error | null>(null)
const [loading, setLoading] = useState(false)
// Keep the latest fetcher/options in refs so refetch stays referentially
// stable even when callers pass inline functions and object literals.
// Without this, every render creates a new refetch, and the effect below
// re-runs after each state update - an infinite fetch loop.
const fetcherRef = useRef(fetcher)
const optionsRef = useRef(options)
useEffect(() => {
fetcherRef.current = fetcher
optionsRef.current = options
})
const refetch = useCallback(async () => {
setLoading(true)
setError(null)
try {
const result = await fetcher()
const result = await fetcherRef.current()
setData(result)
options?.onSuccess?.(result)
optionsRef.current?.onSuccess?.(result)
} catch (err) {
const error = err as Error
setError(error)
options?.onError?.(error)
optionsRef.current?.onError?.(error)
} finally {
setLoading(false)
}
}, [fetcher, options])
}, [])
const enabled = options?.enabled !== false
useEffect(() => {
if (options?.enabled !== false) {
if (enabled) {
refetch()
}
}, [key, refetch, options?.enabled])
}, [key, enabled, refetch])
return { data, error, loading, refetch }
}
@@ -295,8 +308,9 @@ export function useMarkets() {
```typescript
// PASS: useMemo for expensive computations
// Copy before sorting - Array.prototype.sort mutates in place
const sortedMarkets = useMemo(() => {
return markets.sort((a, b) => b.volume - a.volume)
return [...markets].sort((a, b) => b.volume - a.volume)
}, [markets])
// PASS: useCallback for functions passed to children
+2 -2
View File
@@ -57,14 +57,14 @@ Python 倾向于使用异常处理而非检查条件。
```python
# Good: EAFP style
def get_value(dictionary: dict, key: str) -> Any:
def get_value(dictionary: dict, key: str, default_value: Any = None) -> Any:
try:
return dictionary[key]
except KeyError:
return default_value
# Bad: LBYL (Look Before You Leap) style
def get_value(dictionary: dict, key: str) -> Any:
def get_value(dictionary: dict, key: str, default_value: Any = None) -> Any:
if key in dictionary:
return dictionary[key]
else: