What problem does it solve? Contributing to the @civitas-cerebrum/element-interactions package without breaking its architecture is hard: the package enforces strict invariants (no raw selectors, no raw Playwright Locator calls in user tests, 100% API coverage, no mocked tests), and contributors often cannot tell whether a gap is an API gap, a structural gap, or already fixed upstream. This Skill encodes the full contribution methodology so changes land in the right layer without violating design contracts. ## Core Features & Use Cases - Architecture and decision tree: Explains the two-package split (element-interactions vs. element-repository), layer responsibilities, and a five-step decision tree for where a new API belongs (Element interface, ExpectMatchers, Steps, ElementAction, or BaseFixture). - Hard rules and invariants: Enforces argument order (elementName, pageName), async-everywhere, presence-detection on actions, causally meaningful test assertions, no mocked tests, and mandatory harness hooks for every new methodology rule. - Issue and PR workflow: Mandates duplicate-prevention checks (searching open/closed issues, diffing against origin/main, verifying published dependency versions) and Reported-by attribution for issue-driven commits. - Use Case: A user asks to add a missing matcher to the Steps API. The Skill routes the change to ExpectMatchers, requires a real end-to-end test against the Vue test app with a non-tautological assertion, and requires a harness hook if any SKILL.md rule is strengthened. ## Quick Start Ask the agent to extend the Steps API with a new assertion for the element-interactions package and follow the contribution protocol.