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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<!-- mcp-name: io.github.SoundBlaster/xcode-mcpbridge-wrapper -->

<!-- version-badge:start -->
[![Version](https://img.shields.io/badge/version-0.4.1-blue.svg)](https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.1)
[![Version](https://img.shields.io/badge/version-0.4.2-blue.svg)](https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.2)
<!-- version-badge:end -->
[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
Expand Down
3 changes: 3 additions & 0 deletions SPECS/ARCHIVE/INDEX.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

| Task ID | Folder | Archived | Verdict |
|---------|--------|----------|---------|
| P8-T1 | [P8-T1_Release_version_0.4.2_to_PyPI_and_MCP_Registry/](P8-T1_Release_version_0.4.2_to_PyPI_and_MCP_Registry/) | 2026-03-07 | PASS |
| P7-T5 | [P7-T5_Document_broker_UX/](P7-T5_Document_broker_UX/) | 2026-03-07 | PASS |
| P7-T4 | [P7-T4_Add_direct_local-status_fallback_for_TUI_when_dashboard_API_is_unavailable/](P7-T4_Add_direct_local-status_fallback_for_TUI_when_dashboard_API_is_unavailable/) | 2026-03-07 | PASS |
| FU-P7-T3-2 | [FU-P7-T3-2_Exclude_broker-owned_dashboard_listeners_from_foreign_port-conflict_guidance/](FU-P7-T3-2_Exclude_broker-owned_dashboard_listeners_from_foreign_port-conflict_guidance/) | 2026-03-07 | PASS |
Expand Down Expand Up @@ -351,6 +352,8 @@

| Date | Task ID | Action |
|------|---------|--------|
| 2026-03-07 | P8-T1 | Archived REVIEW_release_0.4.2 report |
| 2026-03-07 | P8-T1 | Archived Release_version_0.4.2_to_PyPI_and_MCP_Registry (PASS) |
| 2026-03-07 | P7-T5 | Archived REVIEW_broker_ux_docs report |
| 2026-03-07 | P7-T5 | Archived Document_broker_UX (PASS) |
| 2026-03-07 | P7-T4 | Archived REVIEW_tui_local_status_fallback report |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# P8-T1: Release version 0.4.2 to PyPI and MCP Registry

**Status:** In Progress
**Date:** 2026-03-07
**Priority:** P0
**Dependencies:** P7-T5 (completed)

---

## Objective

Cut the `0.4.2` release to publish all unreleased Phase 5–7 work accumulated since the `v0.4.1` tag:
- Phase 5: broker robustness improvements (--broker flag, auto-recovery, -32001 error, web-UI mismatch warning)
- Phase 6: broker daemon status surface, terminal frontend (TUI)
- Phase 7: broker console startup, doctor diagnostics, port-conflict recovery, TUI local fallback, broker UX docs

---

## Current State

| Artifact | Current value |
|----------|---------------|
| `pyproject.toml` version | `0.4.1` |
| `server.json` version | `0.4.1` |
| README badge | `v0.4.1` |
| Latest PyPI release | `0.4.1` |
| Latest git tag | `v0.4.1` (points to earlier commit, not HEAD) |
| Unreleased commits since tag | ~80 commits across P5–P7 |

---

## Deliverables

1. **`pyproject.toml`** — version bumped to `0.4.2`
2. **`server.json`** — version bumped to `0.4.2` (both root `version` and `packages[0].version`)
3. **`README.md`** — version badge updated to `v0.4.2`
4. **Git tag `v0.4.2`** — created on `main` (after PR merge) and pushed to `origin`
5. **GitHub Actions `publish-mcp.yml`** — triggered by tag, publishes to PyPI + MCP Registry

---

## Implementation Steps

### 1. Bump versions (make bump-version)
```bash
make bump-version VERSION=0.4.2
```
Updates `pyproject.toml` and `server.json` atomically via `scripts/publish_helper.py`.

### 2. Update README badge (make badge-version)
```bash
make badge-version TAG=v0.4.2
```
Updates the `<!-- version-badge:start -->` … `<!-- version-badge:end -->` block in `README.md`.

### 3. Run quality gates
- `pytest` — all tests pass
- `ruff check src/` — no lint errors
- `mypy src/` — type check passes
- `pytest --cov` — coverage ≥ 90%

### 4. Commit, push branch, open PR, merge to main

### 5. Tag and push (after merge)
```bash
git tag v0.4.2
git push origin v0.4.2
```
This triggers `publish-mcp.yml` → publishes to PyPI and MCP Registry.

---

## Acceptance Criteria

- [ ] `pyproject.toml` version = `0.4.2`
- [ ] `server.json` root `version` = `0.4.2`
- [ ] `server.json` `packages[0].version` = `0.4.2`
- [ ] README badge reflects `v0.4.2`
- [ ] All quality gates pass (pytest, ruff, mypy, coverage ≥ 90%)
- [ ] Git tag `v0.4.2` exists on `origin/main`
- [ ] `https://pypi.org/project/mcpbridge-wrapper/0.4.2/` is accessible
- [ ] GitHub Actions `publish-mcp.yml` run for `v0.4.2` shows all steps green

---

## Risk Notes

- The `publish-mcp.yml` tag push must happen on `main` after the PR merges — do NOT push the tag from the feature branch.
- `make badge-version` reads the latest git tag; run it with explicit `TAG=v0.4.2` to avoid reading `v0.4.1`.
- PyPI publish uses `skip-existing: true` so a re-run is safe if it partially fails.
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# P8-T1 Validation Report — Release version 0.4.2 to PyPI and MCP Registry

**Date:** 2026-03-07
**Verdict:** PASS

---

## Deliverables Checklist

| Deliverable | Status | Detail |
|-------------|--------|--------|
| `pyproject.toml` version = `0.4.2` | ✅ PASS | Bumped from `0.4.1` via `make bump-version VERSION=0.4.2` |
| `server.json` root `version` = `0.4.2` | ✅ PASS | Updated by `scripts/publish_helper.py` |
| `server.json` `packages[0].version` = `0.4.2` | ✅ PASS | Updated by `scripts/publish_helper.py` |
| README badge updated to `v0.4.2` | ✅ PASS | Updated via `make badge-version TAG=v0.4.2` |

---

## Quality Gates

| Gate | Result | Detail |
|------|--------|--------|
| `ruff check src/` | ✅ PASS | All checks passed |
| `mypy src/` | ✅ PASS | No issues found in 20 source files |
| `pytest` | ✅ PASS | 898 passed, 5 skipped, 2 warnings |
| `pytest --cov` ≥ 90% | ✅ PASS | Total coverage: **91.75%** |

---

## Remaining Steps (post-merge)

The following steps are intentionally deferred to after the PR merges into `main`:

1. `git tag v0.4.2` on `main`
2. `git push origin v0.4.2` — triggers `publish-mcp.yml`
3. Verify `https://pypi.org/project/mcpbridge-wrapper/0.4.2/` is live
4. Verify GitHub Actions `publish-mcp.yml` run for `v0.4.2` shows all steps green

These are acceptance criteria that cannot be verified on the feature branch and will be confirmed after merge.

---

## Summary

All pre-merge deliverables are complete and quality gates pass. The PR is ready to merge. Once merged to `main`, tag `v0.4.2` must be pushed to trigger the PyPI and MCP Registry publish pipeline.
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
## REVIEW REPORT — release_0.4.2

**Scope:** origin/main..HEAD (6 commits)
**Files changed:** 3 production files (`pyproject.toml`, `server.json`, `README.md`) + 5 SPECS artifacts

---

### Summary Verdict
- [x] Approve

---

### Critical Issues

None.

---

### Secondary Issues

None.

---

### Architectural Notes

- Version bump is mechanical and follows the established `make bump-version` / `make badge-version` toolchain — no custom logic added, no risk of divergence between `pyproject.toml` and `server.json`.
- `server.json` updates both root `version` and `packages[0].version` atomically via `scripts/publish_helper.py`, consistent with prior releases (`0.4.0`, `0.4.1`).
- README badge uses the `<!-- version-badge:start/end -->` sentinel pattern — no manual editing risk.
- Tag push (`v0.4.2`) is intentionally deferred to post-merge on `main`. This is the correct pattern per PUBLISHING.md: pushing the tag from the feature branch would point at a non-main commit and could confuse downstream tooling.
- No source code changes in this PR — all quality gate results are inherited from the already-passing test suite on `main`. This is expected for a pure release bump.

---

### Tests

- `pytest`: 898 passed, 5 skipped — no regressions.
- `ruff check src/`: All checks passed.
- `mypy src/`: No issues in 20 source files.
- `pytest --cov`: 91.75% total coverage — above the 90% threshold.
- No new tests needed: this task involves only version metadata changes, not logic changes.

---

### Next Steps

1. Merge this PR into `main`.
2. On `main` after merge:
```bash
git checkout main && git pull origin main
git tag v0.4.2
git push origin v0.4.2
```
3. Verify GitHub Actions `publish-mcp.yml` completes for tag `v0.4.2`.
4. Confirm `https://pypi.org/project/mcpbridge-wrapper/0.4.2/` is live.

**FOLLOW-UP: None required.** No actionable issues found.
14 changes: 13 additions & 1 deletion SPECS/INPROGRESS/next.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,25 @@ All current workplan tasks are complete.

## Recently Archived

- `2026-03-07` — `P8-T1` archived with verdict `PASS`
- `2026-03-07` — `P7-T5` archived with verdict `PASS`
- `2026-03-07` — `P7-T4` archived with verdict `PASS`
- `2026-03-07` — `FU-P7-T3-2` archived with verdict `PASS`
- `2026-03-07` — `FU-P7-T3-1` archived with verdict `PASS`
- `2026-03-07` — `FU-P7-T1-1` archived with verdict `PASS`

## Next Step

All tasks in the current workplan cycle have been completed. Add new tasks to
`SPECS/Workplan.md` to begin the next cycle.

## Post-Merge Action Required

After the P8-T1 PR merges to `main`, push the release tag to trigger publishing:

```bash
git checkout main && git pull origin main
git tag v0.4.2
git push origin v0.4.2
```

Then verify GitHub Actions `publish-mcp.yml` completes successfully.
21 changes: 21 additions & 0 deletions SPECS/Workplan.md
Original file line number Diff line number Diff line change
Expand Up @@ -586,3 +586,24 @@ Add new tasks using the canonical template in [TASK_TEMPLATE.md](TASK_TEMPLATE.m
- [x] New users can find the recommended broker startup command and the recommended diagnostic command within one short reading path
- [x] The docs no longer require users to infer the relationship between broker, dashboard, TUI, and Xcode approval prompts from multiple separate pages
- [x] Failure recovery steps are written around the new UX primitives rather than raw manual shell debugging

### Phase 8: Release

#### ✅ P8-T1: Release version 0.4.2 to PyPI and MCP Registry
- **Status:** ✅ Completed (2026-03-07)
- **Description:** Cut the `0.4.2` release to publish all Phase 5–7 work (broker console, doctor diagnostics, port-conflict recovery, TUI local fallback, broker UX docs). Bumped version in `pyproject.toml` and `server.json` to `0.4.2`, updated the README version badge, committed. Git tag `v0.4.2` to be pushed to `origin` after PR merges to trigger `publish-mcp.yml`.
- **Priority:** P0
- **Dependencies:** P7-T5
- **Parallelizable:** no
- **Outputs/Artifacts:**
- `pyproject.toml` version set to `0.4.2`
- `server.json` version set to `0.4.2`
- `README.md` version badge updated to `v0.4.2`
- Git tag `v0.4.2` pushed to `origin` (post-merge)
- `publish-mcp.yml` workflow completed successfully (post-merge)
- **Acceptance Criteria:**
- [x] `pyproject.toml` and `server.json` both contain version `0.4.2`
- [x] README version badge reflects `v0.4.2`
- [ ] Git tag `v0.4.2` exists on `origin/main` (post-merge)
- [ ] `https://pypi.org/project/mcpbridge-wrapper/0.4.2/` is accessible (post-merge)
- [ ] GitHub Actions `publish-mcp.yml` run for tag `v0.4.2` shows all steps green (post-merge)
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Model Context Protocol (MCP).
[https://github.com/SoundBlaster/XcodeMCPWrapper](https://github.com/SoundBlaster/XcodeMCPWrapper)

<!-- version-badge:start -->
[![Version](https://img.shields.io/badge/version-0.4.1-blue.svg)](https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.1)
[![Version](https://img.shields.io/badge/version-0.4.2-blue.svg)](https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.2)
<!-- version-badge:end -->

## Overview
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "mcpbridge-wrapper"
version = "0.4.1"
version = "0.4.2"
description = "Python wrapper for xcrun mcpbridge that adds structuredContent to MCP responses"
readme = "README.md"
requires-python = ">=3.9"
Expand Down
4 changes: 2 additions & 2 deletions server.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"name": "io.github.SoundBlaster/xcode-mcpbridge-wrapper",
"title": "Xcode: MCP Bridge Wrapper for Cursor",
"description": "Python wrapper that makes Xcode's MCP bridge compatible with strict MCP clients like Cursor",
"version": "0.4.1",
"version": "0.4.2",
"repository": {
"url": "https://github.com/SoundBlaster/XcodeMCPWrapper",
"source": "github"
Expand All @@ -13,7 +13,7 @@
{
"registryType": "pypi",
"identifier": "mcpbridge-wrapper",
"version": "0.4.1",
"version": "0.4.2",
"transport": {
"type": "stdio"
},
Expand Down