Skip to content

Commit f9e6e2d

Browse files
authored
Merge pull request #167 from SoundBlaster/codex/feature/P8-T2-prepare-release-0.4.3
P8-T2: Prepare for Release 0.4.3
2 parents 4165959 + 61fff70 commit f9e6e2d

11 files changed

Lines changed: 301 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,30 @@ All notable changes to the mcpbridge-wrapper project will be documented in this
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.4.3] - 2026-03-10
9+
10+
### Fixed
11+
12+
- Broker now keeps external `tools/list` requests behind a warmed tool-catalog gate, retries empty internal warm-up probes, and returns a deterministic `-32001` timeout if the catalog never becomes safely ready instead of exposing a premature empty success.
13+
14+
### Changed
15+
16+
- Added troubleshooting guidance for stale editable installs after a version bump so local development environments can distinguish outdated `.venv` package metadata from the latest `uvx`-fetched release and refresh the editable install with `pip install -e .`.
17+
18+
## [0.4.2] - 2026-03-07
19+
20+
### Added
21+
22+
- Introduced the broker terminal frontend, one-command broker host startup flow, and broker doctor diagnostics for faster local diagnosis of broker state and Xcode connectivity issues.
23+
24+
### Changed
25+
26+
- Reworked the broker quickstart and recovery guidance around the simplest supported broker UX, including dedicated-host workflow documentation and local-status fallback when the dashboard API is unavailable.
27+
28+
### Fixed
29+
30+
- Improved broker startup recovery around dashboard port ownership conflicts so guidance distinguishes foreign listeners from broker-owned listeners and keeps users on the correct remediation path.
31+
832
## [0.4.1] - 2026-03-06
933

1034
### Fixed
@@ -89,6 +113,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
89113
- ✅ Support for all 20 Xcode MCP tools
90114
- ✅ Configuration examples for Cursor, Claude Code, and Codex CLI
91115

