skills/golem-powers/yash/SKILL.md
Push through dependency bugs — PR upstream instead of working around them. When you hit a bug in a dependency, don't patch around it. Fork it, fix it, PR upstream, use patch-package as a bridge. Triggers on: dependency bug, workaround, monkey-patch, 'works but hacky', upstream fix, fork and fix, patch-package, 'known issue in library'. NOT for: application-level bugs (fix them directly), configuration issues (just configure correctly), feature requests to libraries (use the issue tracker).
npx skillsauth add etanhey/golems yashInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
"Yash" (יש) = "there is" / "push through" — when there's a bug in a dependency, there IS a fix. Go get it.
When you encounter a bug in a dependency, your DEFAULT response is to fix it upstream — not work around it.
The workaround is the easy path. It's also technical debt that compounds:
Hit a dependency bug
│
├── Is this a known issue with an open PR?
│ └── YES → Review the PR, test it, comment "+1 tested on [your env]"
│ Use patch-package to apply the PR's diff locally
│
├── Is this a clear bug with no existing fix?
│ └── YES → Fork, fix, PR upstream
│ Use patch-package as a temporary bridge
│
├── Is this a design limitation, not a bug?
│ └── YES → Open an issue describing the use case
│ Workaround is acceptable here (document WHY)
│
└── Is the project abandoned (no commits in 6+ months)?
└── YES → Fork permanently, publish under @golems scope
OR find an actively maintained alternative
Before blaming the library:
node_modules/ or the repoIf it's YOUR bug, fix YOUR code. Yash only applies to genuine dependency bugs.
# Fork via GitHub
gh repo fork <owner>/<repo> --clone
# Create a fix branch
cd <repo>
git checkout -b fix/<description>
# Fix the bug
# Write a test that fails before your fix and passes after
# Commit with a clear message referencing the issue
# Push and create PR
git push -u origin fix/<description>
gh pr create --title "fix: <description>" --body "Fixes #<issue>
## What
<one-line description of the bug>
## Why
<what breaks for users, with minimal repro>
## How
<what the fix does and why this approach>
## Test
<how to verify the fix>"
While waiting for the PR to merge:
# Install patch-package if not already present
bun add -D patch-package
# Make your fix directly in node_modules/<package>
# Then create the patch
npx patch-package <package-name>
# This creates patches/<package-name>+<version>.patch
# Commit the patch file
git add patches/
git commit -m "fix: patch <package> for <bug> (upstream PR: <url>)"
Add to package.json:
{
"scripts": {
"postinstall": "patch-package"
}
}
# Store in BrainLayer for tracking
brain_store(
content: "Upstream PR: <url>. Bug: <description>. Local patch: patches/<name>+<version>.patch. Remove patch when PR merges and package updates.",
tags: ["yash", "upstream-pr", "<package-name>"],
importance: 6
)
When the upstream PR merges:
bun update <package>chore: remove <package> patch — upstream fix merged (<PR url>)You just made open source better. Every user of that library benefits from your fix.
Not every dependency issue deserves a PR. Workarounds are fine when:
| Scenario | Why workaround is OK | |----------|---------------------| | Design limitation, not a bug | The library works as intended | | One-line config fix | Not worth a fork for a config issue | | You need the fix in <1 hour | PR the fix AND apply the workaround | | Abandoned project | Fork permanently instead |
Even when you workaround, document it:
// WORKAROUND: <library> doesn't support X (see <issue-url>)
// Remove when <library> v<next> ships with fix
// Upstream issue: <url>
| Anti-Pattern | Why It's Bad | Yash Alternative | |-------------|-------------|------------------| | Silence the error | Hides the bug from everyone | Fix the root cause | | Copy-paste the source file | Diverges on every update | Fork + patch-package | | "It works on my machine" | Others will hit it | Reproduce + PR | | Wait for someone else to fix | Could wait forever | Be the someone | | Downgrade to older version | Misses security fixes | Fix forward |
/pr-loop — Use for the upstream PR lifecycle (branch → test → PR → review → merge)/coderabbit — Red team your fix before submitting upstream/pr-loop step 5 — Atomic commits: one for the patch-package bridge, one for the upstream PR# Check if a package has known issues
gh issue list -R <owner>/<repo> --search "<your bug>"
# Fork and clone in one command
gh repo fork <owner>/<repo> --clone --remote
# Create patch from node_modules changes
npx patch-package <package-name>
# Track upstream PR status
gh pr view <PR-url> --json state,reviews,mergedAt
tools
The human-eval UX contract for Phoenix views: turn-by-turn scrollable replay (not a scorecard), hide-but-copyable IDs, collapsed thinking, identity chips, tool filters, tiny frozen starter datasets, mark-wrong-in-thread, mobile-first. Use when: building or reviewing ANY Phoenix/eval view, annotation UI, session replay, or human-grading surface. Triggers: phoenix view, eval UI, annotation view, session replay, human eval UX, grading interface. NOT for: Phoenix data pipelines/ingest (capture scripts have their own specs).
tools
macOS systems specialist — AppKit NSPanel architecture, launchd services, socket activation, MCP bridge resilience, syspolicyd, and high-frequency SwiftUI dashboards. Use when building menu-bar apps, LaunchAgents, debugging syspolicyd/Gatekeeper/TCC, resilient UDS/MCP bridges, or SwiftUI dashboards at 10Hz+.
development
Bulk LLM-judging protocol for fleet-dispatched verdict runs (KG cluster, eval harness). Use when: dispatching or running judge workers (J1/J2/RT), planning bulk-apply from verdict JSONL, or triaging evidence_degraded outputs. Triggers: judge fleet, bulk judge, R3 verdicts, kg-judge, RT gate, evidence_degraded. NOT for: single-item code review, Phoenix view UX (use phoenix-human-view), or non-judge eval pipelines.
development
Quiet-down protocol for sprint close: when the fleet wraps, delete ALL polling crons and monitors, send ONE final dashboard + ONE message, then go SILENT. Use when: fleet wraps, all workers done, overnight queue exhausted, sprint close, Etan asleep/away with nothing approved left. Triggers: fleet wrap, wrap the fleet, stand down, going quiet, sprint close. NOT for: mid-sprint monitoring (keep your loops), spawning a successor (use /session-handoff first).