v1.0.0 beta.5 - #459
Conversation
Decode ownerRecordName, zoneType, and deleted on zone responses so change feeds surface tombstones and shared-zone owners round-trip correctly. Co-authored-by: Cursor <cursoragent@cursor.com>
Exercise ownerRecordName, zoneType, and deleted tombstones live via listZones, lookupZones, and fetchDatabaseChanges on the private database pipeline. Co-authored-by: Cursor <cursoragent@cursor.com>
After re-syncing from upstream mistkit branches, reapply the monorepo overlay so Examples/* build against the parent MistKit checkout. Co-authored-by: Cursor <cursoragent@cursor.com>
subrepo: subdir: "Examples/BushelCloud" merged: "cf22ab7" upstream: origin: "git@github.com:brightdigit/BushelCloud.git" branch: "mistkit" commit: "cf22ab7" git-subrepo: version: "0.4.9" origin: "https://github.com/Homebrew/brew" commit: "4710c526b3"
subrepo: subdir: "Examples/CelestraCloud" merged: "11609b9" upstream: origin: "git@github.com:brightdigit/CelestraCloud.git" branch: "mistkit" commit: "11609b9" git-subrepo: version: "0.4.9" origin: "https://github.com/Homebrew/brew" commit: "4710c526b3"
Replace String? with DEFAULT_ZONE/REGULAR_CUSTOM_ZONE cases so unrecognized wire values surface as ConversionError during zone lifting. Co-authored-by: Cursor <cursoragent@cursor.com>
Model zone payload fields: ownerRecordName, zoneType, deleted (#444)
…nfig keys (#455) Extracts the CloudKit credential configuration glue shared by MistKit's server-side applications into its own package, and converges BushelCloud, CelestraCloud and MistDemo on typed configuration keys. ## MistKitConfiguration Lives at `Packages/MistKitConfiguration` as a subrepo of brightdigit/MistKitConfiguration, published as `1.0.0-beta.1`. Three layers, separated so that *reading* configuration cannot fail: raw `CloudKitConfiguration` → `validated()` → `ValidatedCloudKitConfiguration`, whose throwing initializer runs the key-ID and PEM validators. There is no way to hold the validated type with credentials that skipped format validation, which is what lets the examples delete their hand-rolled checks. ## Examples All three rewired onto the package; local validators, `ConfigValueReading` and duplicated CloudKit config types removed (~180 lines that were character-for-character identical between BushelCloud and CelestraCloud). App-specific error mapping stays with each app, since each already owns its own wording and key names. ## Dependencies ConfigKeyKit is pinned to `1.0.0-beta.3`, which carries ConfigKeyKit#8 (boolean resolution via a bool primitive) — the fix the branch pin was tracking. ## Note `Packages/MistKitConfiguration` is scaffolding for the beta.5 line. It must be removed in the `v1.0.0-beta.5` → `main` release PR: shipping it would be circular, since its `.gitrepo` tracks a branch pinning that same unreleased release. Downstream consumers use the published tag instead. codecov/patch and codecov/project fail as expected — this PR deletes validator suites whose tests moved to the MistKitConfiguration repo.
Thread zone selection through web CRUD/assets, library uploadAssets, and a live sharee round-trip phase so shared-database writes carry ownerRecordName correctly. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Important Review skippedToo many files! This PR contains 329 files, which is 229 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. Usage-priced reviews support at most 300 files. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Team Run ID: ⛔ Files ignored due to path filters (3)
📒 Files selected for processing (329)
You can disable this status message by setting the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #459 +/- ##
==========================================
+ Coverage 81.74% 86.54% +4.80%
==========================================
Files 196 199 +3
Lines 4755 4861 +106
==========================================
+ Hits 3887 4207 +320
+ Misses 868 654 -214
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Review: v1.0.0 beta.5 release PRThis is a large aggregate PR (236 files, +8691/-2546), but the actual 🔴 Release-process:
|
Review notesThis PR is the Blocking
Spot-checked and looks solid
Not reviewedGiven the size, I did not do a line-by-line pass over the BushelCloud/CelestraCloud subrepo syncs, the MistDemo web/CLI surface, or the |
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* Verify asset downloads against fileChecksum (#466). Co-authored-by: Cursor <cursoragent@cursor.com> * Fix watchOS asset download tests and dogfood CDN verify in MistDemo. Replace MockURLProtocol with an internal fetch closure so download tests do not hit the network on watchOS, and add DownloadAssetPhase to exercise Asset.download() against live CDN bytes. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
MistDemo requires tools-version 6.4, so pin the musl build to nightly-6.4.x-noble and the matching 6.4.x-branch Static Linux SDK. Co-authored-by: Cursor <cursoragent@cursor.com>
Review of #459 (v1.0.0-beta.5 release PR)This PR aggregates ~19 already-individually-reviewed commits (#444, #451, #454, #460-#469, #473, plus release tooling) into a 331-file / +11.5k / -5.3k diff. Reviewing every line of a release-aggregation PR isn't practical or that useful - the individual PRs already went through review. I focused this pass on the actual library surface: Sources/MistKit/, Sources/MistKitOpenAPI/, and openapi.yaml (36 files, ~630 added lines), plus the release-process/CI plumbing, since that's where a mistake would actually ship to consumers. Code quality / correctness - looks solid
Security
Minor items worth a look before tagging
Scope noteI could not pull the full 331-file diff through gh pr diff/gh api (GitHub's diff endpoint rejects PRs over 300 files, and this sandbox restricts gh api/git fetch), so I reconstructed the Sources/Tests/openapi diff locally via git diff against origin/main and reviewed CI workflow changes the same way. I did not review the Examples/BushelCloud, Examples/CelestraCloud, .claude/, or .agents/ doc/memory churn in detail - those are largely subrepo syncs, doc reorganization, and agent-memory housekeeping rather than library code. |
The "Verify static linkage" step hardcoded .build/x86_64-swift-linux-musl/release/mistdemo, which the nightly 6.4 toolchain does not populate — the build succeeded but the step failed with "No such file or directory", blocking the integration job. Ask SwiftPM for the directory with --show-bin-path instead, print diagnostics (ls of the bin dir plus a find over .build) when the binary is still missing, and stage the verified binary at a fixed path so upload-artifact no longer duplicates the layout assumption. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The Unreleased section covered only two of the branch's changes. Add the missing public API additions: web auth token rotation (#462, #463), the zone payload metadata zoneType/deleted plus the ownerRecordName decoding fix (#444), the zoneID: parameter on createRecord/updateRecord/ deleteRecord/uploadAssets (#454), the new asset-download CloudKitError cases (#466), the MistKitConfiguration extraction (#455), the MistDemo zone-aware work (#438, #453, #454), and the release runbook plus code review follow-ups (#460, #461). Also move the Reference.Action VALIDATE entry (#464) out of the 1.0.0-beta.4 section: that tag is already published and does not contain the commit, so the change ships in this release, not the previous one. Per the release runbook, new entries are a flat bullet list with no category subsections. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Scripts/release.sh verify-tag asserts a '### v<tag>' roadmap section exists in the tagged tree; there was none for beta.5, so the release check would have failed. Also check off #146 (custom CloudKit zone support for queries) under beta.4. The issue closed 2026-08-28 and shipped in that release, but it was still listed unchecked under Backlog / Post-beta. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Remove the checksum verification #473 added: fileChecksum cannot be recomputed client-side, so the check rejected every genuine asset. The value is not a SHA-256 of the plaintext. Verified against a live container, it decodes to 21 bytes -- a 0x01 version prefix plus a 20-byte digest -- so it could never equal a 32-byte SHA-256, and Asset.download() therefore threw on every real CloudKit asset. The MistDemo Integration job caught this; the unit tests did not, because they built fixtures with the same formula they asserted against. It is minted server-side: MistKit reads it verbatim from the CDN upload receipt, the receipt embeds a fragment of it, and Apple's archived reference labels the field only [SIGNATURE] with no algorithm. It is deterministic and content-addressed -- identical bytes yield identical checksums, it doubles as the content address in downloadURL, and it is what rereferenceAssets echoes back -- so it is an identity/caching token, not an integrity check. ~1,500 candidate constructions over three byte-exact samples produced zero matches; see .claude/docs/research/asset-filechecksum.md. Delete matches(data:), assetChecksumMismatch, missingAssetChecksum and AssetChecksumTests rather than deprecating them: the API cannot do what its name says, and beta is the time to remove it. download(using:) now returns bytes unverified; MistDemo checks the declared size instead, which is client-checkable and catches truncation. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ReviewThis PR (#459, Stale
|
No description provided.