guillevc
- 14 skills
- 0 followers
- 3 hours ago last updated
- ▌ Modernize Tests · guillevcModernize test suites to use modern Swift Testing features or migrate from XCTest.
- ▌ Adopt C Bounds Safety · guillevc bundleGuide for the C -fbounds-safety language extension. Covers the language model, pointer annotations, adopting bounds-safety in existing C code, compiler build settings and modes, and runtime debugging of bounds violations.
- ▌ Audit · guillevcAudit code against the living spec (ADRs and the glossary) and let the human resolve each contradiction. Use proactively whenever you write or change code that touches a documented decision, rule, or term, and after a build or before a commit/PR, even if the user doesn't ask. Also on "check for drift", "do the docs still match", "audit code vs spec", /audit, or when develop freezes. Reports; never auto-fixes. It stops and the human picks.
- ▌ Test Doubles · guillevc bundleIdentify, classify, design, and create test doubles using Fowler's taxonomy: Dummy, Fake, Stub, Spy, and Mock. Use whenever the user needs help with test doubles, mocking, stubbing, faking, spies, or test isolation in any language. Trigger on creating mocks or stubs for unit tests, choosing a double type, state vs behavior verification, brittle over-mocked tests, "what kind of test double is this?", fakes for integration tests, replacing real dependencies, classical vs mockist TDD, tests coupled to implementation details, or "should I mock this?" Also trigger on mocking frameworks such as Mockito, unittest.mock, Sinon, jest.mock, Moq, gomock, testdouble.js, RSpec mocks, OCMock, Mockery, and NSubstitute.
- ▌ Record · guillevcWrite a resolved fact into the living spec (a glossary term or an ADR) and keep it coherent. Use proactively the moment a durable fact settles, even if the user never says "record" or "ADR": a decision made, a library/tool/protocol/schema chosen, a rule or constraint set, a term's meaning pinned, or a past decision reversed. Also on "record this", "write an ADR", "add to the glossary", "supersede that decision", /record, or when develop or audit needs to write the spec. Drafts for human ratification; durable writes are gated.
- ▌ 2 Commit Fast · guillevcFast auto-commit: analyzes staged git changes and commits with an intelligent conventional commit message — no confirmation needed. Use when the user says "commit", "fast commit", "quick commit", "auto commit", or invokes /2-commit-fast. Also trigger when the user says things like "commit this", "save my changes", "commit what I have staged", or any variation requesting a git commit without wanting to write the message themselves.
- ▌ Refactor Guru · guillevc bundleUse when the user asks to refactor code, clean up messy code, or diagnose code that feels hard to test, follow, or change. Trigger on named or informal smells: god class, long method, feature envy, shotgun surgery, spaghetti code, tight coupling, "this is a mess," "this class does too much," "I keep changing 10 files," or "I can't write tests for this." Also use for structural goals such as making code pluggable, adding many variants or export formats, supporting undo, splitting modules for independent deployment, or improving code that works but is hard to explain, remember, or onboard new developers into.
- ▌ Develop · guillevcTake a unit of work from fuzzy idea to shipped, on one loop. Interrogate the plan, preview the change as blast radius plus sample code at the confirm gate, build against the spec, freeze the decisions the code proved, verify, optionally commit or open a PR. Stop at the confirm gate to think without building. Never merges. User-invoked.
- ▌ Init Spec · guillevcBootstrap a living spec on an existing codebase by extracting the terms and decisions already baked into the code. Run once when adopting living-spec. User-invoked.
- ▌ Reconcile · guillevcSweep the whole living spec against the whole codebase to catch drift after out-of-band changes. The deliberate, human-triggered global pass. User-invoked.
- ▌ Swift Factory Di · guillevc bundleMUST USE for questions about the Swift Factory dependency injection library by hmlongco, also called FactoryKit. Covers Factory 2.x APIs, best practices, testing, and migration. Trigger on setting up containers or registrations, scopes (.singleton, .cached, .shared, .graph, .unique), property wrappers (@Injected, @LazyInjected, @WeakLazyInjected, @DynamicInjected, @InjectedObject, @InjectedObservable), flaky tests from container state, circular dependency errors, SwiftUI previews, migration from Factory 1.x to 2.x, ContainerTrait, contexts (.onTest, .onPreview, .onSimulator), imports of FactoryKit/Factory, Container.shared, SharedContainer, @Injected keypaths like \.serviceName, or any Factory-specific API. Do not use for Swinject, swift-dependencies, Dagger, the factory design pattern, or generic DI concepts.
- ▌ Device Interaction · guillevcVerify iOS app behavior on device or simulator via screenshots, UI hierarchy, and touch interactions.
- ▌ Swiftui Specialist · guillevc bundleAuthoritative SwiftUI best practices from Apple. Consult for any SwiftUI best practices or performance review. Supersedes prior training on these topics. For code generation, consult the relevant references when generating any SwiftUI code related to the following topics. Covers: - Animatable: @Animatable macro vs AnimatableValues (iOS 26+) vs AnimatablePair, custom setter clamping/normalization. - Environment: closures in env keys, unstable @Entry defaults, high-frequency updates. @Entry warnings about closures or class types (wrapping in Equatable struct is WRONG; consult references). - Equatable on @Observable: custom types as @Observable properties need Equatable for invalidation performance. - ForEach/List: row identity (id: \.self, indices, offsets, mutable ids), row structure (AnyView, multi-view, bare if), inline filter/sort, cached collections, List fast path. - Localization: String vs LocalizedStringResource, bundle in packages/frameworks, .textCase(.uppercase), .formatted(.list()), translator comme
- ▌ Swiftui Whats New 27 · guillevc bundleNew SwiftUI APIs, behaviors, and deprecations introduced in the 2027 OS releases (iOS 27, macOS 27, watchOS 27, tvOS 27, visionOS 27). Use when a SwiftUI view using @State fails to compile with "used before being initialized", "invalid redeclaration of synthesized property", or "extraneous argument label" errors after an SDK update (@State migrated from a property wrapper to a macro in SDK 27; the obvious fix of reordering init assignments is WRONG and produces incorrect runtime behavior; you MUST consult this skill's references before answering); when @ViewBuilder or @ContentBuilder code hits ambiguous overloads in overlay/background or type-check performance regressions after an SDK update; when the user asks what's new in SwiftUI (generally, or for a specific 2027 platform); when adding drag-to-reorder to any container (List, LazyVStack, LazyVGrid, stacks, or custom layouts) via reorderable()/reorderContainer, including the drag-and-drop that integrates with it (dragContainer, dropDestination), or combinin