You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Cut ~640 lines of redundant content across 39 references (9,720 → 9,080) after a line-by-line audit against the writing-skills standard. Three findings drove it. swift-style was 46% baseline Swift — Apple's own API Design Guidelines, protocol-oriented design, the Optional/throws/Result/precondition severity ladder, some vs any, newtype, exhaustive switch — all content a model already applies without being told; it now carries only the codebase's own conventions and the traps (struct memberwise-init exclusion, phantom types, typed-throws default, private-member placement, MARK rules, error type placement). Second, most files closed with a Checklist / Summary / Common Pitfalls / Warning Signs table that reformatted the body as a symptom lookup — the same rule at double cost, drifting the moment one copy is edited; those are gone or trimmed to the items appearing nowhere else, while genuine pre-ship gates (makefile's Adaptation Checklist, file-structure's Generation Checklist) survive. Third, several files repeated a rule three to five times across Overview, bullets, Hard Rules, and checklist — composer alone stated "build the UI hierarchy in the screen type" five times; each rule now lives once, in the section carrying its mechanism, with pointers elsewhere.
Removed duplicate code examples that differed only in type names — file-structure's UIView and cell examples repeated the ProfileViewController constraint block verbatim when the lesson is section ordering, list-composition re-printed the whole Swift 6 CellController instead of its diff, uibutton-configuration's dynamic-font block was a ternary away from the block above it (and its replacement prose now states the mechanism the code never explained: patching a live Configuration leaks stale attributes from the previous state).
Trimmed incident retelling to design rules — zoomable-image-preview's TOCropViewController fact reproduced a third-party library's ObjC internals and a GitHub issue number for a one-sentence rule; ios-26-behavior-changes framed its "What Did NOT Change" list as "assumed to be iOS 26 changes during this session's debugging"; implicit-animations merged a 7-step diagnostic ladder and a 3-rule investigation list that each stated the community-fix caveat separately.
Added three authoring rules to AGENTS.md so the pattern does not return: say each rule once (closing sections may only hold items appearing nowhere else, or a gate that sequences body rules into an order the body does not impose), assume baseline competence (the test is "would the output differ if this line were deleted?", not "is this true?"), and a second code block differing only in type names is the first one paid for twice.
Cut the skill description from 1,037 to 930 characters, back under the 1,024 budget. It is always-on cost — every session pays for it whether the skill loads or not — and the trigger list carried four platform names the opening sentence already states, plus Chinese synonyms (畫面/頁面, 模組化/拆模組) that route identically.
Added modular-architecture reference — an operational guide (not a pattern catalog) for modularizing an app: a gate against premature splitting (single-module is correct until team growth or concrete symptoms), the five-layer target blueprint (App→Features→Workflows→Services→Core) with two compiler-enforceable iron rules (same-layer modules never import each other; constructor injection wired at the App root makes cycles uncompilable), a four-question placement procedure whose no-instant-hit outcome is "stop and re-examine the taxonomy" rather than shoehorn, and recipes for the two canonical feature-module failures — shared business logic (extract a Services module, lift cross-service flows into Workflows; never a Shared grab-bag) and cross-feature screen reuse (thin API module with a screen factory protocol; the one-off shim protocol + AnyView bridge is the anti-pattern it replaces). Also covers leaf-first monolith migration order, an anti-pattern recognition table, a module physical-form decision (generated projects: one module = one Project, multi-target projects reserved for facets of the same module — targets are compiler boundaries, projects are ownership boundaries; plain projects: local SPM packages for merge-friendliness; hand-maintained framework targets only for what SPM can't express), and the static/dynamic/mergeable linkage decision with the profile-don't-dogma rule (dynamic maps wholesale in pre-main and skips dead-code stripping, so it can be bigger than static — observed 200 kB dynamic vs 15 kB static for the same dependency). Distilled from Jacob Bartlett's modular-architecture series, the RevenueCat SDK's layering, and project-owner conventions.