116+
[0.4.3]: https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.3
117+
[0.4.2]: https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.2
118+
[0.4.1]: https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.1
92119
[0.4.0]: https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.0
93120
[0.3.2]: https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.3.2
94121
[0.3.1]: https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.3.1

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.2-blue.svg)](https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.2)
6+
[![Version](https://img.shields.io/badge/version-0.4.3-blue.svg)](https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.3)
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: 4 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-T2 | [P8-T2_Prepare_for_Release_0.4.3/](P8-T2_Prepare_for_Release_0.4.3/) | 2026-03-10 | PASS |
910
| P1-T13 | [P1-T13_Document_stale_editable_install_version_mismatch_in_troubleshooting_guide/](P1-T13_Document_stale_editable_install_version_mismatch_in_troubleshooting_guide/) | 2026-03-10 | PASS |
1011
| P2-T8 | [P2-T8_Gate_broker_tools_list_on_warmed_tool_catalog/](P2-T8_Gate_broker_tools_list_on_warmed_tool_catalog/) | 2026-03-10 | PASS |
1112
| 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 |
@@ -207,6 +208,7 @@
207208

208209
| File | Description |
209210
|------|-------------|
211+
| [REVIEW_release_0.4.3_preparation.md](P8-T2_Prepare_for_Release_0.4.3/REVIEW_release_0.4.3_preparation.md) | Review report for P8-T2 |
210212
| [REVIEW_p1_t13_editable_install_troubleshooting.md](_Historical/REVIEW_p1_t13_editable_install_troubleshooting.md) | Review report for P1-T13 |
211213
| [REVIEW_p2_t8_tools_catalog_gate.md](_Historical/REVIEW_p2_t8_tools_catalog_gate.md) | Review report for P2-T8 |
212214
| [REVIEW_broker_ux_docs.md](_Historical/REVIEW_broker_ux_docs.md) | Review report for P7-T5 |
@@ -640,6 +642,8 @@
640642
| 2026-03-07 | P7-T2 | Archived REVIEW_broker_doctor_diagnostics report |
641643
| 2026-03-07 | P7-T3 | Archived Auto-recover_or_guide_on_dashboard_port_ownership_conflicts (PASS) |
642644
| 2026-03-07 | P7-T3 | Archived REVIEW_dashboard_port_ownership_conflicts report |
645+
| 2026-03-10 | P8-T2 | Archived Prepare_for_Release_0.4.3 (PASS) |
646+
| 2026-03-10 | P8-T2 | Archived REVIEW_release_0.4.3_preparation report |
643647
| 2026-03-10 | P2-T8 | Archived Gate_broker_tools_list_on_warmed_tool_catalog (PASS) |
644648
| 2026-03-10 | P2-T8 | Archived REVIEW_p2_t8_tools_catalog_gate report |
645649
| 2026-03-10 | P1-T13 | Archived Document_stale_editable_install_version_mismatch_in_troubleshooting_guide (PASS) |
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# P8-T2: Prepare for Release 0.4.3
2+
3+
**Status:** In Progress
4+
**Date:** 2026-03-10
5+
**Priority:** P0
6+
**Dependencies:** P1-T13, P2-T8 (completed)
7+
8+
---
9+
10+
## Objective
11+
12+
Prepare patch release `0.4.3` for the work merged after `v0.4.2`:
13+
- `P2-T8` hardened broker startup by gating `tools/list` on a warmed tool catalog and retrying the probe instead of exposing a transient empty catalog to clients.
14+
- `P1-T13` documented the editable-install version mismatch trap so local development setups can self-diagnose stale `.venv` metadata after a version bump.
15+
16+
The deliverable is a merge-ready branch that updates release metadata, records release notes in `CHANGELOG.md`, passes the full pre-release quality gate suite, and leaves exact post-merge tag/publish commands for the human operator.
17+
18+
**Scope boundary:** Creating and pushing the `v0.4.3` tag, publishing to PyPI, and publishing to the MCP Registry remain post-merge human actions on `main`. This task prepares the branch and validates the repository state before those actions.
19+
20+
---
21+
22+
## Current State
23+
24+
| Artifact | Current value |
25+
|----------|---------------|
26+
| `pyproject.toml` version | `0.4.2` |
27+
| `server.json` root version | `0.4.2` |
28+
| `server.json` package version | `0.4.2` |
29+
| `README.md` version badge | `v0.4.2` |
30+
| Latest git tag on current baseline | `v0.4.2` |
31+
| Unreleased merged work since `v0.4.2` | `P2-T8`, `P1-T13` |
32+
33+
---
34+
35+
## Deliverables
36+
37+
1. **`pyproject.toml`**`[project].version` updated to `0.4.3`.
38+
2. **`server.json`** — root `version` and `packages[0].version` updated to `0.4.3`.
39+
3. **`README.md`** — version badge updated to `v0.4.3`.
40+
4. **`CHANGELOG.md`** — new `[0.4.3] - 2026-03-10` entry summarizing the shipped fixes/docs.
41+
5. **`SPECS/INPROGRESS/P8-T2_Validation_Report.md`** — records release metadata checks, quality gates, and post-merge publish instructions.
42+
43+
---
44+
45+
## Implementation Steps
46+
47+
### 1. Update release metadata
48+
49+
Use the existing release helpers so version fields stay in sync:
50+
51+
```bash
52+
make bump-version VERSION=0.4.3
53+
make badge-version TAG=v0.4.3
54+
```
55+
56+
This updates:
57+
- `pyproject.toml`
58+
- `server.json`
59+
- `README.md` version badge block
60+
61+
### 2. Add release notes
62+
63+
Update `CHANGELOG.md` with a new `0.4.3` entry that covers:
64+
- broker `tools/list` warm-catalog gating / retry behavior (`P2-T8`)
65+
- the editable-install troubleshooting addition (`P1-T13`)
66+
67+
### 3. Run pre-release quality gates
68+
69+
Run the full local validation suite required by FLOW, `CONTRIBUTING.md`, and this release workflow:
70+
71+
```bash
72+
pytest tests/ -v --cov=src --cov-report=term
73+
python -m ruff check src/ tests/
74+
python -m ruff format --check src/ tests/
75+
mypy src/
76+
make doccheck-all
77+
python -m build
78+
twine check dist/*
79+
```
80+
81+
### 4. Record release validation
82+
83+
Write `SPECS/INPROGRESS/P8-T2_Validation_Report.md` with:
84+
- the exact versions now present in release metadata
85+
- changelog verification
86+
- quality gate outcomes
87+
- explicit post-merge steps for tagging and publish verification
88+
89+
### 5. Post-merge operator steps
90+
91+
These commands must be executed only after the PR merges into `main`:
92+
93+
```bash
94+
git checkout main
95+
git pull origin main
96+
git tag v0.4.3
97+
git push origin v0.4.3
98+
```
99+
100+
Then verify:
101+
- GitHub Actions `publish-mcp.yml` succeeds for `v0.4.3`
102+
- PyPI serves `mcpbridge-wrapper==0.4.3`
103+
- the MCP Registry reflects `0.4.3`
104+
105+
---
106+
107+
## Acceptance Criteria
108+
109+
- [ ] `pyproject.toml` contains `version = "0.4.3"`.
110+
- [ ] `server.json` root `version` and `packages[0].version` both equal `0.4.3`.
111+
- [ ] `README.md` version badge reflects `v0.4.3`.
112+
- [ ] `CHANGELOG.md` contains `[0.4.3] - 2026-03-10` and summarizes `P2-T8` and `P1-T13`.
113+
- [ ] `pytest tests/ -v --cov=src --cov-report=term` passes with coverage ≥90%.
114+
- [ ] `python -m ruff check src/ tests/` passes.
115+
- [ ] `python -m ruff format --check src/ tests/` passes.
116+
- [ ] `mypy src/` passes.
117+
- [ ] `make doccheck-all` passes.
118+
- [ ] `python -m build` and `twine check dist/*` pass.
119+
- [ ] Validation report captures the exact post-merge commands and verification steps for `v0.4.3`.
120+
121+
---
122+
123+
## Risk Notes
124+
125+
- `main` is protected. Do not tag or publish from this feature branch; tag only after merge.
126+
- `make badge-version` must be called with explicit `TAG=v0.4.3` so it does not reuse `v0.4.2`.
127+
- If the local editable install was not refreshed after the version bump, local `mcpbridge-wrapper --version` output may lag until `pip install -e .` is rerun. This is documented by `P1-T13`.
128+
129+
---
130+
**Archived:** 2026-03-10
131+
**Verdict:** PASS
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# P8-T2 Validation Report — Prepare for Release 0.4.3
2+
3+
**Date:** 2026-03-10
4+
**Branch:** `codex/feature/P8-T2-prepare-release-0.4.3`
5+
**Python:** `3.10.19`
6+
**Verdict:** PASS
7+
8+
---
9+
10+
## Deliverables Checklist
11+
12+
| Deliverable | Status | Detail |
13+
|-------------|--------|--------|
14+
| `pyproject.toml` version = `0.4.3` | ✅ PASS | Updated via `make bump-version VERSION=0.4.3` |
15+
| `server.json` root `version` = `0.4.3` | ✅ PASS | Updated by `scripts/publish_helper.py` |
16+
| `server.json` `packages[0].version` = `0.4.3` | ✅ PASS | Updated by `scripts/publish_helper.py` |
17+
| `README.md` badge updated to `v0.4.3` | ✅ PASS | Updated via `make badge-version TAG=v0.4.3` |
18+
| `Sources/XcodeMCPWrapper/Documentation.docc/XcodeMCPWrapper.md` badge updated to `v0.4.3` | ✅ PASS | Synced via `python scripts/update_version_badge.py --readme ... --tag v0.4.3` |
19+
| `CHANGELOG.md` contains `[0.4.3] - 2026-03-10` | ✅ PASS | Added release notes for `P2-T8` and `P1-T13` |
20+
21+
---
22+
23+
## Quality Gates
24+
25+
| Gate | Result | Detail |
26+
|------|--------|--------|
27+
| `pytest tests/ -v --cov=src --cov-report=term` | ✅ PASS | `902 passed, 5 skipped, 2 warnings in 8.93s` |
28+
| Coverage ≥ 90% | ✅ PASS | Total coverage: **91.55%** |
29+
| `python -m ruff check src/ tests/` | ✅ PASS | All checks passed |
30+
| `python -m ruff format --check src/ tests/` | ✅ PASS | `55 files already formatted` |
31+
| `mypy src/` | ✅ PASS | `Success: no issues found in 20 source files` |
32+
| `make doccheck-all` | ✅ PASS | README and DocC overview stayed in sync across unstaged/staged/branch scopes |
33+
| `python -m build` | ✅ PASS | Built `dist/mcpbridge_wrapper-0.4.3.tar.gz` and `dist/mcpbridge_wrapper-0.4.3-py3-none-any.whl` |
34+
| `twine check dist/*` | ✅ PASS | Wheel and sdist metadata both passed |
35+
36+
---
37+
38+
## Release Notes Scope
39+
40+
`0.4.3` is prepared as a patch release for the work merged after `v0.4.2`:
41+
42+
- `P2-T8` prevents clients from seeing a premature empty `tools/list` success by gating on a warmed, valid tool catalog and retrying empty warm-up probes.
43+
- `P1-T13` documents how stale editable-install metadata can make a local `.venv` report an older package version than the current `uvx` release after version bumps.
44+
45+
---
46+
47+
## Remaining Steps (post-merge)
48+
49+
The following steps are intentionally deferred until the PR merges into `main`:
50+
51+
1. `git checkout main`
52+
2. `git pull origin main`
53+
3. `git tag v0.4.3`
54+
4. `git push origin v0.4.3`
55+
5. Verify GitHub Actions `publish-mcp.yml` for `v0.4.3` completes successfully
56+
6. Verify `https://pypi.org/project/mcpbridge-wrapper/0.4.3/` is live
57+
7. Verify the MCP Registry reflects `0.4.3`
58+
59+
These checks are acceptance criteria that cannot be completed on the feature branch without publishing from the wrong ref.
60+
61+
---
62+
63+
## Summary
64+
65+
All pre-merge release-preparation deliverables are complete. Version metadata is consistent across package, registry manifest, README, and DocC overview; the changelog captures the shipped work; and the full local validation suite required by FLOW, `CONTRIBUTING.md`, and `PUBLISHING.md` passed.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
## REVIEW REPORT — release_0.4.3_preparation
2+
3+
**Scope:** `origin/main..HEAD`
4+
**Files:** 10
5+
6+
### Summary Verdict
7+
- [x] Approve
8+
- [ ] Approve with comments
9+
- [ ] Request changes
10+
- [ ] Block
11+
12+
### Critical Issues
13+
14+
- None.
15+
16+
### Secondary Issues
17+
18+
- None.
19+
20+
### Architectural Notes
21+
22+
- The release-preparation branch keeps publication side effects out of scope for the PR itself, which matches the protected-`main` workflow documented in `CONTRIBUTING.md` and `PUBLISHING.md`.
23+
- README and DocC overview version badges were updated together, so the branch remains compatible with `make doccheck-all`.
24+
- `CHANGELOG.md` now documents only the work merged after `v0.4.2`, keeping the patch-release scope narrow and reviewable.
25+
26+
### Tests
27+
28+
- `pytest tests/ -v --cov=src --cov-report=term` passed with `902 passed, 5 skipped, 2 warnings` and `91.55%` total coverage.
29+
- `python -m ruff check src/ tests/`, `python -m ruff format --check src/ tests/`, `mypy src/`, `make doccheck-all`, `python -m build`, and `twine check dist/*` all passed.
30+
31+
### Next Steps
32+
33+
- No actionable review findings. FOLLOW-UP is skipped.
34+
- After merge, run the documented `git tag v0.4.3` / `git push origin v0.4.3` sequence on `main` and verify the `publish-mcp.yml` workflow, PyPI package page, and MCP Registry entry.

SPECS/INPROGRESS/next.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,23 @@ task only after a follow-up or new workplan entry is created.
1515

1616
## Recently Archived
1717

18+
- `2026-03-10``P8-T2` archived with verdict `PASS`
1819
- `2026-03-10``P1-T13` archived with verdict `PASS`
1920
- `2026-03-10``P2-T8` archived with verdict `PASS`
2021
- `2026-03-07``P8-T1` archived with verdict `PASS`
2122
- `2026-03-07``P7-T5` archived with verdict `PASS`
2223
- `2026-03-07``P7-T4` archived with verdict `PASS`
2324
- `2026-03-07``FU-P7-T3-2` archived with verdict `PASS`
2425
- `2026-03-07``FU-P7-T3-1` archived with verdict `PASS`
26+
27+
## Post-Merge Action Required
28+
29+
After the `P8-T2` PR merges to `main`, push the release tag to trigger publishing:
30+
31+
```bash
32+
git checkout main && git pull origin main
33+
git tag v0.4.3
34+
git push origin v0.4.3
35+
```
36+
37+
Then verify GitHub Actions `publish-mcp.yml` completes successfully.

SPECS/Workplan.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,3 +640,25 @@ Add new tasks using the canonical template in [TASK_TEMPLATE.md](TASK_TEMPLATE.m
640640
- [ ] Git tag `v0.4.2` exists on `origin/main` (post-merge)
641641
- [ ] `https://pypi.org/project/mcpbridge-wrapper/0.4.2/` is accessible (post-merge)
642642
- [ ] GitHub Actions `publish-mcp.yml` run for tag `v0.4.2` shows all steps green (post-merge)
643+
644+
#### ✅ P8-T2: Prepare for Release 0.4.3
645+
- **Status:** ✅ Completed (2026-03-10)
646+
- **Description:** Prepared patch release `0.4.3` for the work merged after `v0.4.2`, covering the broker warmed-tool-catalog readiness fix (`P2-T8`) and the editable-install troubleshooting guidance (`P1-T13`). Bumped release metadata to `0.4.3`, synced the README and DocC overview badges, added changelog release notes, and validated the full local pre-release gate suite. Tagging and publication remain post-merge actions on `main`.
647+
- **Priority:** P0
648+
- **Dependencies:** P1-T13, P2-T8
649+
- **Parallelizable:** no
650+
- **Outputs/Artifacts:**
651+
- `pyproject.toml` — version set to `0.4.3`
652+
- `server.json` — root and package versions set to `0.4.3`
653+
- `README.md` and `Sources/XcodeMCPWrapper/Documentation.docc/XcodeMCPWrapper.md` — version badges updated to `v0.4.3`
654+
- `CHANGELOG.md``[0.4.3]` entry added for `P2-T8` and `P1-T13`
655+
- `SPECS/ARCHIVE/P8-T2_Prepare_for_Release_0.4.3/` — archived PRD + validation report
656+
- (Post-merge, human action) `git tag v0.4.3` push triggers PyPI + MCP Registry publish
657+
- **Acceptance Criteria:**
658+
- [x] `pyproject.toml` and `server.json` both contain version `0.4.3`
659+
- [x] `README.md` version badge reflects `v0.4.3`
660+
- [x] `CHANGELOG.md` contains a `[0.4.3]` entry dated `2026-03-10` covering the release contents
661+
- [x] `pytest tests/ -v --cov=src --cov-report=term`, `ruff check src/ tests/`, `ruff format --check src/ tests/`, `mypy src/`, `make doccheck-all`, `python -m build`, and `twine check dist/*` all pass
662+
- [ ] Git tag `v0.4.3` exists on `origin/main` (post-merge)
663+
- [ ] `https://pypi.org/project/mcpbridge-wrapper/0.4.3/` is accessible (post-merge)
664+
- [ ] GitHub Actions `publish-mcp.yml` run for tag `v0.4.3` 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.2-blue.svg)](https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.2)
11+
[![Version](https://img.shields.io/badge/version-0.4.3-blue.svg)](https://github.com/SoundBlaster/XcodeMCPWrapper/releases/tag/v0.4.3)
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.2"
7+
version = "0.4.3"
88
description = "Python wrapper for xcrun mcpbridge that adds structuredContent to MCP responses"
99
readme = "README.md"
1010
requires-python = ">=3.9"

0 commit comments

Comments
 (0)