Skip to content

ci(android): cap API level at 34 and cover Swift 6.3 + 6.4-nightly - #131

Merged
leogdion merged 1 commit into
brightdigit-com-260621from
claude/syndikit-ci-cd-failure-23sliv
Jul 22, 2026
Merged

leogdion merged 1 commit into
brightdigit-com-260621from
claude/syndikit-ci-cd-failure-23sliv

Conversation

@leogdion

@leogdion leogdion commented Jul 22, 2026 •

Copy link
Copy Markdown
Member

The Swift Android SDK's bundled NDK sysroot for API 36 does not ship
crtbegin_dynamic.o / crtend_android.o, which the Swift toolchain still
asks ld.lld to link. That broke the Android leg of CI at API 36 (see
android/ndk#1391).

Rewrite the build-android matrix as a cross product of {Swift 6.3,
Swift 6.4-nightly} x {API 28, API 34}, moving the nightly's SDK URL and
ID onto the swift entry so the 6.3 rows leave them empty.

Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_014j6vCW2JwTi3P9Sm6q2q4E

Summary by CodeRabbit

  • Build and Compatibility
    • Updated Android build coverage to include Swift 6.3 and a Swift 6.4 development snapshot.
    • Adjusted supported Android API levels to 28 and 34.
    • Improved build matrix behavior so one failed configuration does not stop other builds.
  • Testing
    • Updated Android coverage reporting labels to accurately identify Swift build variants.

@leogdion
leogdion changed the base branch from main to brightdigit-com-260621 July 22, 2026 15:56
@coderabbitai

coderabbitai Bot commented Jul 22, 2026 •

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 7d315232-5c70-4068-b6f2-8a211783df5d

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The Android CI matrix now includes updated Swift versions, a Swift 6.4.x development snapshot, Android API levels 28 and 34, and labeled Codecov flags. Matrix jobs no longer fail fast.

Changes

Android CI configuration

Layer / File(s) Summary
Android build matrix and coverage flags
.github/workflows/syndikit.yml
The build-android matrix adds Swift version metadata and a development snapshot SDK, updates Android API levels, disables fail-fast, and uses Swift labels for Codecov flags.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main CI change: capping Android API level at 34 and adding Swift 6.3 plus 6.4-nightly coverage.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/syndikit-ci-cd-failure-23sliv

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@leogdion
leogdion force-pushed the claude/syndikit-ci-cd-failure-23sliv branch from 31243b0 to a3db98d Compare July 22, 2026 15:58
@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review: ci(android): cap API level at 34 and cover Swift 6.3 + 6.4-nightly

Overview

Reworks the build-android job matrix in .github/workflows/syndikit.yml from {6.1, 6.2, 6.3} x {28, 33, 36} to {6.3, 6.4-nightly} x {28, 34}, dropping API 36 to work around a missing crtbegin_dynamic.o/crtend_android.o in the bundled NDK sysroot (android/ndk#1391), and adding fail-fast: false plus per-entry sdk-url/sdk-id overrides so the 6.4 nightly snapshot can be pulled in without affecting the 6.3 row.

Code quality & style

  • The added comment explaining why API level is capped (linking the upstream NDK issue) is exactly the kind of non-obvious rationale CLAUDE.md asks for -- good call.
  • Renaming the Codecov flag component from matrix.swift.version to matrix.swift.label is a nice touch -- using the raw nightly snapshot string (6.4.x-DEVELOPMENT-SNAPSHOT-...) as a flag would have been unwieldy/noisy in Codecov.
  • The per-row sdk-url/sdk-id pattern mirrors the existing build-windows job's per-entry version/build matrix fields, so it's consistent with conventions already in this file.
  • fail-fast: false is a good addition given the matrix now mixes a stable release with a nightly snapshot (a nightly failure shouldn't cancel the 6.3 rows) -- though it makes this job inconsistent with build-ubuntu/build-macos/build-windows, none of which set fail-fast. If mixing stable/nightly toolchains becomes a pattern elsewhere, worth applying consistently (or documenting why Android is the exception).

Potential issues / risks

  • Reliance on empty-string fallback in brightdigit/swift-build: for the 6.3 matrix entry, sdk-url/sdk-id keys aren't defined, so matrix.swift.sdk-url / matrix.swift.sdk-id resolve to empty strings when interpolated into the with: block. This only works correctly if the composite action treats an empty-string input the same as "unset" and falls back to its built-in default SDK. Worth double-checking that action's input handling (or just confirming green CI on the 6.3 rows) rather than assuming it.
  • Hard-pinned nightly snapshot: 6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a is a dated snapshot from the swift-6.4.x-branch. Nightly toolchain retention is limited, so this URL/ID will eventually go stale and start 404ing -- this pin will need periodic bumping (unlike the 6.3 row, which uses a stable, long-lived release). Might be worth a tracking issue/reminder, or checking whether the tooling supports "latest nightly" resolution instead of a hard-coded date.
  • Coverage reduction: dropping Swift 6.1/6.2 from the Android matrix (previously tested) in favor of 6.3/6.4-nightly is a bigger scope change than "cap API level" alone -- reasonable given the PR's goal, but worth calling out explicitly in the description since it changes what's actually verified on Android, not just which API levels.
  • CLAUDE.md is now further out of date: the CI section says "Android: API levels 28, 33, 34 with Swift 6.1" -- already stale before this PR (the workflow tested 6.1/6.2/6.3 x 28/33/36), and now more so (6.3/6.4-nightly x 28/34). Not a blocker, but worth a follow-up doc update so CLAUDE.md stays a reliable reference for future contributors/agents.

Test coverage

Pure CI-configuration change -- no app/library test coverage implications. The real verification is the workflow run itself; worth confirming the build-android job goes green on both the 6.3 and 6.4-nightly rows (especially the 6.3 row's SDK default fallback mentioned above) before merging.

Security considerations

No security concerns -- the nightly artifact is still fetched from the trusted download.swift.org host, same as the existing pattern elsewhere in the workflow.


Overall this is a well-scoped, well-justified CI fix with a clear upstream reference for the root cause. Main follow-ups worth considering: confirm the empty-string SDK override behaves as expected, and note that the nightly pin will need periodic maintenance.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/syndikit.yml:
- Around line 306-309: Update the nightly Android matrix entries around the
Swift 6.4 snapshot and the corresponding swift-build invocation to define a
non-empty android-sdk-target whenever android-sdk-url is configured, then
forward that matrix value through swift-build alongside the existing SDK URL and
SDK ID inputs.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 38c14ec4-64ef-4e72-967b-f4049b44472d

📥 Commits

Reviewing files that changed from the base of the PR and between 746262a and 31243b0.

📒 Files selected for processing (1)
  • .github/workflows/syndikit.yml

Comment thread .github/workflows/syndikit.yml Outdated
Comment on lines +306 to +309
- version: 6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a
label: "6.4"
sdk-url: https://download.swift.org/swift-6.4.x-branch/android-sdk/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android.artifactbundle.tar.gz
sdk-id: swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

curl -fsSL https://raw.githubusercontent.com/brightdigit/swift-build/v1/action.yml \
  | grep -A12 -B4 'android-sdk-target'

curl -fsSL https://raw.githubusercontent.com/skiptools/swift-android-action/main/action.yml \
  | grep -A8 -B4 "custom-sdk-id.*installed-sdk"

curl -fsSI \
  "https://download.swift.org/swift-6.4.x-branch/android-sdk/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a/swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android.artifactbundle.tar.gz"

Repository: brightdigit/SyndiKit

Length of output: 4046


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

# Inspect the relevant workflow sections with line numbers.
sed -n '290,345p' .github/workflows/syndikit.yml | cat -n

# Pull the downstream action contract sections that mention Android SDK inputs.
curl -fsSL https://raw.githubusercontent.com/brightdigit/swift-build/v1/action.yml \
  | sed -n '1,220p' | grep -n -A6 -B4 'android-sdk-target\|custom-sdk-url\|installed-sdk\|custom-sdk-id'

# Also inspect the setup logic that consumes these inputs.
curl -fsSL https://raw.githubusercontent.com/brightdigit/swift-build/v1/action.yml \
  | grep -n -A12 -B6 'installed-sdk: \${{'

Repository: brightdigit/SyndiKit

Length of output: 232


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

python3 - <<'PY'
import re, urllib.request

url = "https://raw.githubusercontent.com/brightdigit/swift-build/v1/action.yml"
text = urllib.request.urlopen(url, timeout=20).read().decode()
for key in ["android-sdk-target", "custom-sdk-url", "custom-sdk-id", "installed-sdk"]:
    print(f"\n## {key}")
    for m in re.finditer(key, text):
        start = max(0, m.start()-180)
        end = min(len(text), m.end()+260)
        print(text[start:end].replace("\r",""))
        print("----")
        break
PY

Repository: brightdigit/SyndiKit

Length of output: 2444


Pass android-sdk-target through the nightly Android builds
The custom SDK inputs require a non-empty target whenever android-sdk-url is set, so add the target to the matrix entry and forward it to swift-build at lines 306-309 and 333-334.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/syndikit.yml around lines 306 - 309, Update the nightly
Android matrix entries around the Swift 6.4 snapshot and the corresponding
swift-build invocation to define a non-empty android-sdk-target whenever
android-sdk-url is configured, then forward that matrix value through
swift-build alongside the existing SDK URL and SDK ID inputs.

@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review

This is a clean, well-scoped fix for the Android CI matrix — the NDK API 36 crtbegin_dynamic.o/crtend_android.o issue is documented with a link, and collapsing the three explicit include rows into a swift × android-api-level cross product removes a fair bit of duplication while keeping the SDK URL/ID cleanly scoped to the 6.4 entry.

One behavior change worth double-checking, though:

android-run-tests is now unconditionally true for all 4 matrix legs. In the old matrix, only the 6.3 / API 28 row set android-run-tests: true — the other two rows (6.3/36 and the 6.4-nightly/36) left it unset, i.e. build-only (per the old comment: "Swift 6.4 (nightly snapshot SDK bundle, api 34, build only)"). This PR now runs the full test suite (with emulator boot) on all 4 combinations, including both API levels of the Swift 6.4 nightly snapshot. That's a meaningful jump from 1 test-running leg to 4, and it means CI correctness now depends on the nightly toolchain passing the test suite, not just building — which is a more flake-prone bar than what was there before. Neither the PR description nor the commit message mentions this as an intended change (they only talk about the API-level fix), so it may be an incidental side effect of the matrix restructuring rather than a deliberate decision. Worth confirming: if build-only was intentional for the nightly leg to avoid emulator flakiness dragging down full-matrix CI, it'd be worth keeping android-run-tests scoped per-row (e.g. only true for the 6.3 entries, or only for one API level) rather than blanket enabling it.

Minor / docs drift: CLAUDE.md's CI/CD section still says "Android: Swift 6.3 (API 28/36) and Swift 6.4 nightly snapshot (API 36)" — after this change the API levels are 28/34, not 28/36. Since the repo convention documents CI structure there, it'd be good to update that line alongside this PR (or as an immediate follow-up) so it doesn't go stale.

No code/logic changes, no test coverage implications beyond CI itself, and no security concerns — this is a workflow-only diff.

The Swift Android SDK's bundled NDK sysroot for API 36 does not ship
crtbegin_dynamic.o / crtend_android.o, which the Swift toolchain still
asks ld.lld to link. That broke the Android leg of CI at API 36 (see
android/ndk#1391).

Rewrite the build-android matrix as a cross product of {Swift 6.3,
Swift 6.4-nightly} x {API 28, API 34}, moving the nightly's SDK URL and
ID onto the swift entry so the 6.3 rows leave them empty.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014j6vCW2JwTi3P9Sm6q2q4E
@leogdion
leogdion force-pushed the claude/syndikit-ci-cd-failure-23sliv branch from a3db98d to 16ca705 Compare July 22, 2026 16:45
@leogdion
leogdion merged commit e76b2d3 into v1.0.0 Jul 22, 2026
16 of 22 checks passed
@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review: ci(android) — cap API level at 34, cover Swift 6.3 + 6.4-nightly

Clean, well-motivated refactor. The move from a hand-enumerated include: list to a swift object list × android-api-level: [28, 34] cross product is the right structural fix, and pinning the SDK URL/ID onto the swift entry (rather than repeating them per row) correctly lets swift-build's blank-input handling do the work for 6.3. The inline comment explaining why API 36 is skipped (linking the upstream NDK issue) is exactly the kind of non-obvious context worth keeping in-repo.

One thing worth double-checking before merge:

android-run-tests: true is now unconditional, silently expanding test execution to 3 new legs.
In the old matrix, only the 6.3/API 28 entry set android-run-tests: true; the 6.3/API 36 and 6.4-nightly/API 36 entries omitted it (build-only). After hoisting the field out of the matrix into the shared step body (.github/workflows/SyndiKit.yml:296), it now applies to all four combinations — including both API levels on the Swift 6.4 nightly snapshot. That's a real behavior change (tests now run against a nightly toolchain, 2x over) that isn't mentioned in the PR description, which frames this purely as a matrix-shape/API-level fix. Nightly snapshots are typically the flakier leg elsewhere in this workflow (e.g. the wasm/Ubuntu nightly builds stay build-only) — was running tests against 6.4-nightly here intentional, or should it stay build-only like before to avoid new flaky-CI noise on main?

Minor: CLAUDE.md CI section is now stale.
The CI/CD section of CLAUDE.md documents Android as "Swift 6.3 (API 28/36) and Swift 6.4 nightly snapshot (API 36)". Since this PR changes the matrix shape to a 6.3/6.4 × 28/34 cross product, that line should be updated in the same PR so the doc doesn't drift from the workflow it's describing.

No functional/security concerns — this is workflow-only config, and the trailing-whitespace cleanup in the removed android-copy-files lines is a nice bonus. Nothing to test at the unit-test level here beyond an actual CI run confirming the API 36 legs are gone and the four new legs go green.

@claude

claude Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review

Clean, well-scoped change — single file, and the new cross-product matrix (swift × android-api-level) is much easier to reason about than the old include: list. The comment update clearly documents the API 36 NDK issue with a link, which is great for future maintainers.

Things worth confirming

  1. android-run-tests is now unconditionally true for all 4 combinations. Previously, only Swift 6.3 / API 28 ran tests — the other two entries (6.3/API 36 and the 6.4-nightly/API 36) were build-only (no android-run-tests key set). With the new matrix, tests now execute on all four combos, including the 6.4 nightly-snapshot toolchain and API 34. That's arguably a nice coverage improvement, but it's also a behavior change beyond "cap API level at 34" — it roughly doubles the number of test executions and adds test runs on a nightly Swift snapshot, which could introduce flakiness or added CI time that wasn't there before. Worth a sentence confirming this expansion is intentional (the PR description doesn't call it out).

  2. CLAUDE.md's CI/CD section is now stale. It documents **Android**: Swift 6.3 (API 28/36) and Swift 6.4 nightly snapshot (API 36), which no longer matches this PR's 6.3/6.4 × API 28/34 cross product. Since this file is the canonical guidance doc for the CI matrix shape, it'd be good to update it alongside this change (or as an immediate follow-up) so it doesn't drift from the actual workflow.

  3. Nested matrix property access (matrix.swift.sdk-url, matrix.swift.sdk-id, matrix.swift.label) — the file already proves hyphenated flat matrix keys work fine in GH Actions expressions (e.g. matrix.android-swift-version previously), but this is the first use of a hyphenated key nested inside an object-valued matrix entry in this workflow. Should be low-risk, but worth keeping an eye on the first CI run to confirm the 6.3 rows correctly resolve sdk-url/sdk-id to empty/blank (relying on "blank inputs are ignored by swift-build") rather than a literal null/undefined string.

Nit

The old android-copy-files: "Data/" entries had trailing whitespace that's cleaned up by this change — nice incidental fix.

No functional source changes in this PR (workflow-only), so most of code quality/test coverage/security categories don't apply here beyond the CI config itself.

@codecov

codecov Bot commented Jul 22, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 79.07%. Comparing base (516bb01) to head (16ca705).

Additional details and impacted files
@@                   Coverage Diff                   @@
##           brightdigit-com-260621     #131   +/-   ##
=======================================================
  Coverage                   79.07%   79.07%           
=======================================================
  Files                          74       74           
  Lines                        1553     1553           
=======================================================
  Hits                         1228     1228           
  Misses                        325      325           
Flag Coverage Δ
5.10 66.06% <ø> (ø)
6.0 78.30% <ø> (ø)
6.1 78.30% <ø> (ø)
6.2 78.30% <ø> (?)
6.3 78.30% <ø> (ø)
ios18.5 78.30% <ø> (ø)
jammy 79.07% <ø> (ø)
macos 78.30% <ø> (ø)
macos-15 78.30% <ø> (ø)
macos-26 78.30% <ø> (ø)
noble 79.07% <ø> (ø)
spm 79.07% <ø> (ø)
tvos18.5 78.30% <ø> (ø)
tvos26.4 78.30% <ø> (ø)
visionos2.5 78.30% <ø> (ø)
watchos11.5 78.30% <ø> (ø)
watchos26.4 78.30% <ø> (ø)
xcode-27 78.36% <ø> (+0.06%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

leogdion added a commit that referenced this pull request Jul 23, 2026
* Migrate to Swift 6.4: mise-based lint tooling, rebuilt CI, and source cleanups (#127)

* Migrate lint/style/CI configs in 6 BrightDigit subrepo packages [skip ci]

Apply the issue #54 config migration to the vendored BrightDigit libraries
(SyndiKit, TransistorPublishPlugin, Contribute, ContributeWordPress,
NPMPublishPlugin, YoutubePublishPlugin) using the MistKit/SundialKit library
config variant:

- .swiftlint.yml: strict library ruleset + no_unchecked_sendable custom rule
- .swiftformat -> .swift-format: Apple swift-format JSON
- .mise.toml: swift-format 604 (Swift 6.4-aligned), swiftlint, periphery
- Scripts/lint.sh (mise-based, replaces Mint) + Scripts/header.sh
- CI workflow -> brightdigit/swift-build@v1 (ubuntu + macos) + STRICT lint job
- Remove obsolete .hound.yml

Configs + CI only; source reformatting/headers deferred (matches main repo).
SwiftTube and Spinetail skipped (slated for OpenAPI-generator migration).
Committed in the monorepo only; no git subrepo push performed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci: trigger pipeline (config migration)

* packages CI: install curl + cache mise tools in lint job

* CI: test vendored BrightDigit packages via monorepo matrix

Add a `test-packages` matrix job to main.yaml that builds, tests, and lints
the 6 vendored BrightDigit packages in-place. In the monorepo checkout every
sibling already sits at its relative-path location, so each package resolves
with zero dependency reconstruction — replacing the per-package setup-deps CI.

- detect-changes: add `packages` paths-filter + `packages-changed` output
- remove standalone workflows + orphaned setup-deps from the 4 rel-dep
  packages (ContributeWordPress, Transistor, NPM, Youtube); their standalone
  CI was synthetic (relative deps are committed)
- keep SyndiKit + Contribute standalone CIs (genuinely standalone libraries)
- bump all GitHub Actions to latest: checkout v6, cache v5, upload-artifact
  v7, download-artifact v8, dorny/paths-filter v4 (swift-build@v1 unchanged)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Conform v1.0.0 codebase to standardized lint configs

Post-rebase cleanup after replaying the config migration onto v1.0.0:
- Fix swiftlint/swift-format violations surfaced by the stricter
  standardized configs (explicit ACLs, formatting, XCTFail messages,
  XCTUnwrap instead of force-unwraps, doc-comment corrections)
- Inline-disable intentional exceptions in source: iTunes* type names,
  RSS-spec webMaster, @unchecked Sendable fallback, large test fixtures
- Split files violating one_declaration_per_file
- Normalize license headers via Scripts/header.sh (straight quotes)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: refresh DocC catalog for v1.0.0

- Update requirements to match Package.swift (Swift 5.10 / Xcode 15.3,
  iOS 13 / watchOS 6 / tvOS 13 / macOS 10.15 deployment targets)
- Bump install snippet to from: "1.0.0"
- Fix transposed JSONFeed column in the Feedable mapping table
  (siteURL -> homePageUrl, summary -> description)
- Fix invalid Swift in code snippets (Data(contentsOf:) usage,
  missing paren in case pattern)
- Fix typos and stale LICENSE link

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Migrate lint/style/CI configs to BrightDigit template patterns (#54) (#76)

* Phase 4 — OpenAPI & dependency migration (#109)

* SyndiKit CI: use jdx/mise-action for robust lint tool bootstrap

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: add macOS + Windows nightly-6.4 CI legs across all 5 standalone repos

Extend ButtondownKit/Spinetail/SwiftTube/Contribute/SyndiKit standalone CI to
the BrightDigit multi-platform template now that a self-hosted macOS runner with
/Applications/Xcode-beta.app (Swift 6.4) is available:

- build-macos: [self-hosted, macOS] + swift-build xcode=Xcode-beta. Blocking on
  all 5. Contribute & SyndiKit migrated off macos-15; their Ubuntu + lint legs
  migrated swift:6.3-noble -> swiftlang/swift:nightly-6.4.x-noble.
- build-windows: hosted windows-2022/2025, swift.org nightly snapshot
  6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-01-a. Gated to full-matrix runs via a
  single-package configure job. continue-on-error on the OpenAPI repos +
  Contribute (unverified deps); blocking on SyndiKit.
- SyndiKit also gains build-macos-platforms (iOS/watchOS/tvOS on released
  Xcode_26.4 — not nightly 6.4).

WASM + Android deferred: no nightly 6.4 support yet. WASM is a swift-build
limitation (brightdigit/swift-build#115 — no input to override the auto-derived
-RELEASE wasm SDK URL); Android is blocked upstream (no nightly 6.4 SDK). Each
workflow documents re-adding them. Contribute WASM is permanently N/A (Yams on
the Musl/wasm SDK).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: wire WASM + Android nightly-6.4 CI legs via swift-build SDK-bundle inputs

Now that swift.org publishes nightly 6.4 SDK bundles on swift-6.4.x-branch and
brightdigit/swift-build#116 adds inputs to install caller-supplied bundles, add:

- build-wasm to ButtondownKit/Spinetail/SwiftTube/SyndiKit (NOT Contribute — Yams
  fails on the Musl/wasm SDK). Uses wasm-sdk-url + wasm-sdk-checksum pointing at the
  swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_wasm artifactbundle, with WASI
  emulation + memory flags.
- build-android to all 5 repos. Uses android-sdk-url + android-sdk-id (+ matching
  android-swift-version) for the swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android
  artifactbundle via skiptools custom-sdk-url; build-only (android-run-tests: false).

Both legs are full-matrix-gated and continue-on-error: they reference @v1 and are
inert until swift-build#116 is released and the v1 tag moved, after which they
should be confirmed green and promoted to blocking (SyndiKit first). Bump the
snapshot SDK URLs/checksums periodically.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: run all Apple-platform suites on self-hosted Xcode-beta (Swift 6.4)

Per the rule that Swift 6.4 builds use the self-hosted runners (the only macOS
Swift 6.4 toolchain is /Applications/Xcode-beta.app = Xcode 27 / Swift 6.4):

- Move SyndiKit + Contribute build-macos-platforms off hosted macos-26/Xcode_26.4
  (which is only Swift 6.2) onto [self-hosted, macOS] + Xcode-beta.
- Add build-macos-platforms (iOS/watchOS/tvOS) to ButtondownKit/Spinetail/SwiftTube
  on the same self-hosted runner — these are swift-tools-version:6.4, so hosted
  released-Xcode runners can't even parse their manifests.

All use the iOS/watchOS/tvOS 27.0 simulator runtimes present on the runner
(iPhone 17 Pro / Apple Watch Ultra 3 (49mm) / Apple TV 4K (3rd generation)),
full-matrix-gated and continue-on-error (simulator-on-nightly is the most fragile
leg; promote once green). lint now needs build-macos-platforms.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: give Windows its own (stricter) matrix tier

Three CI tiers instead of two: small set (build-ubuntu/build-macos/lint, always)
< full-matrix (macОS-platforms/wasm/android) < +Windows. configure now emits a
second output, run-windows, equal to full-matrix MINUS PRs into semver branches.
build-windows (the most expensive leg — hosted windows-2022/2025 ×2) gates on
run-windows; the rest keep full-matrix. So PRs into semver branches still exercise
the full non-Windows matrix but skip Windows.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: test against swift-build feature branch + fold build-wasm into build-ubuntu

- Point every brightdigit/swift-build@v1 reference at @sdk-url-checksum-nightly-6.4
  (PR #116) TEMPORARILY so CI exercises the new wasm-sdk-url/android-sdk-url code
  before it ships in @v1. Revert to @v1 once #116 is merged + the v1 tag moved.
- Fold build-wasm into build-ubuntu as a continue-on-error step in the same
  nightly-6.4.x-noble container (one spin-up; runs on every push/PR now, not just
  full-matrix). Removed the standalone build-wasm job from ButtondownKit/Spinetail/
  SwiftTube/SyndiKit (Contribute has no wasm — Yams on Musl/wasm).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: only run push CI on main (drop integration branch from push trigger)

Push events now trigger only on main (+ release tags). Feature/integration
branches like brightdigit-com-260406 get CI through their PRs instead of a
redundant branch-push run.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: unify the 5 CI workflows to byte-identical (except name)

- Windows is now blocking everywhere (dropped continue-on-error from build-windows
  in all 5, not just SyndiKit).
- The only per-package functional difference — the wasm step (Contribute can't
  build Yams on wasm) — is externalized to the ENABLE_WASM repo variable:
  `if: ${{ vars.ENABLE_WASM != 'false' }}`. Set ENABLE_WASM=false on Contribute.
- Normalized all comments to a shared template.

Result: the five workflow files are byte-identical except the `name:` line; the
only behavioral knob is each repo's ENABLE_WASM variable. Filed Contribute#10 to
fix Yams-on-wasm and re-enable it there.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: remove continue-on-error from all 5 CI workflows

Make the WASM step, the Apple-platforms job (iOS/watchOS/tvOS), and the
Android job blocking across all five subrepos. Tidy the now-stale
continue-on-error comment phrases.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: gate watchOS leg on ENABLE_WATCHOS (disable where failing)

watchOS-27 SDK rejects deps that infer an 8.0 deployment target (SwiftPM
#10188, not fixable in-repo). Gate the build-macos-platforms watchOS leg on a
new ENABLE_WATCHOS repo variable (mirrors ENABLE_WASM), keeping the 5 workflows
byte-identical. ENABLE_WATCHOS=false is set on ButtondownKit/SwiftTube/
Contribute/Spinetail; SyndiKit (unaffected) keeps running watchOS.

Tracked in brightdigit.com#119.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: build-ubuntu as a [standard, wasm, wasm-embedded] matrix

Mirror brightdigit/MistKit: the configure job emits ubuntu-type (gated by
ENABLE_WASM), and build-ubuntu fans out over it via fromJSON. Standard ('')
always runs; wasm + wasm-embedded run unless ENABLE_WASM=false (e.g. Yams on
Contribute). Both wasm variants share the nightly-6.4.x SDK bundle. Replaces the
single folded WASM step. Byte-identical across all 5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: make wasm/wasm-embedded legs build-only

The wasm/embedded BUILD passes (OpenAPIURLSession is guarded out on WASI), but
running the suite under WasmKit fails: Foundation resource bundles (test
Fixtures) aren't mounted in the WASI sandbox, and embedded hits OpenAPIRuntime
keypath-demangling limits at runtime. Neither is our bug. Build-only validates
wasm/embedded compilation (the goal); the standard leg still runs the full
suite + coverage. Mirrors the Android leg's build-only stance.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Add tests for uncovered EntryID/SiteCollection/media-properties branches

Covers the 9 patch-coverage gaps flagged on PR #127:
- EntryID: init(string:)/init?(_:)/description/Codable for all four cases
- SiteCollectionDirectoryBuilder: init() + directory(fromCollection:)
- PodcastEpisodeProperties.init?(rssItem:) nil branch (no enclosure)
- YouTubeIDProperties.init?(entry:) nil branch (non-YouTube Atom entry)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* CI: revert swift-build action to @v1 (temp sdk-url-checksum-nightly-6.4 branch deleted)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Align with BrightDigit v1.0.0 CI template and drop self-hosted DocC cruft

Add the template's auxiliary workflows (check-unsafe-flags, cleanup-caches,
swift-source-compat) and .swift-version. Trim the devcontainer matrix to the
supported set (stable 5.10-6.3, nightly 6.4 only; root pinned to 6.3). Remove
the now-stale Mintfile and the self-hosted DocC / XcodeGen stack (netlify.toml,
Dockerfile, .dockerignore, .htaccess, project.yml, Scripts/docc.sh,
Scripts/httpd.conf, Scripts/gh-md-toc) since docs are hosted via SPI. Refresh
.swiftlint.yml excludes and CLAUDE.md to match the mise-based 6.4 tooling.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Bump github.com/coreoffice/xmlcoder from 0.18.1 to 0.18.2

Bumps [github.com/coreoffice/xmlcoder](https://github.com/CoreOffice/XMLCoder) from 0.18.1 to 0.18.2.
- [Release notes](https://github.com/CoreOffice/XMLCoder/releases)
- [Commits](CoreOffice/XMLCoder@0.18.1...0.18.2)

---
updated-dependencies:
- dependency-name: github.com/coreoffice/xmlcoder
  dependency-version: 0.18.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Updates from brightdigit.com (#129)

* Fix remaining subrepo CI failures

* Cache lint tools and align Publish Ink pin

* Wave 0 review feedback: CI hygiene, docs & agent tooling (#130)

* Restore multi-version CI matrix and refresh devcontainers

Rebuild SyndiKit.yml around a three-tier configure matrix on GitHub-hosted
runners (no self-hosted): a single folded build-ubuntu across stable Swift
5.10-6.3 + nightly 6.4 (wasm/wasm-embedded on 6.3+6.4 only); macOS SPM on
Swift 6.3 (Xcode 26.4) + 6.4 (Xcode 27 preview runner) with the full Apple
platform matrix in the full tier; Windows and Android covering 6.3 + 6.4; and
a restored source-compat suite. Reduced runs stay lean (noble x 6.3/6.4 +
macOS SPM only).

Devcontainers: default to Swift 6.3, add 6.2/6.3/6.4 (6.4 nightly image),
remove the old 6.1/6.2 nightly folders. Refresh the stale CLAUDE.md CI section.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Keep swift-source-compat as a separate workflow

Restore the standalone .github/workflows/swift-source-compat.yml (swift:5.10/
6.0/6.1/6.2/6.3 + nightly-6.4) and drop the in-file source-compat-suite job
from SyndiKit.yml; update CLAUDE.md accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci(android): cap API level at 34 and cover Swift 6.3 + 6.4-nightly (#131)

The Swift Android SDK's bundled NDK sysroot for API 36 does not ship
crtbegin_dynamic.o / crtend_android.o, which the Swift toolchain still
asks ld.lld to link. That broke the Android leg of CI at API 36 (see
android/ndk#1391).

Rewrite the build-android matrix as a cross product of {Swift 6.3,
Swift 6.4-nightly} x {API 28, API 34}, moving the nightly's SDK URL and
ID onto the swift entry so the 6.3 rows leave them empty.


Claude-Session: https://claude.ai/code/session_014j6vCW2JwTi3P9Sm6q2q4E

Co-authored-by: Claude <noreply@anthropic.com>

* ci(macos): extract matrix JSON and bump Xcode 26.4 → 26.6

Move macOS CI matrix entries into .github/matrices/ for readability, and bump
Apple platform simulator OS versions to 26.5 on the Xcode 26 legs.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix v1.0.0 CI badge: correct workflow filename case and stray ?

The CI badge pointed at `syndikit.yml` (lowercase), but on the v1.0.0
branch the workflow file is `SyndiKit.yml` (PascalCase, matching the
other Wave 0 repos), so the badge rendered "no status". Also drop the
stray `?` in `&?branch=main`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
leogdion added a commit that referenced this pull request Jul 23, 2026
* Migrate to Swift 6.4: mise-based lint tooling, rebuilt CI, and source cleanups (#127)

* Migrate lint/style/CI configs in 6 BrightDigit subrepo packages [skip ci]

Apply the issue #54 config migration to the vendored BrightDigit libraries
(SyndiKit, TransistorPublishPlugin, Contribute, ContributeWordPress,
NPMPublishPlugin, YoutubePublishPlugin) using the MistKit/SundialKit library
config variant:

- .swiftlint.yml: strict library ruleset + no_unchecked_sendable custom rule
- .swiftformat -> .swift-format: Apple swift-format JSON
- .mise.toml: swift-format 604 (Swift 6.4-aligned), swiftlint, periphery
- Scripts/lint.sh (mise-based, replaces Mint) + Scripts/header.sh
- CI workflow -> brightdigit/swift-build@v1 (ubuntu + macos) + STRICT lint job
- Remove obsolete .hound.yml

Configs + CI only; source reformatting/headers deferred (matches main repo).
SwiftTube and Spinetail skipped (slated for OpenAPI-generator migration).
Committed in the monorepo only; no git subrepo push performed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci: trigger pipeline (config migration)

* packages CI: install curl + cache mise tools in lint job

* CI: test vendored BrightDigit packages via monorepo matrix

Add a `test-packages` matrix job to main.yaml that builds, tests, and lints
the 6 vendored BrightDigit packages in-place. In the monorepo checkout every
sibling already sits at its relative-path location, so each package resolves
with zero dependency reconstruction — replacing the per-package setup-deps CI.

- detect-changes: add `packages` paths-filter + `packages-changed` output
- remove standalone workflows + orphaned setup-deps from the 4 rel-dep
  packages (ContributeWordPress, Transistor, NPM, Youtube); their standalone
  CI was synthetic (relative deps are committed)
- keep SyndiKit + Contribute standalone CIs (genuinely standalone libraries)
- bump all GitHub Actions to latest: checkout v6, cache v5, upload-artifact
  v7, download-artifact v8, dorny/paths-filter v4 (swift-build@v1 unchanged)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Conform v1.0.0 codebase to standardized lint configs

Post-rebase cleanup after replaying the config migration onto v1.0.0:
- Fix swiftlint/swift-format violations surfaced by the stricter
  standardized configs (explicit ACLs, formatting, XCTFail messages,
  XCTUnwrap instead of force-unwraps, doc-comment corrections)
- Inline-disable intentional exceptions in source: iTunes* type names,
  RSS-spec webMaster, @unchecked Sendable fallback, large test fixtures
- Split files violating one_declaration_per_file
- Normalize license headers via Scripts/header.sh (straight quotes)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: refresh DocC catalog for v1.0.0

- Update requirements to match Package.swift (Swift 5.10 / Xcode 15.3,
  iOS 13 / watchOS 6 / tvOS 13 / macOS 10.15 deployment targets)
- Bump install snippet to from: "1.0.0"
- Fix transposed JSONFeed column in the Feedable mapping table
  (siteURL -> homePageUrl, summary -> description)
- Fix invalid Swift in code snippets (Data(contentsOf:) usage,
  missing paren in case pattern)
- Fix typos and stale LICENSE link

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Migrate lint/style/CI configs to BrightDigit template patterns (#54) (#76)

* Phase 4 — OpenAPI & dependency migration (#109)

* SyndiKit CI: use jdx/mise-action for robust lint tool bootstrap

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: add macOS + Windows nightly-6.4 CI legs across all 5 standalone repos

Extend ButtondownKit/Spinetail/SwiftTube/Contribute/SyndiKit standalone CI to
the BrightDigit multi-platform template now that a self-hosted macOS runner with
/Applications/Xcode-beta.app (Swift 6.4) is available:

- build-macos: [self-hosted, macOS] + swift-build xcode=Xcode-beta. Blocking on
  all 5. Contribute & SyndiKit migrated off macos-15; their Ubuntu + lint legs
  migrated swift:6.3-noble -> swiftlang/swift:nightly-6.4.x-noble.
- build-windows: hosted windows-2022/2025, swift.org nightly snapshot
  6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-01-a. Gated to full-matrix runs via a
  single-package configure job. continue-on-error on the OpenAPI repos +
  Contribute (unverified deps); blocking on SyndiKit.
- SyndiKit also gains build-macos-platforms (iOS/watchOS/tvOS on released
  Xcode_26.4 — not nightly 6.4).

WASM + Android deferred: no nightly 6.4 support yet. WASM is a swift-build
limitation (brightdigit/swift-build#115 — no input to override the auto-derived
-RELEASE wasm SDK URL); Android is blocked upstream (no nightly 6.4 SDK). Each
workflow documents re-adding them. Contribute WASM is permanently N/A (Yams on
the Musl/wasm SDK).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: wire WASM + Android nightly-6.4 CI legs via swift-build SDK-bundle inputs

Now that swift.org publishes nightly 6.4 SDK bundles on swift-6.4.x-branch and
brightdigit/swift-build#116 adds inputs to install caller-supplied bundles, add:

- build-wasm to ButtondownKit/Spinetail/SwiftTube/SyndiKit (NOT Contribute — Yams
  fails on the Musl/wasm SDK). Uses wasm-sdk-url + wasm-sdk-checksum pointing at the
  swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_wasm artifactbundle, with WASI
  emulation + memory flags.
- build-android to all 5 repos. Uses android-sdk-url + android-sdk-id (+ matching
  android-swift-version) for the swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android
  artifactbundle via skiptools custom-sdk-url; build-only (android-run-tests: false).

Both legs are full-matrix-gated and continue-on-error: they reference @v1 and are
inert until swift-build#116 is released and the v1 tag moved, after which they
should be confirmed green and promoted to blocking (SyndiKit first). Bump the
snapshot SDK URLs/checksums periodically.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: run all Apple-platform suites on self-hosted Xcode-beta (Swift 6.4)

Per the rule that Swift 6.4 builds use the self-hosted runners (the only macOS
Swift 6.4 toolchain is /Applications/Xcode-beta.app = Xcode 27 / Swift 6.4):

- Move SyndiKit + Contribute build-macos-platforms off hosted macos-26/Xcode_26.4
  (which is only Swift 6.2) onto [self-hosted, macOS] + Xcode-beta.
- Add build-macos-platforms (iOS/watchOS/tvOS) to ButtondownKit/Spinetail/SwiftTube
  on the same self-hosted runner — these are swift-tools-version:6.4, so hosted
  released-Xcode runners can't even parse their manifests.

All use the iOS/watchOS/tvOS 27.0 simulator runtimes present on the runner
(iPhone 17 Pro / Apple Watch Ultra 3 (49mm) / Apple TV 4K (3rd generation)),
full-matrix-gated and continue-on-error (simulator-on-nightly is the most fragile
leg; promote once green). lint now needs build-macos-platforms.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: give Windows its own (stricter) matrix tier

Three CI tiers instead of two: small set (build-ubuntu/build-macos/lint, always)
< full-matrix (macОS-platforms/wasm/android) < +Windows. configure now emits a
second output, run-windows, equal to full-matrix MINUS PRs into semver branches.
build-windows (the most expensive leg — hosted windows-2022/2025 ×2) gates on
run-windows; the rest keep full-matrix. So PRs into semver branches still exercise
the full non-Windows matrix but skip Windows.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: test against swift-build feature branch + fold build-wasm into build-ubuntu

- Point every brightdigit/swift-build@v1 reference at @sdk-url-checksum-nightly-6.4
  (PR #116) TEMPORARILY so CI exercises the new wasm-sdk-url/android-sdk-url code
  before it ships in @v1. Revert to @v1 once #116 is merged + the v1 tag moved.
- Fold build-wasm into build-ubuntu as a continue-on-error step in the same
  nightly-6.4.x-noble container (one spin-up; runs on every push/PR now, not just
  full-matrix). Removed the standalone build-wasm job from ButtondownKit/Spinetail/
  SwiftTube/SyndiKit (Contribute has no wasm — Yams on Musl/wasm).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: only run push CI on main (drop integration branch from push trigger)

Push events now trigger only on main (+ release tags). Feature/integration
branches like brightdigit-com-260406 get CI through their PRs instead of a
redundant branch-push run.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: unify the 5 CI workflows to byte-identical (except name)

- Windows is now blocking everywhere (dropped continue-on-error from build-windows
  in all 5, not just SyndiKit).
- The only per-package functional difference — the wasm step (Contribute can't
  build Yams on wasm) — is externalized to the ENABLE_WASM repo variable:
  `if: ${{ vars.ENABLE_WASM != 'false' }}`. Set ENABLE_WASM=false on Contribute.
- Normalized all comments to a shared template.

Result: the five workflow files are byte-identical except the `name:` line; the
only behavioral knob is each repo's ENABLE_WASM variable. Filed Contribute#10 to
fix Yams-on-wasm and re-enable it there.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: remove continue-on-error from all 5 CI workflows

Make the WASM step, the Apple-platforms job (iOS/watchOS/tvOS), and the
Android job blocking across all five subrepos. Tidy the now-stale
continue-on-error comment phrases.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: gate watchOS leg on ENABLE_WATCHOS (disable where failing)

watchOS-27 SDK rejects deps that infer an 8.0 deployment target (SwiftPM
#10188, not fixable in-repo). Gate the build-macos-platforms watchOS leg on a
new ENABLE_WATCHOS repo variable (mirrors ENABLE_WASM), keeping the 5 workflows
byte-identical. ENABLE_WATCHOS=false is set on ButtondownKit/SwiftTube/
Contribute/Spinetail; SyndiKit (unaffected) keeps running watchOS.

Tracked in brightdigit.com#119.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: build-ubuntu as a [standard, wasm, wasm-embedded] matrix

Mirror brightdigit/MistKit: the configure job emits ubuntu-type (gated by
ENABLE_WASM), and build-ubuntu fans out over it via fromJSON. Standard ('')
always runs; wasm + wasm-embedded run unless ENABLE_WASM=false (e.g. Yams on
Contribute). Both wasm variants share the nightly-6.4.x SDK bundle. Replaces the
single folded WASM step. Byte-identical across all 5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: make wasm/wasm-embedded legs build-only

The wasm/embedded BUILD passes (OpenAPIURLSession is guarded out on WASI), but
running the suite under WasmKit fails: Foundation resource bundles (test
Fixtures) aren't mounted in the WASI sandbox, and embedded hits OpenAPIRuntime
keypath-demangling limits at runtime. Neither is our bug. Build-only validates
wasm/embedded compilation (the goal); the standard leg still runs the full
suite + coverage. Mirrors the Android leg's build-only stance.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Add tests for uncovered EntryID/SiteCollection/media-properties branches

Covers the 9 patch-coverage gaps flagged on PR #127:
- EntryID: init(string:)/init?(_:)/description/Codable for all four cases
- SiteCollectionDirectoryBuilder: init() + directory(fromCollection:)
- PodcastEpisodeProperties.init?(rssItem:) nil branch (no enclosure)
- YouTubeIDProperties.init?(entry:) nil branch (non-YouTube Atom entry)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* CI: revert swift-build action to @v1 (temp sdk-url-checksum-nightly-6.4 branch deleted)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Align with BrightDigit v1.0.0 CI template and drop self-hosted DocC cruft

Add the template's auxiliary workflows (check-unsafe-flags, cleanup-caches,
swift-source-compat) and .swift-version. Trim the devcontainer matrix to the
supported set (stable 5.10-6.3, nightly 6.4 only; root pinned to 6.3). Remove
the now-stale Mintfile and the self-hosted DocC / XcodeGen stack (netlify.toml,
Dockerfile, .dockerignore, .htaccess, project.yml, Scripts/docc.sh,
Scripts/httpd.conf, Scripts/gh-md-toc) since docs are hosted via SPI. Refresh
.swiftlint.yml excludes and CLAUDE.md to match the mise-based 6.4 tooling.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Bump github.com/coreoffice/xmlcoder from 0.18.1 to 0.18.2

Bumps [github.com/coreoffice/xmlcoder](https://github.com/CoreOffice/XMLCoder) from 0.18.1 to 0.18.2.
- [Release notes](https://github.com/CoreOffice/XMLCoder/releases)
- [Commits](CoreOffice/XMLCoder@0.18.1...0.18.2)

---
updated-dependencies:
- dependency-name: github.com/coreoffice/xmlcoder
  dependency-version: 0.18.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Updates from brightdigit.com (#129)

* Fix remaining subrepo CI failures

* Cache lint tools and align Publish Ink pin

* Wave 0 review feedback: CI hygiene, docs & agent tooling (#130)

* Restore multi-version CI matrix and refresh devcontainers

Rebuild SyndiKit.yml around a three-tier configure matrix on GitHub-hosted
runners (no self-hosted): a single folded build-ubuntu across stable Swift
5.10-6.3 + nightly 6.4 (wasm/wasm-embedded on 6.3+6.4 only); macOS SPM on
Swift 6.3 (Xcode 26.4) + 6.4 (Xcode 27 preview runner) with the full Apple
platform matrix in the full tier; Windows and Android covering 6.3 + 6.4; and
a restored source-compat suite. Reduced runs stay lean (noble x 6.3/6.4 +
macOS SPM only).

Devcontainers: default to Swift 6.3, add 6.2/6.3/6.4 (6.4 nightly image),
remove the old 6.1/6.2 nightly folders. Refresh the stale CLAUDE.md CI section.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Keep swift-source-compat as a separate workflow

Restore the standalone .github/workflows/swift-source-compat.yml (swift:5.10/
6.0/6.1/6.2/6.3 + nightly-6.4) and drop the in-file source-compat-suite job
from SyndiKit.yml; update CLAUDE.md accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci(android): cap API level at 34 and cover Swift 6.3 + 6.4-nightly (#131)

The Swift Android SDK's bundled NDK sysroot for API 36 does not ship
crtbegin_dynamic.o / crtend_android.o, which the Swift toolchain still
asks ld.lld to link. That broke the Android leg of CI at API 36 (see
android/ndk#1391).

Rewrite the build-android matrix as a cross product of {Swift 6.3,
Swift 6.4-nightly} x {API 28, API 34}, moving the nightly's SDK URL and
ID onto the swift entry so the 6.3 rows leave them empty.


Claude-Session: https://claude.ai/code/session_014j6vCW2JwTi3P9Sm6q2q4E

Co-authored-by: Claude <noreply@anthropic.com>

* ci(macos): extract matrix JSON and bump Xcode 26.4 → 26.6

Move macOS CI matrix entries into .github/matrices/ for readability, and bump
Apple platform simulator OS versions to 26.5 on the Xcode 26 legs.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix v1.0.0 CI badge: correct workflow filename case and stray ?

The CI badge pointed at `syndikit.yml` (lowercase), but on the v1.0.0
branch the workflow file is `SyndiKit.yml` (PascalCase, matching the
other Wave 0 repos), so the badge rendered "no status". Also drop the
stray `?` in `&?branch=main`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@leogdion
leogdion deleted the claude/syndikit-ci-cd-failure-23sliv branch July 26, 2026 21:21
leogdion added a commit that referenced this pull request Jul 27, 2026
* Migrate to Swift 6.4: mise-based lint tooling, rebuilt CI, and source cleanups (#127)

* Migrate lint/style/CI configs in 6 BrightDigit subrepo packages [skip ci]

Apply the issue #54 config migration to the vendored BrightDigit libraries
(SyndiKit, TransistorPublishPlugin, Contribute, ContributeWordPress,
NPMPublishPlugin, YoutubePublishPlugin) using the MistKit/SundialKit library
config variant:

- .swiftlint.yml: strict library ruleset + no_unchecked_sendable custom rule
- .swiftformat -> .swift-format: Apple swift-format JSON
- .mise.toml: swift-format 604 (Swift 6.4-aligned), swiftlint, periphery
- Scripts/lint.sh (mise-based, replaces Mint) + Scripts/header.sh
- CI workflow -> brightdigit/swift-build@v1 (ubuntu + macos) + STRICT lint job
- Remove obsolete .hound.yml

Configs + CI only; source reformatting/headers deferred (matches main repo).
SwiftTube and Spinetail skipped (slated for OpenAPI-generator migration).
Committed in the monorepo only; no git subrepo push performed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci: trigger pipeline (config migration)

* packages CI: install curl + cache mise tools in lint job

* CI: test vendored BrightDigit packages via monorepo matrix

Add a `test-packages` matrix job to main.yaml that builds, tests, and lints
the 6 vendored BrightDigit packages in-place. In the monorepo checkout every
sibling already sits at its relative-path location, so each package resolves
with zero dependency reconstruction — replacing the per-package setup-deps CI.

- detect-changes: add `packages` paths-filter + `packages-changed` output
- remove standalone workflows + orphaned setup-deps from the 4 rel-dep
  packages (ContributeWordPress, Transistor, NPM, Youtube); their standalone
  CI was synthetic (relative deps are committed)
- keep SyndiKit + Contribute standalone CIs (genuinely standalone libraries)
- bump all GitHub Actions to latest: checkout v6, cache v5, upload-artifact
  v7, download-artifact v8, dorny/paths-filter v4 (swift-build@v1 unchanged)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Conform v1.0.0 codebase to standardized lint configs

Post-rebase cleanup after replaying the config migration onto v1.0.0:
- Fix swiftlint/swift-format violations surfaced by the stricter
  standardized configs (explicit ACLs, formatting, XCTFail messages,
  XCTUnwrap instead of force-unwraps, doc-comment corrections)
- Inline-disable intentional exceptions in source: iTunes* type names,
  RSS-spec webMaster, @unchecked Sendable fallback, large test fixtures
- Split files violating one_declaration_per_file
- Normalize license headers via Scripts/header.sh (straight quotes)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: refresh DocC catalog for v1.0.0

- Update requirements to match Package.swift (Swift 5.10 / Xcode 15.3,
  iOS 13 / watchOS 6 / tvOS 13 / macOS 10.15 deployment targets)
- Bump install snippet to from: "1.0.0"
- Fix transposed JSONFeed column in the Feedable mapping table
  (siteURL -> homePageUrl, summary -> description)
- Fix invalid Swift in code snippets (Data(contentsOf:) usage,
  missing paren in case pattern)
- Fix typos and stale LICENSE link

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Migrate lint/style/CI configs to BrightDigit template patterns (#54) (#76)

* Phase 4 — OpenAPI & dependency migration (#109)

* SyndiKit CI: use jdx/mise-action for robust lint tool bootstrap

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: add macOS + Windows nightly-6.4 CI legs across all 5 standalone repos

Extend ButtondownKit/Spinetail/SwiftTube/Contribute/SyndiKit standalone CI to
the BrightDigit multi-platform template now that a self-hosted macOS runner with
/Applications/Xcode-beta.app (Swift 6.4) is available:

- build-macos: [self-hosted, macOS] + swift-build xcode=Xcode-beta. Blocking on
  all 5. Contribute & SyndiKit migrated off macos-15; their Ubuntu + lint legs
  migrated swift:6.3-noble -> swiftlang/swift:nightly-6.4.x-noble.
- build-windows: hosted windows-2022/2025, swift.org nightly snapshot
  6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-01-a. Gated to full-matrix runs via a
  single-package configure job. continue-on-error on the OpenAPI repos +
  Contribute (unverified deps); blocking on SyndiKit.
- SyndiKit also gains build-macos-platforms (iOS/watchOS/tvOS on released
  Xcode_26.4 — not nightly 6.4).

WASM + Android deferred: no nightly 6.4 support yet. WASM is a swift-build
limitation (brightdigit/swift-build#115 — no input to override the auto-derived
-RELEASE wasm SDK URL); Android is blocked upstream (no nightly 6.4 SDK). Each
workflow documents re-adding them. Contribute WASM is permanently N/A (Yams on
the Musl/wasm SDK).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: wire WASM + Android nightly-6.4 CI legs via swift-build SDK-bundle inputs

Now that swift.org publishes nightly 6.4 SDK bundles on swift-6.4.x-branch and
brightdigit/swift-build#116 adds inputs to install caller-supplied bundles, add:

- build-wasm to ButtondownKit/Spinetail/SwiftTube/SyndiKit (NOT Contribute — Yams
  fails on the Musl/wasm SDK). Uses wasm-sdk-url + wasm-sdk-checksum pointing at the
  swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_wasm artifactbundle, with WASI
  emulation + memory flags.
- build-android to all 5 repos. Uses android-sdk-url + android-sdk-id (+ matching
  android-swift-version) for the swift-6.4.x-DEVELOPMENT-SNAPSHOT-2026-06-15-a_android
  artifactbundle via skiptools custom-sdk-url; build-only (android-run-tests: false).

Both legs are full-matrix-gated and continue-on-error: they reference @v1 and are
inert until swift-build#116 is released and the v1 tag moved, after which they
should be confirmed green and promoted to blocking (SyndiKit first). Bump the
snapshot SDK URLs/checksums periodically.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: run all Apple-platform suites on self-hosted Xcode-beta (Swift 6.4)

Per the rule that Swift 6.4 builds use the self-hosted runners (the only macOS
Swift 6.4 toolchain is /Applications/Xcode-beta.app = Xcode 27 / Swift 6.4):

- Move SyndiKit + Contribute build-macos-platforms off hosted macos-26/Xcode_26.4
  (which is only Swift 6.2) onto [self-hosted, macOS] + Xcode-beta.
- Add build-macos-platforms (iOS/watchOS/tvOS) to ButtondownKit/Spinetail/SwiftTube
  on the same self-hosted runner — these are swift-tools-version:6.4, so hosted
  released-Xcode runners can't even parse their manifests.

All use the iOS/watchOS/tvOS 27.0 simulator runtimes present on the runner
(iPhone 17 Pro / Apple Watch Ultra 3 (49mm) / Apple TV 4K (3rd generation)),
full-matrix-gated and continue-on-error (simulator-on-nightly is the most fragile
leg; promote once green). lint now needs build-macos-platforms.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: give Windows its own (stricter) matrix tier

Three CI tiers instead of two: small set (build-ubuntu/build-macos/lint, always)
< full-matrix (macОS-platforms/wasm/android) < +Windows. configure now emits a
second output, run-windows, equal to full-matrix MINUS PRs into semver branches.
build-windows (the most expensive leg — hosted windows-2022/2025 ×2) gates on
run-windows; the rest keep full-matrix. So PRs into semver branches still exercise
the full non-Windows matrix but skip Windows.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: test against swift-build feature branch + fold build-wasm into build-ubuntu

- Point every brightdigit/swift-build@v1 reference at @sdk-url-checksum-nightly-6.4
  (PR #116) TEMPORARILY so CI exercises the new wasm-sdk-url/android-sdk-url code
  before it ships in @v1. Revert to @v1 once #116 is merged + the v1 tag moved.
- Fold build-wasm into build-ubuntu as a continue-on-error step in the same
  nightly-6.4.x-noble container (one spin-up; runs on every push/PR now, not just
  full-matrix). Removed the standalone build-wasm job from ButtondownKit/Spinetail/
  SwiftTube/SyndiKit (Contribute has no wasm — Yams on Musl/wasm).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: only run push CI on main (drop integration branch from push trigger)

Push events now trigger only on main (+ release tags). Feature/integration
branches like brightdigit-com-260406 get CI through their PRs instead of a
redundant branch-push run.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: unify the 5 CI workflows to byte-identical (except name)

- Windows is now blocking everywhere (dropped continue-on-error from build-windows
  in all 5, not just SyndiKit).
- The only per-package functional difference — the wasm step (Contribute can't
  build Yams on wasm) — is externalized to the ENABLE_WASM repo variable:
  `if: ${{ vars.ENABLE_WASM != 'false' }}`. Set ENABLE_WASM=false on Contribute.
- Normalized all comments to a shared template.

Result: the five workflow files are byte-identical except the `name:` line; the
only behavioral knob is each repo's ENABLE_WASM variable. Filed Contribute#10 to
fix Yams-on-wasm and re-enable it there.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: remove continue-on-error from all 5 CI workflows

Make the WASM step, the Apple-platforms job (iOS/watchOS/tvOS), and the
Android job blocking across all five subrepos. Tidy the now-stale
continue-on-error comment phrases.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: gate watchOS leg on ENABLE_WATCHOS (disable where failing)

watchOS-27 SDK rejects deps that infer an 8.0 deployment target (SwiftPM
new ENABLE_WATCHOS repo variable (mirrors ENABLE_WASM), keeping the 5 workflows
byte-identical. ENABLE_WATCHOS=false is set on ButtondownKit/SwiftTube/
Contribute/Spinetail; SyndiKit (unaffected) keeps running watchOS.

Tracked in brightdigit.com#119.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: build-ubuntu as a [standard, wasm, wasm-embedded] matrix

Mirror brightdigit/MistKit: the configure job emits ubuntu-type (gated by
ENABLE_WASM), and build-ubuntu fans out over it via fromJSON. Standard ('')
always runs; wasm + wasm-embedded run unless ENABLE_WASM=false (e.g. Yams on
Contribute). Both wasm variants share the nightly-6.4.x SDK bundle. Replaces the
single folded WASM step. Byte-identical across all 5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Subrepos: make wasm/wasm-embedded legs build-only

The wasm/embedded BUILD passes (OpenAPIURLSession is guarded out on WASI), but
running the suite under WasmKit fails: Foundation resource bundles (test
Fixtures) aren't mounted in the WASI sandbox, and embedded hits OpenAPIRuntime
keypath-demangling limits at runtime. Neither is our bug. Build-only validates
wasm/embedded compilation (the goal); the standard leg still runs the full
suite + coverage. Mirrors the Android leg's build-only stance.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Add tests for uncovered EntryID/SiteCollection/media-properties branches

Covers the 9 patch-coverage gaps flagged on PR #127:
- EntryID: init(string:)/init?(_:)/description/Codable for all four cases
- SiteCollectionDirectoryBuilder: init() + directory(fromCollection:)
- PodcastEpisodeProperties.init?(rssItem:) nil branch (no enclosure)
- YouTubeIDProperties.init?(entry:) nil branch (non-YouTube Atom entry)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* CI: revert swift-build action to @v1 (temp sdk-url-checksum-nightly-6.4 branch deleted)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Align with BrightDigit v1.0.0 CI template and drop self-hosted DocC cruft

Add the template's auxiliary workflows (check-unsafe-flags, cleanup-caches,
swift-source-compat) and .swift-version. Trim the devcontainer matrix to the
supported set (stable 5.10-6.3, nightly 6.4 only; root pinned to 6.3). Remove
the now-stale Mintfile and the self-hosted DocC / XcodeGen stack (netlify.toml,
Dockerfile, .dockerignore, .htaccess, project.yml, Scripts/docc.sh,
Scripts/httpd.conf, Scripts/gh-md-toc) since docs are hosted via SPI. Refresh
.swiftlint.yml excludes and CLAUDE.md to match the mise-based 6.4 tooling.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Bump github.com/coreoffice/xmlcoder from 0.18.1 to 0.18.2

Bumps [github.com/coreoffice/xmlcoder](https://github.com/CoreOffice/XMLCoder) from 0.18.1 to 0.18.2.
- [Release notes](https://github.com/CoreOffice/XMLCoder/releases)
- [Commits](CoreOffice/XMLCoder@0.18.1...0.18.2)

---
updated-dependencies:
- dependency-name: github.com/coreoffice/xmlcoder
  dependency-version: 0.18.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Updates from brightdigit.com (#129)

* Fix remaining subrepo CI failures

* Cache lint tools and align Publish Ink pin

* Wave 0 review feedback: CI hygiene, docs & agent tooling (#130)

* Restore multi-version CI matrix and refresh devcontainers

Rebuild SyndiKit.yml around a three-tier configure matrix on GitHub-hosted
runners (no self-hosted): a single folded build-ubuntu across stable Swift
5.10-6.3 + nightly 6.4 (wasm/wasm-embedded on 6.3+6.4 only); macOS SPM on
Swift 6.3 (Xcode 26.4) + 6.4 (Xcode 27 preview runner) with the full Apple
platform matrix in the full tier; Windows and Android covering 6.3 + 6.4; and
a restored source-compat suite. Reduced runs stay lean (noble x 6.3/6.4 +
macOS SPM only).

Devcontainers: default to Swift 6.3, add 6.2/6.3/6.4 (6.4 nightly image),
remove the old 6.1/6.2 nightly folders. Refresh the stale CLAUDE.md CI section.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Keep swift-source-compat as a separate workflow

Restore the standalone .github/workflows/swift-source-compat.yml (swift:5.10/
6.0/6.1/6.2/6.3 + nightly-6.4) and drop the in-file source-compat-suite job
from SyndiKit.yml; update CLAUDE.md accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* ci(android): cap API level at 34 and cover Swift 6.3 + 6.4-nightly (#131)

The Swift Android SDK's bundled NDK sysroot for API 36 does not ship
crtbegin_dynamic.o / crtend_android.o, which the Swift toolchain still
asks ld.lld to link. That broke the Android leg of CI at API 36 (see
android/ndk#1391).

Rewrite the build-android matrix as a cross product of {Swift 6.3,
Swift 6.4-nightly} x {API 28, API 34}, moving the nightly's SDK URL and
ID onto the swift entry so the 6.3 rows leave them empty.

Claude-Session: https://claude.ai/code/session_014j6vCW2JwTi3P9Sm6q2q4E

Co-authored-by: Claude <noreply@anthropic.com>

* ci(macos): extract matrix JSON and bump Xcode 26.4 → 26.6

Move macOS CI matrix entries into .github/matrices/ for readability, and bump
Apple platform simulator OS versions to 26.5 on the Xcode 26 legs.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix v1.0.0 CI badge: correct workflow filename case and stray ?

The CI badge pointed at `syndikit.yml` (lowercase), but on the v1.0.0
branch the workflow file is `SyndiKit.yml` (PascalCase, matching the
other Wave 0 repos), so the badge rendered "no status". Also drop the
stray `?` in `&?branch=main`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants