{"id":"84f82189-c77d-4a71-acf3-bdeb73cf102f","shortId":"W5aSnW","kind":"skill","title":"brownfield-drift","tagline":"Enforces architecture boundaries defined in PLAN.md. Use when a PR crosses module/service boundaries, when the dev asks \"are we following the architecture?\", or as a scheduled architecture health check. Not for querying what a module does — use brownfield-chat for that.","description":"## When to use\n- Dev asks \"are we following the architecture?\" or \"is this a valid change?\"\n- PR touches files near module boundaries or service interfaces\n- Weekly architecture health check\n- Any cross-service import was just added\n\n## When NOT to use\n- \"What does module X do?\" → use **brownfield-chat**\n- \"What breaks if I change X?\" → use **brownfield-chat**\n- Graph coverage is low on a file → use **brownfield-fix (it fills gaps before editing)**\n- No PLAN.md exists — drift requires machine-readable boundaries in PLAN.md\n\n## What to do\n1. Run `wednesday-skills drift` via Bash tool\n2. Report violations with:\n   - The specific edge that violates the rule\n   - The commit that introduced it (when available)\n   - The suggested fix per PLAN.md intent\n3. For PR reviews: run `wednesday-skills drift --since <base-commit>` to only report new violations\n4. For a single rule: `wednesday-skills drift --rule <rule-name>`\n\n## Adding constraints to PLAN.md\nIf the project has no constraints block, add one to PLAN.md:\n\n```json\n{\n  \"boundaries\": [\n    {\n      \"rule\": \"frontend-never-imports-db\",\n      \"description\": \"Frontend components must never import DB layer directly\",\n      \"from\": \"src/app/**\",\n      \"to\": \"src/lib/db/**\",\n      \"type\": \"forbidden\"\n    },\n    {\n      \"rule\": \"no-circular-deps\",\n      \"description\": \"No circular dependencies anywhere\",\n      \"scope\": \"**\",\n      \"type\": \"no-cycle\"\n    }\n  ]\n}\n```\n\n## Violation types\n| Type | What it catches |\n|------|----------------|\n| `forbidden` | Import from A → B that should never exist |\n| `ownership` | Logic pattern appearing outside its designated owner |\n| `no-direct-import` | Direct import between services that should use API |\n| `no-cycle` | Circular dependency between modules |\n\n## Never\n- Auto-fix boundary violations — always ask the dev first\n- Flag existing violations on a PR that did not introduce them (use `--since`)\n- Run on projects without machine-readable PLAN.md constraints\n- Report the same violation twice in one review session\n\n## CLI reference\n```bash\nwednesday-skills drift                              # full check\nwednesday-skills drift --rule frontend-never-imports-db  # single rule\nwednesday-skills drift --since abc1234              # new drift only (for PR review)\n```","tags":["brownfield","drift","agent","skills","wednesday-solutions","agent-skills","ai-agent-skills","ai-skills","claude-code","copilot","cursor","frontend-skills"],"capabilities":["skill","source-wednesday-solutions","skill-brownfield-drift","topic-agent-skills","topic-ai-agent-skills","topic-ai-skills","topic-claude-code","topic-copilot","topic-cursor","topic-frontend-skills","topic-vibe-coding","topic-vibe-coding-skills"],"categories":["ai-agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/wednesday-solutions/ai-agent-skills/brownfield-drift","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add wednesday-solutions/ai-agent-skills","source_repo":"https://github.com/wednesday-solutions/ai-agent-skills","install_from":"skills.sh"}},"qualityScore":"0.524","qualityRationale":"deterministic score 0.52 from registry signals: · indexed on github topic:agent-skills · 148 github stars · SKILL.md body (2,275 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T12:54:44.299Z","embedding":null,"createdAt":"2026-04-18T22:09:36.032Z","updatedAt":"2026-05-02T12:54:44.299Z","lastSeenAt":"2026-05-02T12:54:44.299Z","tsv":"'1':136 '2':145 '3':169 '4':184 'abc1234':357 'ad':82,194 'add':205 'alway':295 'anywher':241 'api':281 'appear':265 'architectur':5,25,30,55,72 'ask':20,50,296 'auto':291 'auto-fix':290 'avail':162 'b':257 'bash':143,333 'block':204 'boundari':6,16,67,130,210,293 'break':97 'brownfield':2,42,94,104,115 'brownfield-chat':41,93,103 'brownfield-drift':1 'brownfield-fix':114 'catch':252 'chang':61,100 'chat':43,95,105 'check':32,74,339 'circular':235,239,285 'cli':331 'commit':157 'compon':219 'constraint':195,203,321 'coverag':107 'cross':14,77 'cross-servic':76 'cycl':246,284 'db':216,223,349 'defin':7 'dep':236 'depend':240,286 'descript':217,237 'design':268 'dev':19,49,298 'direct':225,272,274 'drift':3,125,141,177,192,337,343,355,359 'edg':151 'edit':121 'enforc':4 'exist':124,261,301 'file':64,112 'fill':118 'first':299 'fix':116,165,292 'flag':300 'follow':23,53 'forbidden':231,253 'frontend':213,218,346 'frontend-never-imports-db':212,345 'full':338 'gap':119 'graph':106 'health':31,73 'import':79,215,222,254,273,275,348 'intent':168 'interfac':70 'introduc':159,309 'json':209 'layer':224 'logic':263 'low':109 'machin':128,318 'machine-read':127,317 'modul':38,66,89,288 'module/service':15 'must':220 'near':65 'never':214,221,260,289,347 'new':182,358 'no-circular-dep':233 'no-cycl':244,282 'no-direct-import':270 'one':206,328 'outsid':266 'owner':269 'ownership':262 'pattern':264 'per':166 'plan.md':9,123,132,167,197,208,320 'pr':13,62,171,305,362 'project':200,315 'queri':35 'readabl':129,319 'refer':332 'report':146,181,322 'requir':126 'review':172,329,363 'rule':155,188,193,211,232,344,351 'run':137,173,313 'schedul':29 'scope':242 'servic':69,78,277 'session':330 'sinc':178,312,356 'singl':187,350 'skill':140,176,191,336,342,354 'skill-brownfield-drift' 'source-wednesday-solutions' 'specif':150 'src/app':227 'src/lib/db':229 'suggest':164 'tool':144 'topic-agent-skills' 'topic-ai-agent-skills' 'topic-ai-skills' 'topic-claude-code' 'topic-copilot' 'topic-cursor' 'topic-frontend-skills' 'topic-vibe-coding' 'topic-vibe-coding-skills' 'touch':63 'twice':326 'type':230,243,248,249 'use':10,40,48,86,92,102,113,280,311 'valid':60 'via':142 'violat':147,153,183,247,294,302,325 'wednesday':139,175,190,335,341,353 'wednesday-skil':138,174,189,334,340,352 'week':71 'without':316 'x':90,101","prices":[{"id":"3d539407-4332-408b-b941-52f5c3c3e93c","listingId":"84f82189-c77d-4a71-acf3-bdeb73cf102f","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"wednesday-solutions","category":"ai-agent-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:09:36.032Z"}],"sources":[{"listingId":"84f82189-c77d-4a71-acf3-bdeb73cf102f","source":"github","sourceId":"wednesday-solutions/ai-agent-skills/brownfield-drift","sourceUrl":"https://github.com/wednesday-solutions/ai-agent-skills/tree/main/skills/brownfield-drift","isPrimary":false,"firstSeenAt":"2026-04-18T22:09:36.032Z","lastSeenAt":"2026-05-02T12:54:44.299Z"}],"details":{"listingId":"84f82189-c77d-4a71-acf3-bdeb73cf102f","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"wednesday-solutions","slug":"brownfield-drift","github":{"repo":"wednesday-solutions/ai-agent-skills","stars":148,"topics":["agent-skills","ai-agent-skills","ai-skills","claude-code","copilot","cursor","frontend-skills","product-engineering-skills","vibe-coding","vibe-coding-skills"],"license":"mit","html_url":"https://github.com/wednesday-solutions/ai-agent-skills","pushed_at":"2026-04-24T12:57:49Z","description":"Pre-configured agent skills for Vibe Coded projects. These skills provide AI coding assistants (Claude Code, Cursor, etc.) with specific guidelines for code quality and design standards.","skill_md_sha":"76ebfcfab42ec2e740462edf42ef53809daedc44","skill_md_path":"skills/brownfield-drift/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/wednesday-solutions/ai-agent-skills/tree/main/skills/brownfield-drift"},"layout":"multi","source":"github","category":"ai-agent-skills","frontmatter":{"name":"brownfield-drift","description":"Enforces architecture boundaries defined in PLAN.md. Use when a PR crosses module/service boundaries, when the dev asks \"are we following the architecture?\", or as a scheduled architecture health check. Not for querying what a module does — use brownfield-chat for that."},"skills_sh_url":"https://skills.sh/wednesday-solutions/ai-agent-skills/brownfield-drift"},"updatedAt":"2026-05-02T12:54:44.299Z"}}