--- alwaysApply: true --- # Periscope Cursor Engineering Rules Mandatory for every Cursor agent working on Periscope. This section is copied from `docs/development/CODING_CONSTITUTION.md` and must not contradict that master. ## 0. Coding constitution - You are implementing Periscope (schematic/PCB validation), not a generic scaffold and not Faradworks/PinScope under a new name. - Prefer original Periscope source in `periscope/src` over copying PinScope. Overlay stamps, `cp` of `periscope/dependency/**`, and near-identical pastes do **not** create architectural or AGPL independence. - Keep `periscope/dependency/` until a rewritten slice is proven. Never empty-delete inherited files to “look native.” - Auto-place / pcbnew write-back is out of scope unless Michele explicitly asks. - Never touch live auth users, password hashes, or `AUTH_JWT_SECRET` unless Michele explicitly orders a credential change in that turn. - Never swallow exceptions with bare `except: continue`. Log or re-raise. - Match existing public contracts (Pydantic models, REST shapes, finding engine). Frontend types stay in sync with backend models. - AGPL-3.0 of the fork stays visible. Do not relicense. Do not detach the GitHub fork unless Michele and counsel say so. - Gateway-owned seams stay stub-shaped (`billing_hook.get_billing()`, frontend auth/billing pass-throughs). Do not import Clerk/Stripe SDKs outside those seams. - Skills stay local (`skills/*/SKILL.md` + `validate.py` on DeepSeek). Do not run `scripts/upload_skills.py`. - Default LLM path is DeepSeek. Do not route live stages to Anthropic Console.