Skip to content

Commit 8a45808

Browse files
committed
Branch for P8-T1: release 0.4.2
1 parent f64eb60 commit 8a45808

10 files changed

Lines changed: 234 additions & 6 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<!-- mcp-name: io.github.SoundBlaster/xcode-mcpbridge-wrapper -->
44

55
<!-- version-badge:start -->
6-
[![Version](https://img.shields.io/badge/version-0.4.1-blue.svg)](https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.1)
6+
[![Version](https://img.shields.io/badge/version-0.4.2-blue.svg)](https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.2)
77
<!-- version-badge:end -->
88
[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
99
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

SPECS/ARCHIVE/INDEX.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
| Task ID | Folder | Archived | Verdict |
88
|---------|--------|----------|---------|
9+
| 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 |
910
| P7-T5 | [P7-T5_Document_broker_UX/](P7-T5_Document_broker_UX/) | 2026-03-07 | PASS |
1011
| 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 |
1112
| 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 |
@@ -351,6 +352,8 @@
351352

352353
| Date | Task ID | Action |
353354
|------|---------|--------|
355+
| 2026-03-07 | P8-T1 | Archived REVIEW_release_0.4.2 report |
356+
| 2026-03-07 | P8-T1 | Archived Release_version_0.4.2_to_PyPI_and_MCP_Registry (PASS) |
354357
| 2026-03-07 | P7-T5 | Archived REVIEW_broker_ux_docs report |
355358
| 2026-03-07 | P7-T5 | Archived Document_broker_UX (PASS) |
356359
| 2026-03-07 | P7-T4 | Archived REVIEW_tui_local_status_fallback report |
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# P8-T1: Release version 0.4.2 to PyPI and MCP Registry
2+
3+
**Status:** In Progress
4+
**Date:** 2026-03-07
5+
**Priority:** P0
6+
**Dependencies:** P7-T5 (completed)
7+
8+
---
9+
10+
## Objective
11+
12+
Cut the `0.4.2` release to publish all unreleased Phase 5–7 work accumulated since the `v0.4.1` tag:
13+
- Phase 5: broker robustness improvements (--broker flag, auto-recovery, -32001 error, web-UI mismatch warning)
14+
- Phase 6: broker daemon status surface, terminal frontend (TUI)
15+
- Phase 7: broker console startup, doctor diagnostics, port-conflict recovery, TUI local fallback, broker UX docs
16+
17+
---
18+
19+
## Current State
20+
21+
| Artifact | Current value |
22+
|----------|---------------|
23+
| `pyproject.toml` version | `0.4.1` |
24+
| `server.json` version | `0.4.1` |
25+
| README badge | `v0.4.1` |
26+
| Latest PyPI release | `0.4.1` |
27+
| Latest git tag | `v0.4.1` (points to earlier commit, not HEAD) |
28+
| Unreleased commits since tag | ~80 commits across P5–P7 |
29+
30+
---
31+
32+
## Deliverables
33+
34+
1. **`pyproject.toml`** — version bumped to `0.4.2`
35+
2. **`server.json`** — version bumped to `0.4.2` (both root `version` and `packages[0].version`)
36+
3. **`README.md`** — version badge updated to `v0.4.2`
37+
4. **Git tag `v0.4.2`** — created on `main` (after PR merge) and pushed to `origin`
38+
5. **GitHub Actions `publish-mcp.yml`** — triggered by tag, publishes to PyPI + MCP Registry
39+
40+
---
41+
42+
## Implementation Steps
43+
44+
### 1. Bump versions (make bump-version)
45+
```bash
46+
make bump-version VERSION=0.4.2
47+
```
48+
Updates `pyproject.toml` and `server.json` atomically via `scripts/publish_helper.py`.
49+
50+
### 2. Update README badge (make badge-version)
51+
```bash
52+
make badge-version TAG=v0.4.2
53+
```
54+
Updates the `<!-- version-badge:start -->``<!-- version-badge:end -->` block in `README.md`.
55+
56+
### 3. Run quality gates
57+
- `pytest` — all tests pass
58+
- `ruff check src/` — no lint errors
59+
- `mypy src/` — type check passes
60+
- `pytest --cov` — coverage ≥ 90%
61+
62+
### 4. Commit, push branch, open PR, merge to main
63+
64+
### 5. Tag and push (after merge)
65+
```bash
66+
git tag v0.4.2
67+
git push origin v0.4.2
68+
```
69+
This triggers `publish-mcp.yml` → publishes to PyPI and MCP Registry.
70+
71+
---
72+
73+
## Acceptance Criteria
74+
75+
- [ ] `pyproject.toml` version = `0.4.2`
76+
- [ ] `server.json` root `version` = `0.4.2`
77+
- [ ] `server.json` `packages[0].version` = `0.4.2`
78+
- [ ] README badge reflects `v0.4.2`
79+
- [ ] All quality gates pass (pytest, ruff, mypy, coverage ≥ 90%)
80+
- [ ] Git tag `v0.4.2` exists on `origin/main`
81+
- [ ] `https://pypi.org/project/mcpbridge-wrapper/0.4.2/` is accessible
82+
- [ ] GitHub Actions `publish-mcp.yml` run for `v0.4.2` shows all steps green
83+
84+
---
85+
86+
## Risk Notes
87+
88+
- The `publish-mcp.yml` tag push must happen on `main` after the PR merges — do NOT push the tag from the feature branch.
89+
- `make badge-version` reads the latest git tag; run it with explicit `TAG=v0.4.2` to avoid reading `v0.4.1`.
90+
- PyPI publish uses `skip-existing: true` so a re-run is safe if it partially fails.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# P8-T1 Validation Report — Release version 0.4.2 to PyPI and MCP Registry
2+
3+
**Date:** 2026-03-07
4+
**Verdict:** PASS
5+
6+
---
7+
8+
## Deliverables Checklist
9+
10+
| Deliverable | Status | Detail |
11+
|-------------|--------|--------|
12+
| `pyproject.toml` version = `0.4.2` | ✅ PASS | Bumped from `0.4.1` via `make bump-version VERSION=0.4.2` |
13+
| `server.json` root `version` = `0.4.2` | ✅ PASS | Updated by `scripts/publish_helper.py` |
14+
| `server.json` `packages[0].version` = `0.4.2` | ✅ PASS | Updated by `scripts/publish_helper.py` |
15+
| README badge updated to `v0.4.2` | ✅ PASS | Updated via `make badge-version TAG=v0.4.2` |
16+
17+
---
18+
19+
## Quality Gates
20+
21+
| Gate | Result | Detail |
22+
|------|--------|--------|
23+
| `ruff check src/` | ✅ PASS | All checks passed |
24+
| `mypy src/` | ✅ PASS | No issues found in 20 source files |
25+
| `pytest` | ✅ PASS | 898 passed, 5 skipped, 2 warnings |
26+
| `pytest --cov` ≥ 90% | ✅ PASS | Total coverage: **91.75%** |
27+
28+
---
29+
30+
## Remaining Steps (post-merge)
31+
32+
The following steps are intentionally deferred to after the PR merges into `main`:
33+
34+
1. `git tag v0.4.2` on `main`
35+
2. `git push origin v0.4.2` — triggers `publish-mcp.yml`
36+
3. Verify `https://pypi.org/project/mcpbridge-wrapper/0.4.2/` is live
37+
4. Verify GitHub Actions `publish-mcp.yml` run for `v0.4.2` shows all steps green
38+
39+
These are acceptance criteria that cannot be verified on the feature branch and will be confirmed after merge.
40+
41+
---
42+
43+
## Summary
44+
45+
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.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
## REVIEW REPORT — release_0.4.2
2+
3+
**Scope:** origin/main..HEAD (6 commits)
4+
**Files changed:** 3 production files (`pyproject.toml`, `server.json`, `README.md`) + 5 SPECS artifacts
5+
6+
---
7+
8+
### Summary Verdict
9+
- [x] Approve
10+
11+
---
12+
13+
### Critical Issues
14+
15+
None.
16+
17+
---
18+
19+
### Secondary Issues
20+
21+
None.
22+
23+
---
24+
25+
### Architectural Notes
26+
27+
- 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`.
28+
- `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`).
29+
- README badge uses the `<!-- version-badge:start/end -->` sentinel pattern — no manual editing risk.
30+
- 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.
31+
- 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.
32+
33+
---
34+
35+
### Tests
36+
37+
- `pytest`: 898 passed, 5 skipped — no regressions.
38+
- `ruff check src/`: All checks passed.
39+
- `mypy src/`: No issues in 20 source files.
40+
- `pytest --cov`: 91.75% total coverage — above the 90% threshold.
41+
- No new tests needed: this task involves only version metadata changes, not logic changes.
42+
43+
---
44+
45+
### Next Steps
46+
47+
1. Merge this PR into `main`.
48+
2. On `main` after merge:
49+
```bash
50+
git checkout main && git pull origin main
51+
git tag v0.4.2
52+
git push origin v0.4.2
53+
```
54+
3. Verify GitHub Actions `publish-mcp.yml` completes for tag `v0.4.2`.
55+
4. Confirm `https://pypi.org/project/mcpbridge-wrapper/0.4.2/` is live.
56+
57+
**FOLLOW-UP: None required.** No actionable issues found.

SPECS/INPROGRESS/next.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,25 @@ All current workplan tasks are complete.
44

55
## Recently Archived
66

7+
- `2026-03-07``P8-T1` archived with verdict `PASS`
78
- `2026-03-07``P7-T5` archived with verdict `PASS`
89
- `2026-03-07``P7-T4` archived with verdict `PASS`
910
- `2026-03-07``FU-P7-T3-2` archived with verdict `PASS`
1011
- `2026-03-07``FU-P7-T3-1` archived with verdict `PASS`
11-
- `2026-03-07``FU-P7-T1-1` archived with verdict `PASS`
1212

1313
## Next Step
1414

1515
All tasks in the current workplan cycle have been completed. Add new tasks to
1616
`SPECS/Workplan.md` to begin the next cycle.
17+
18+
## Post-Merge Action Required
19+
20+
After the P8-T1 PR merges to `main`, push the release tag to trigger publishing:
21+
22+
```bash
23+
git checkout main && git pull origin main
24+
git tag v0.4.2
25+
git push origin v0.4.2
26+
```
27+
28+
Then verify GitHub Actions `publish-mcp.yml` completes successfully.

SPECS/Workplan.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,3 +586,24 @@ Add new tasks using the canonical template in [TASK_TEMPLATE.md](TASK_TEMPLATE.m
586586
- [x] New users can find the recommended broker startup command and the recommended diagnostic command within one short reading path
587587
- [x] The docs no longer require users to infer the relationship between broker, dashboard, TUI, and Xcode approval prompts from multiple separate pages
588588
- [x] Failure recovery steps are written around the new UX primitives rather than raw manual shell debugging
589+
590+
### Phase 8: Release
591+
592+
#### ✅ P8-T1: Release version 0.4.2 to PyPI and MCP Registry
593+
- **Status:** ✅ Completed (2026-03-07)
594+
- **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`.
595+
- **Priority:** P0
596+
- **Dependencies:** P7-T5
597+
- **Parallelizable:** no
598+
- **Outputs/Artifacts:**
599+
- `pyproject.toml` version set to `0.4.2`
600+
- `server.json` version set to `0.4.2`
601+
- `README.md` version badge updated to `v0.4.2`
602+
- Git tag `v0.4.2` pushed to `origin` (post-merge)
603+
- `publish-mcp.yml` workflow completed successfully (post-merge)
604+
- **Acceptance Criteria:**
605+
- [x] `pyproject.toml` and `server.json` both contain version `0.4.2`
606+
- [x] README version badge reflects `v0.4.2`
607+
- [ ] Git tag `v0.4.2` exists on `origin/main` (post-merge)
608+
- [ ] `https://pypi.org/project/mcpbridge-wrapper/0.4.2/` is accessible (post-merge)
609+
- [ ] GitHub Actions `publish-mcp.yml` run for tag `v0.4.2` shows all steps green (post-merge)

Sources/XcodeMCPWrapper/Documentation.docc/XcodeMCPWrapper.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Model Context Protocol (MCP).
88
[https://github.com/SoundBlaster/XcodeMCPWrapper](https://github.com/SoundBlaster/XcodeMCPWrapper)
99

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

1414
## Overview

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "mcpbridge-wrapper"
7-
version = "0.4.1"
7+
version = "0.4.2"
88
description = "Python wrapper for xcrun mcpbridge that adds structuredContent to MCP responses"
99
readme = "README.md"
1010
requires-python = ">=3.9"

server.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"name": "io.github.SoundBlaster/xcode-mcpbridge-wrapper",
44
"title": "Xcode: MCP Bridge Wrapper for Cursor",
55
"description": "Python wrapper that makes Xcode's MCP bridge compatible with strict MCP clients like Cursor",
6-
"version": "0.4.1",
6+
"version": "0.4.2",
77
"repository": {
88
"url": "https://github.com/SoundBlaster/XcodeMCPWrapper",
99
"source": "github"
@@ -13,7 +13,7 @@
1313
{
1414
"registryType": "pypi",
1515
"identifier": "mcpbridge-wrapper",
16-
"version": "0.4.1",
16+
"version": "0.4.2",
1717
"transport": {
1818
"type": "stdio"
1919
},

0 commit comments

Comments
 (0)