بنقرة واحدة
claude-skills
يحتوي claude-skills على 114 من skills المجمعة من blas1n، مع تغطية مهنية على مستوى المستودع وصفحات skill داخل الموقع.
Skills في هذا المستودع
urllib.parse.urlparse로 URL 파싱 후 netloc 재조합 시 발생하는 두 침묵 버그 — userinfo 대소문자 소실과 cross-scheme 기본 포트 오삭제.
BSVibe verification runs in a fresh /work clone of main for EVERY turn — files from failed prior turns are gone. Commit within the CURRENT turn or they vanish.
When you depend on a 3rd-party GitHub-hosted data artifact (CSV/JSON/schema/config) via `try: fetch new; except: use HARDCODED_DEFAULT_URL`, the "safety fallback" masks upstream file renames. Symptom — after upstream restructures naming, the auto-discovery quietly returns nothing (regex mismatch = empty result), the code falls through to the frozen default URL, that URL 404s, and the caller catches the exception and degrades to `whitelist=set()` / empty result / None — silently. No hard error, but every downstream measurement built on that data reshapes. bloasis PR59 caught this after 4 weeks of `whitelist=0` had already re-run the mention extractor with distorted sample sizes across per-bucket tables.
A CLI tool (claude/gh/aws/codex…) invoked by a launchd/systemd daemon fails auth with 401 while the identical command works in your interactive shell — because the daemon's security session can't read the OS keychain and silently falls back to a stale on-disk credential. Diagnose from the daemon context, not your shell.
After `pnpm install` in a git worktree, vitest/jest can discover a test file from a SECOND path — pnpm hardlinks the whole project (test/ included) into `~/Library/pnpm/store/v<n>/projects/<hash>/`, and the glob picks up that out-of-root mirror where the `@/` alias / vite root doesn't apply → bogus "Cannot find package '@/...'" resolution errors. Clearing the stale store-project mirror fixes it.
React/JS diff-render libraries (@git-diff-view/react, react-diff-view, diff2html) that take a `hunks`/diff-string input silently render NOTHING when fed a bare `@@ … @@` hunk — they need the full `diff --git` / `
When a host can't reach one service (e.g. github.com) but reaches others, do NOT assume a remote block / firewall / IP ban. The error TYPE discriminates: an immediate "Can't assign requested address" (EADDRNOTAVAIL) is a LOCAL socket failure (the packet never left), almost always ephemeral-port / TIME_WAIT exhaustion — not a remote block (which times out or RSTs). Check TIME_WAIT count vs the ephemeral port range first.
A delegation brief or handoff memory that says "X is missing / unsolved, go build it" is a point-in-time snapshot that may be stale. Verify the claimed-undone work actually is undone against current code/state BEFORE building — especially before destructive or large work. Skipping this risks redundant rework or destroying already-shipped value.
OAuth refresh tokens (GitHub, Notion, Slack, …) are SINGLE-USE — calling `provider.refresh(refresh_token)` from a debug REPL or one-shot script without persisting the returned new tokens to DB silently invalidates the credential. The new tokens vanish at process exit, the OLD refresh in DB is now rejected by the provider, every subsequent dispatch fails with `bad_refresh_token` / 401. Only a fresh OAuth flow recovers. Treat refresh as a database-side transaction, not a function call.
Embedding an OAuth/PAT token into an `https://user:pass@host/...` URL via f-string concatenation (`f"https://x-access-token:{token}@{rest}"`) breaks under TWO recurring conditions — (1) the token contains URL-reserved chars (`:` `/` `@` `?` `#` `%`) which the URL parser misreads, and (2) a re-auth on the same checkout (clone-time set-url + a later push-time set-url) STACKS userinfo segments into `user:pass@user:pass@host`. A naive `split("@", 1)` only collapses ONE stack; production needs `rsplit("@", 1)` (or `urllib.parse.urlsplit` + explicit netloc rewrite). Same fix shape across git push, docker registry login, MQTT URIs.
워커/오케스트레이터가 코딩 에이전트(opencode/codex/claude-code 같은 HTTP 또는 subprocess 어댑터)를 호출할 때 per-task workspace 를 명시 안 하면, 에이전트는 부모 프로세스의 cwd 를 상속해 호스트 source repo 에 silent edit 을 누적함. 워커가 별도 temp clone 에서 `git status` 를 돌려도 변경 0 으로 보고됨. 진짜 변경은 호스트 working tree 에 있음.
SQLite + SQLAlchemy `DateTime(timezone=True)` round-trip silently strips tzinfo. Downstream `.astimezone()` on the naive datetime then uses the SYSTEM tz, not UTC — silently shifts time-of-day classification by the local UTC offset (e.g. ~13h on a KST host, ~9h on JST, ~5h on EST). Symptom: bucket/window/cutoff classifiers (session hours, after-hours/overnight splits, daily aggregates) misclassify in production. Tests pass on the dev machine that happens to match the writer's intended tz; bug surfaces on any other host.
pgvector 임베딩을 SQLAlchemy raw text() SQL로 바인드할 때 Python list를 그대로 넘기면 asyncpg가 "expected str, got list"로 거부한다. 텍스트형 "[...]" + CAST(:p AS vector) 필요. SQLite 단위테스트로는 못 잡고 실제 PG+실제 임베딩 e2e에서만 표면화.
외부 CLI/API(claude code, codex, opencode 등)를 subprocess/HTTP로 감싼 wrapper는 그 CLI가 버전업하면 인자·요청바디·출력파싱이 silent하게 drift한다. 경계를 mock한 테스트는 아무 형식이나 받아주므로 wrapper가 죽어도 green. 실제 CLI의 --help / OpenAPI /doc / published SDK 타입으로 계약을 검증하라.
Introducing a second CLASS of a resource (e.g. provider=executor ModelAccounts) silently breaks every resolver that assumed "exactly one active X" — they fall back to a degraded path instead of erroring, so the system still "works" but a whole feature quietly stops triggering. Audit count-based resolvers before adding a new kind.
A StaticPool :memory: SQLite test engine forces ALL sessions onto ONE shared connection. Tests that drive two sessions concurrently (e.g. an orchestrator + a simulated worker) then contend on that single connection, serializing unpredictably under CI load — a system_error/timeout flake that never reproduces locally. Use a file-backed SQLite + WAL so each session gets its own connection, like prod.
Minimal base images (python:slim, debian:slim, alpine, distroless) omit common CLI tools like git, ssh, rsync. Python code that subprocess-calls them passes all unit tests on dev hosts and fails only at runtime in the prod container.
uvloop's subprocess transport raises FileNotFoundError when cwd is a relative path that stock asyncio accepts. tmp_path-based unit tests hide it because pytest fixtures are always absolute.
process-wide singletons that bind async resources at app/worker startup leak Futures across per-test event loops under pytest-asyncio — guard the wire-up with PYTEST_CURRENT_TEST, conftest reset alone is NOT enough
When a capable agent first declares a STRONG plan/contract/approach then a retry or continuation produces a WEAKER one, suspect the execution environment couldn't run the strong version — not model laziness or a prompting gap.
Putting agent/CI execution inside a Docker-in-Docker sandbox — the bind-mount, named-volume namespace, volume ownership, and persisted-path traps that pass unit tests but break on a real DinD or a prod cutover.
A git-based deploy poller that `git fetch`es in one directory but `git merge`s in another silently no-ops — and rebuilds stale code forever — when the two directories don't share a ref store. Happens when one project's working dir is a standalone clone instead of a worktree of the shared bare repo the poller fetches into.
Alembic migration adding a Postgres ENUM column emits CREATE TYPE twice (DuplicateObjectError) even with sa.Enum(create_type=False) — must use postgresql.ENUM(create_type=False) for the column-side reference.
Setting `temperature=0` for a tool-calling agent loop on a smaller local LLM (qwen3-coder:30b, Llama-3 30B-class, glm-4.7-flash 29.9B etc.) tightens variance BUT cuts mean accuracy hard — sometimes 5–10×. Greedy decoding locks the model into a wrong first-token path that subsequent rounds can't escape. The same sampling that creates run-to-run noise is also what gives the loop room to self-correct.
When designing or reviewing an acceptance gate (M0 quality gate, CI pass/fail, deploy guard, eval harness), make the gate compare *change attributable to the work* against a baseline — not just the post-state. If a no-op execution can pass the gate using only pre-existing fixtures, the gate measures correlation, not causation, and the cheapest path to "pass" will be the no-op.
When a BSVibe product needs LLM access — BSGateway-routed or direct opt-out — wrap `bsvibe_llm.LlmClient`, never import litellm directly. And when you have two dispatch paths (or anticipate a third), define one Protocol so callers depend on the interface, not a Union of concretes.
When a reproduced backtest / benchmark differs from a stored result, the first hypothesis should be "did I match the execution protocol?" not "did the code regress?". Walk-forward params (train/test/step, start/end) are typically CLI args — not part of config_hash. Fingerprint via stored fold count / sample count before suspecting code or data drift.
When building multi-turn agent / tool-calling systems on local/smaller LLMs (Qwen3, gpt-oss, Llama family), never rely on prompt compliance for safety-critical operations. Add backend safety nets — auto-bootstrap missing state, recover misnamed tool calls from arg shape, derive verification from workspace state. Triggers — local Ollama agent stalls on turn 1, hits round-cap with no deliverable, "MAY do X" directives fire only sometimes, model emits one tool name for everything.
Runtime LLM watchdogs that re-prompt the model to fix a missing/wrong output field have a hard ceiling — beyond a certain model capability threshold, polite re-nudging cannot coerce the LLM, no matter how strong the nudge. The reliable safety net is server-side synthesis (backend fills the missing field from observed run state), not more backend re-nudging.
Two reproducible traps when running Ollama via LiteLLM in streaming mode with multi-turn tool calls — concatenated arguments under the same streaming index, and OOM mid-stream masquerading as "generator didn't stop after athrow()" cleanup error.
/orchestrate-worktree로 ralph-loop 시작 전 (1) worktree base가 stale local main이 아닌지, (2) 본 PR 표면을 점유한 최근 머지 PR이 origin에 없는지 검증하지 않으면 8000+ lines 작업 후 add/add collision으로 폐기 위험.
When list_X comes from a JSON cache (UUID→str) but related rows come fresh from the DB (still UUID), dict[record["id"]] lookups silently miss. Symptom — first request after deploy works, all later requests behave as if related rows are empty.
Vercel Hobby plan caps deploys at 100/day. Multi-project monorepos (prod + demo + … per app) burn through it in a few PR rounds. Disable PR previews via vercel.json ignoreCommand — ignored builds don't count.
When a new feature introduces strict-naming sub-trees under an existing top-level directory that legacy code already writes to, recursive scans crash on legacy files unless the scan filters to canonical patterns first. Local unit tests pass on empty fixtures; CI fails the moment a real seeded vault/repo exists.
When adding a configurable knob to BSage, decide between Settings (env-loaded, immutable per-process) vs RuntimeConfig (mutable, persisted, user-editable via SettingsView). Choosing wrong means env vars only — users can't tune it without redeploy.
When designing new layer/feature spec for an established codebase, survey existing ABCs/Protocols/dual-impl patterns BEFORE locking spec invariants. Skip the survey and you'll invent parallel abstractions that need rework.
Before concluding "X doesn't happen" in an integrated system, verify the pipeline that would produce X is actually running. Measuring zero is trivially easy when the producer is off.
Agent systems with active (planning) and passive (execution) modes can dual-dispatch the same agent, causing it to plan instead of execute
AI-generated code cleanup — deletion-first approach, regression-safe. Removes unnecessary abstractions, verbose comments, and over-engineering.
SQLite-only unit tests cannot catch PostgreSQL-only migration bugs. Add a fresh-PG smoke test that runs `alembic upgrade head` against an empty container so DROP DEFAULT, enum DDL listener collisions, and dependent-object errors fail at PR time instead of on the next dev's first bootstrap.