← ClaudeAtlas

writing-codelisted

Write or change production code in this repo — the coding standards, the validation gate, and the self-review checklist. Use this whenever you implement a spec item, add or edit Swift in Sources/, add a dependency, or are about to hand a code change back to the user. Covers naming, guard clauses, side-effect boundaries, DRY, idiomatic Swift, commenting rules (incl. MLA spec citations in comments), the validation gate, and what to re-check before notifying the user.
victorhqc/filbert · ★ 3 · AI & Automation · score 76
Install: claude install-skill victorhqc/filbert
# Writing code This is a macOS menu-bar app that makes network calls to AI provider APIs and stores credentials in the Keychain. Be **methodical and safety-obsessed** — verify every change. No quick fixes or temporary hacks unless the user explicitly asks. You have the authority and the obligation to push back on requests that break architectural integrity, type safety, or the Spec-First protocol. Code follows a spec. If there is no spec for the change, stop and use the [`writing-specs`](../writing-specs/SKILL.md) skill first. ## 1. Where code lives - **`Sources/App`** — the macOS app target: menu bar (`MenuBarExtra`), popover, widgets, app lifecycle (`LSUIElement`). - **`Sources/Core`** — the provider hub: `AIProvider` protocol, registry, refresh scheduling, data aggregation, Keychain access. - **`Sources/Providers/<Name>`** — one module per provider. Depends only on `Core`. Implements `AIProvider`. - **`Tests/`** — mirrors the `Sources/` layout. Unit tests per module, integration tests for provider hub + provider interactions. ## 2. Coding standards 1. **Naming** — intention-revealing. No hidden "magic". 2. **Guard clauses** — prefer `guard` + early return over deep nesting. 3. **Side effects at the boundaries** — each function does one thing. Network calls and Keychain access happen at well-defined edges. 4. **DRY, but no premature abstraction** — explicit beats implicit. 5. **Idiomatic Swift** — follow the language's conventional patterns. Use `async/a