Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions .claude/rules/libs.md

This file was deleted.

132 changes: 41 additions & 91 deletions .claude/rules/tests.md

Large diffs are not rendered by default.

88 changes: 33 additions & 55 deletions .claude/rules/theme.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion .claude/rules/ui-lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ paths:
- A coupled edit is one whole-value write through a model method (`HighlightRule.selectingOperator(_:)` is the shape), never two field writes through a `Binding`: the second resolves against the same stale value and the first is lost.
- Never put `.accessibilityIdentifier` on a SwiftUI container alone: it replaces every descendant's identifier in that hosting tree. Pair it with `.accessibilityElement(children: .contain)` first. How a UI test queries a leaf control is in `.claude/rules/ui-tests.md`.
- Keep focus, selection, undo, the responder chain and IME working after the change, and keep UI state on the main actor (no `Task.detached` to escape it).
- SwiftUI targets macOS 13. An API from a later release needs `if #available` and a fallback.
- An API newer than the deployment target (`apple/AGENTS.md`) needs `if #available` and a fallback.
- A view that is AppKit on purpose says why in its type comment (`FavoritesOutlineView`: a SwiftUI `List` cannot draw an emphasized selection under a bare `NSHostingController`). Read it before converting.
2 changes: 1 addition & 1 deletion apple/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ apple/scripts/generate-project.sh [both|macos|ios] # after a project.yml or Con

- `verify.sh --help` lists every step. When each runs: `.claude/skills/fix-issue/references/platform-apple.md`, Verify. Verdicts, test names and red CI checks: `.claude/skills/fix-issue/references/verification-apple.md`.
- A raw `xcodebuild` runs in `apple/` with `-skipPackagePluginValidation`, plus `-testPlan Unit` or `UI` for macOS tests (`CONTRIBUTING.md`, Tests).
- Never add `-parallel-testing-enabled`, `-test-iterations` or `-retry-tests-on-failure` to a macOS run, except to reproduce a flake: the plans own those. iOS tests pass `-parallel-testing-enabled NO`.
- Never add `-parallel-testing-enabled`, `-test-iterations` or `-retry-tests-on-failure` to a macOS run, except to reproduce a flake: the plans own those. iOS test flags: `.claude/rules/tests.md`, Plans.
- Never run `swiftlint --fix`. Formatting SwiftLint leaves open: `CONTRIBUTING.md`, Code style.
- Releases: `RELEASING.md` and the `release` skill.

Expand Down
2 changes: 1 addition & 1 deletion apple/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ This file covers the macOS and iOS apps in `apple/`, and every command in it run

| Software | Version | Notes |
|---|---|---|
| Xcode | 27.1 | What CI selects in `.github/actions/setup-xcode`. Code that needs the macOS 27 SDK sits behind `SDK_MACOS_27` (`Configs/Base.xcconfig`) so Xcode 26 can still build, though nothing on CI builds with 26. Newer SDK symbols sit behind `#available`; the deployment target is macOS 13.0 |
| Xcode | 27.1 | What CI selects in `.github/actions/setup-xcode`. Code that needs the macOS 27 SDK sits behind `SDK_MACOS_27` (`Configs/Base.xcconfig`) so Xcode 26 can still build, though nothing on CI builds with 26. Symbols newer than the deployment target ([`AGENTS.md`](AGENTS.md)) sit behind `#available` |
| XcodeGen | 2.46.0 exactly | The generated project differs between versions, so `scripts/generate-project.sh` warns on any other |
| SwiftLint | 0.65.1 | The version CI runs |
| GitHub CLI | any | Optional: `scripts/download-libs.sh` falls back to `curl` |
Expand Down
2 changes: 1 addition & 1 deletion apple/RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ gh workflow run withdraw.yml --ref v<newest tag> -f version=X.Y.Z

## Static libraries

The `.a` files under `Libs/` and the xcframeworks under `Libs/ios/` live on the immutable `libs-<n>` GitHub release that `Libs/release` names, not in git; `scripts/download-libs.sh` fetches it and verifies every file against the checksums at `HEAD`. `scripts/publish-libs.sh` takes every library you rebuilt, added or removed, verifies the others against `HEAD`, creates the next `libs-<n>` and rewrites `Libs/release` and both checksum files (`--dry-run` only prints). A published `libs-<n>` never changes: a fix is the next `<n>`. Each library is built by a `build-*.sh` in `scripts/` or `scripts/ios/`.
The `.a` files under `Libs/` and the xcframeworks under `Libs/ios/` live on the immutable `libs-<n>` GitHub release that `Libs/release` names, not in git; `scripts/download-libs.sh` fetches it and verifies every file against the checksums at `HEAD`. `scripts/publish-libs.sh` takes every library you rebuilt, added or removed, verifies the others against `HEAD`, creates the next `libs-<n>` and rewrites `Libs/release` and both checksum files, which nothing else edits (`--dry-run` only prints). A published `libs-<n>` never changes: a fix is the next `<n>`, and `libs-v1` stays for older commits. Each library is built by a `build-*.sh` in `scripts/` or `scripts/ios/`.

```bash
apple/scripts/publish-libs.sh libmongoc_arm64.a libmongoc_x86_64.a libmongoc_universal.a libmongoc.a
Expand Down
Loading