# Contributing We welcome pull requests and issues on [GitHub](https://github.com/Arenukvern/mcp_flutter). **Full guide (setup, commits, releases, PR checklist):** [docs/contributing/contribution_guide.mdx](docs/contributing/contribution_guide.mdx) · [docs.page](https://docs.page/Arenukvern/mcp_flutter/contributing/contribution_guide) ## Contributor links - Contributor credit: [docs/contributing/contributors.mdx](docs/contributing/contributors.mdx) - Docs maintenance: [docs/contributing/docs_maintenance.mdx](docs/contributing/docs_maintenance.mdx) - Code of conduct: [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) - Security reporting: [SECURITY.md](SECURITY.md) ## Maintainers ### Release legibility (cross-repo contract) Product harness releases should keep **changelog in git** and **binaries aligned with the tag**. The normative pattern lives in Skill Steward: - Skill: [`release-changelog-harness`](https://github.com/Arenukvern/skill_steward/tree/main/skills/release-changelog-harness) — install: `npx skills add arenukvern/skill_steward --skill release-changelog-harness` - Reference: [binary-release-contract.md](https://github.com/Arenukvern/skill_steward/blob/main/skills/release-changelog-harness/references/binary-release-contract.md) - ADR (meta vs product): [ADR 0010 — binary releases for product harness](https://github.com/Arenukvern/skill_steward/blob/main/docs/decisions/0010-binary-releases-for-product-harness-not-meta-steward.md) mcp_flutter is the reference implementation: release-please on `main`, tag-triggered artifacts, consumer `install.sh` without a full clone. ### Binary release train (this repo) | Step | Where | |------|--------| | Version + changelog PR | release-please → merge Release PR → tag `vX.Y.Z` | | Build tarballs | [`.github/workflows/release.yml`](.github/workflows/release.yml) or locally `make release-artifacts` → [`tool/release/build_release_artifacts.sh`](tool/release/build_release_artifacts.sh) | | Outputs | `dist/release/flutter_mcp__.tar.gz` + [`dist/release/checksums.txt`](dist/release/checksums.txt) (SHA-256 per tarball) | | Attach to GitHub Release | CI on tag (same filenames as `checksums.txt` entries) | Before merge, run `make check-contracts` (`check_version_sync.sh`, skill assets drift). Bundled skill: **`flutter-mcp-toolkit-repo-maintainer`** (`.cursor/skills/flutter-mcp-toolkit-repo-maintainer`). ### Consumer install + checksum verification ([`install.sh`](install.sh)) End users should install from **GitHub Release assets**, not `git clone`: ```bash curl -fsSL https://raw.githubusercontent.com/Arenukvern/mcp_flutter/main/install.sh | bash # pinned: curl -fsSL https://raw.githubusercontent.com/Arenukvern/mcp_flutter/main/install.sh | bash -s -- --version vX.Y.Z ``` **Checksum flow** (maintainers: keep CI and `install.sh` in sync): 1. Download `flutter_mcp__.tar.gz` from `https://github.com/Arenukvern/mcp_flutter/releases/download/v/`. 2. Download `checksums.txt` from the same release URL. 3. Find the line for the archive: `sha256sum_value flutter_mcp__.tar.gz`. 4. Compute SHA-256 locally (`sha256sum` or `shasum -a 256`) and compare; `install.sh` aborts on mismatch. 5. Extract tarball and install `bin/flutter-mcp-toolkit` and `bin/flutter-mcp-toolkit-server` to `$HOME/.local/bin` (or `--install-dir`). Published triples: `darwin-arm64`, `linux-x64` only. Intel macOS is unsupported for published binaries (install from source). When changing artifact names or checksum layout, update **`tool/release/build_release_artifacts.sh`**, **`install.sh`**, and **`.github/workflows/release.yml`** in the same PR.