Skip to content

CI/repo hardening + docs (#194–#201)#202

Merged
vk0eppel merged 10 commits into
mainfrom
ci/native-build-smoke-test-194
Jul 13, 2026
Merged

CI/repo hardening + docs (#194–#201)#202
vk0eppel merged 10 commits into
mainfrom
ci/native-build-smoke-test-194

Conversation

@vk0eppel

Copy link
Copy Markdown
Owner

What & why

Batch of CI, packaging, and docs improvements from a repo review — closing the gap where a PR could pass CI green but break the shippable app, plus licensing/metadata/triage housekeeping.

Closes #194, #195, #196, #197, #198, #199, #200, #201

Per ticket

Checks

  • cargo fmt --check + cargo clippy -- -D warnings + cargo test (331 pass)
  • dart format --set-exit-if-changed lib test + flutter analyze (0 issues) + flutter test (300 pass)
  • flutter build macos --debug links (incl. verified failure detection)
  • All workflow / dependabot / issue-form YAML valid
  • Reviewed via /code-review (Standards + Spec) — no hard violations, no correctness issues

Notes

🤖 Generated with Claude Code

vk0eppel and others added 10 commits July 12, 2026 16:34
…erior (#193)

Container margin is a bare Padding with no decoration, so it never
self-hit-tests; GestureDetector's default deferToChild behavior left
that margin band a silent dead zone around every channel tab,
indistinguishable from the clickable area. Moves the spacing to an
inner Padding and sets HitTestBehavior.opaque so the whole tab row
registers taps, fixing missed clicks near tab edges/seams (including
reselecting a channel after it's part of a multi-selection).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Both existing CI jobs run on ubuntu-latest and only analyze/test/clippy —
nothing compiles patch_core as a cdylib/staticlib or links it into the app,
so native/link regressions (e.g. a missing `-framework` in the cargokit
podspec, per CONVENTION.md → Platform and ERRORS.md → Build/Release) only
surface when a release tag is pushed.

Add a macos-latest job that runs `flutter build macos --debug`, reproducing
the release-time compile-and-link path with the same pinned Rust 1.95.0 /
Flutter 3.44.1. Verified locally that dropping `-framework CoreMIDI` from the
podspec fails this build with undefined CoreMIDI symbols, so the documented
breakage class now fails the PR. This is also the only CI job that compiles
patch_core's macOS cfg(target_os) paths (CoreMIDI/midir); Windows (WinMM)
stays covered by release.yml.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The Dart tree was never run through `dart format`, so 83 first-party files
in lib/ and test/ were non-conformant to Dart 3.12's formatter. Reformat them
so the CI format gate (added next) passes on main.

The formatter splits `if (cond) stmt;` onto two lines when the body is long,
which then trips `curly_braces_in_flow_control_structures` (single-line ifs
are exempt, split ones are not). Fixed the 4 affected sites by adding braces —
satisfying both the formatter and the linter. analyze: 0 issues; 300 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a `dart format --output=none --set-exit-if-changed lib test` step to the
Flutter CI job, mirroring the Rust `cargo fmt --check` gate, so unformatted
Dart fails the PR. Scoped to first-party dirs (generated bindings and vendored
cargokit are excluded via the analyzer and have no dart-format --exclude flag).
Document the command and the brace/formatter interaction in CONVENTION.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- release.yml: pin the Rust toolchain action to `@1.95.0` (matching ci.yml)
  instead of `@master`, so release builds are reproducible. GitHub disallows
  `${{ env }}` in `uses:`, so the version lives on the ref literal and the now
  unused RUST_VERSION env var is dropped (FLUTTER_VERSION stays — it's used via
  a `with:` input, which does interpolate).
- ci.yml: add a top-level `permissions: contents: read` block so the default
  GITHUB_TOKEN is read-only. The release job keeps its own `contents: write`.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Weekly update PRs for the GitHub Actions, Cargo (workspace root), and pub
(patch_app) ecosystems, grouped so bumps land as a few reviewable PRs rather
than a flood. Documents that flutter_rust_bridge bumps are a coordinated
manual change (Rust crate + Dart package + regenerated glue), not auto-merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…198)

The repo shipped a full GPLv3 LICENSE file while README said "TBD — private
for now" and neither package declared a license. Make every surface agree:

- README License section states GPL-3.0-only, linking LICENSE.
- patch-core/Cargo.toml gets license = "GPL-3.0-only" + repository + homepage.
- patch_app/pubspec.yaml gets repository + homepage (pub has no license key;
  the LICENSE file is authoritative).
- .gitignore drops the legacy patch_app/.packages entry and ignores the root
  Patch-*.dmg / Patch-*.exe release artifacts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Issue forms (bug, feature) auto-apply `needs-triage` so filed issues start in
the documented triage flow (docs/agents/triage-labels.md), and prompt for the
fields triage needs while steering toward the CONTEXT.md domain glossary and
the "does this help a crew execute a live show more reliably?" litmus. Also
create the two missing vocabulary labels (needs-info, ready-for-human).

The PR template carries a checklist mirroring the CI gates (fmt/clippy/test,
dart format, analyze/test, native build, FFI codegen) and a Closes # link.
Blank issues stay enabled so AFK agents filing via the gh CLI aren't blocked.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs/superpowers/plans/2026-06-28-multi-address-peer-discovery.md was a
1539-line implementation plan sitting under user-facing docs/ and not indexed
in docs/README.md. Its architectural decisions (peer addresses map, peer_id-
keyed ACKs, LRU dedup, per-address pruning) are fully captured in ADR-0007,
and the work has shipped — so the plan is a superseded planning artifact.
Remove it (git history preserves it) and the now-empty superpowers/ tree, so
docs/ contains only operator docs plus adr/ and agents/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The #199 issue forms auto-apply `bug`/`enhancement`, but triage-labels.md
only listed the five status labels — so both axes of the #194#200 review
flagged the doc as no longer authoritative. Split the doc into status labels
(where an issue is in triage) and category labels (what it's about), noting a
normal issue carries one of each. Docs-only; no form or label changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.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.

Fail CI on a broken native/desktop build

1 participant