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 CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ All notable changes to the mcpbridge-wrapper project will be documented in this
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.4.0] - 2026-02-20
## [0.4.0] - 2026-03-06

### Added

Expand Down
3 changes: 2 additions & 1 deletion SPECS/ARCHIVE/INDEX.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
# mcpbridge-wrapper Tasks Archive

**Last Updated:** 2026-03-06 (P1-T11 archived)
**Last Updated:** 2026-03-06 (P5-T1 archived)

## Archived Tasks

| Task ID | Folder | Archived | Verdict |
|---------|--------|----------|---------|
| P5-T1 | [P5-T1_release_0.4.0/](P5-T1_release_0.4.0/) | 2026-03-06 | PASS |
| P1-T11 | [P1-T11_Update_test_coverage_badge_in_README_with_actual_numbers/](P1-T11_Update_test_coverage_badge_in_README_with_actual_numbers/) | 2026-03-06 | PASS |
| P4-T2 | [P4-T2_Cache_tools_list_in_broker_and_gate_client_responses/](P4-T2_Cache_tools_list_in_broker_and_gate_client_responses/) | 2026-03-06 | PASS |
| P1-T10 | [P1-T10_Document_Xcode_first_approval_timing_race/](P1-T10_Document_Xcode_first_approval_timing_race/) | 2026-03-06 | PASS |
Expand Down
91 changes: 91 additions & 0 deletions SPECS/ARCHIVE/P5-T1_release_0.4.0/P5-T1_Validation_Report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# P5-T1 Validation Report — Release 0.4.0 Preparation

**Task:** P5-T1 — Release 0.4.0 to PyPI and MCP Registry
**Date:** 2026-03-06
**Branch:** `codex/feature/P5-T1-release-0.4.0`
**Verdict:** PASS

---

## Quality Gate Results

### 1. `make test` (pytest + coverage)

```
785 passed, 5 skipped, 2 warnings in 8.73s
Coverage: 90.91% (required: 90.0%) — PASS
```

Coverage by module:

| Module | Stmts | Miss | Cover |
|--------|-------|------|-------|
| `__init__.py` | 8 | 0 | 100.0% |
| `__main__.py` | 455 | 26 | 93.0% |
| `bridge.py` | 87 | 2 | 96.6% |
| `broker/daemon.py` | 268 | 23 | 89.4% |
| `broker/proxy.py` | 230 | 33 | 85.7% |
| `broker/transport.py` | 359 | 31 | 87.8% |
| `broker/types.py` | 43 | 0 | 100.0% |
| `schemas.py` | 58 | 3 | 94.3% |
| `transform.py` | 92 | 2 | 95.8% |
| **TOTAL** | **1609** | **120** | **90.91%** |

### 2. `make lint` (ruff check)

```
All checks passed!
```

### 3. `make format-check` (ruff format)

```
49 files already formatted
```

### 4. `make typecheck` (mypy)

```
Success: no issues found in 18 source files
```

### 5. `make doccheck-all` (DocC sync)

```
✓ DocC sync checks passed across unstaged, staged, and branch scopes
```

### 6. `make package-assets-check` (Web UI assets in wheel + sdist)

```
Checked wheel: mcpbridge_wrapper-0.4.0-py3-none-any.whl
Checked sdist: mcpbridge_wrapper-0.4.0.tar.gz
OK: Required Web UI static assets are present in wheel and sdist.
```

---

## Release Artifact Verification

| Artifact | Value | Status |
|----------|-------|--------|
| `pyproject.toml` version | `0.4.0` | PASS |
| `server.json` version | `0.4.0` | PASS |
| `server.json packages[0].version` | `0.4.0` | PASS |
| `CHANGELOG.md [0.4.0]` date | `2026-03-06` (updated from `2026-02-20`) | PASS |
| CI/CD workflow (`publish-mcp.yml`) trigger | `push: tags: ["v*"]` | PASS |
| PyPI publish method | OIDC via `pypa/gh-action-pypi-publish@release/v1` | PASS |
| MCP Registry publish method | `mcp-publisher publish` via `github-oidc` | PASS |

---

## CHANGELOG Change

- **Before:** `## [0.4.0] - 2026-02-20`
- **After:** `## [0.4.0] - 2026-03-06`

---

## Summary

All six quality gates pass. The package builds correctly with Web UI assets included in both wheel and sdist. The CHANGELOG date has been updated to match the actual release date. Version metadata is consistent across `pyproject.toml`, `server.json`, and the `CHANGELOG.md` header. The CI/CD publish pipeline is tag-triggered and requires no additional configuration before the human operator creates the `v0.4.0` tag.
131 changes: 131 additions & 0 deletions SPECS/ARCHIVE/P5-T1_release_0.4.0/PRD_P5-T1_release_0.4.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# P5-T1 PRD — Release 0.4.0 to PyPI and MCP Registry

## Task Metadata

- **Task ID:** P5-T1
- **Phase:** Phase 5: Release
- **Priority:** P0
- **Dependencies:** P1-T1, P1-T11, P2-T1 through P2-T6, P3-T11, P4-T1, P4-T2, BUG-T8
- **Source:** `SPECS/Workplan.md` open task entry

## Objective Summary

Prepare `v0.4.0` for publication by bringing all release-gate documents into alignment with the actual release date (2026-03-06) and verifying all automated quality gates pass on the current `main` HEAD. The CI/CD pipeline (`publish-mcp.yml`) is already wired for tag-triggered PyPI and MCP Registry publishing — no manual upload scripting is required. The task deliverable is a merge-ready branch that is confirmed to pass all gates, with the CHANGELOG date corrected and the manual release commands documented for the human operator to execute after PR merge.

**Scope boundary:** The `git tag v0.4.0` push and PyPI/MCP Registry publish are intentionally **out of scope** for this PR — they require PyPI credentials and human confirmation after merge. The PR description documents the exact commands required.

## Success Criteria

1. `CHANGELOG.md` line `## [0.4.0] - 2026-02-20` is changed to `## [0.4.0] - 2026-03-06`.
2. CI/CD workflow (`publish-mcp.yml`) reviewed and confirmed tag-triggered publish-ready.
3. All local quality gates pass: `make test` (≥ 90% coverage), `make lint`, `make format-check`, `make typecheck`, `make doccheck-all`, `make package-assets-check`.
4. `SPECS/Workplan.md` P5-T1 entry marked `✅ Completed (2026-03-06)`.
5. `SPECS/INPROGRESS/next.md` updated to reflect P5-T1 as most recently archived.
6. PR description includes exact tag + publish commands for human operator.

## Acceptance Tests

| Check | Tool / Command | Expected Result |
|-------|---------------|-----------------|
| CHANGELOG date | `grep "\[0\.4\.0\]" CHANGELOG.md` | `## [0.4.0] - 2026-03-06` |
| pytest + coverage | `make test` | ≥ 785 tests pass, coverage ≥ 90% |
| ruff lint | `make lint` | 0 errors |
| ruff format | `make format-check` | 0 errors |
| mypy | `make typecheck` | 0 errors |
| DocC sync | `make doccheck-all` | 0 drift |
| Package assets | `make package-assets-check` | Web UI assets present |
| Version in pyproject.toml | `grep ^version pyproject.toml` | `version = "0.4.0"` |
| server.json version | `jq .version server.json` | `"0.4.0"` |

## Test-First Plan

No code logic changes are required for this task. All quality gate runs are validation-only:

1. Run `make test` — confirm test count and coverage.
2. Run `make lint && make format-check && make typecheck` — confirm zero lint/type errors.
3. Run `make doccheck-all` — confirm DocC mirrors in sync.
4. Run `make package-assets-check` — confirm Web UI assets packaged.
5. Update CHANGELOG date (single line change).
6. Re-run `make test` to confirm nothing broken by the trivial text change.
7. Update Workplan and next.md.

## Implementation Plan (Hierarchical TODO)

### Phase A — Release Artifact Verification

- **Inputs:** Current `main` HEAD at `2deb0a0`.
- **Actions:**
- Verify `pyproject.toml` version = `"0.4.0"`.
- Verify `server.json` version = `"0.4.0"` and `packages[0].version = "0.4.0"`.
- Review `publish-mcp.yml` and confirm it will trigger on `v*` tag push.
- **Outputs:** Confirmation notes for validation report.
- **Verification:** `grep`, `jq`, visual review of workflow triggers.

### Phase B — CHANGELOG Date Update

- **Inputs:** `CHANGELOG.md` line 8 reads `## [0.4.0] - 2026-02-20`.
- **Actions:**
- Replace `2026-02-20` with `2026-03-06` in the `[0.4.0]` header line.
- No other changelog lines require modification.
- **Outputs:** `CHANGELOG.md` with updated release date.
- **Verification:** `grep "\[0\.4\.0\]" CHANGELOG.md` → `## [0.4.0] - 2026-03-06`.

### Phase C — Quality Gate Runs

- **Inputs:** Current source tree with CHANGELOG update.
- **Actions (in order):**
1. `make test` — collect test count, coverage %, pass/fail.
2. `make lint` — confirm 0 ruff errors.
3. `make format-check` — confirm 0 format errors.
4. `make typecheck` — confirm 0 mypy errors.
5. `make doccheck-all` — confirm DocC sync.
6. `make package-assets-check` — confirm Web UI asset packaging.
- **Outputs:** Validation report with gate results.
- **Verification:** All commands exit 0; coverage ≥ 90%.

### Phase D — Workplan and Next.md Update

- **Inputs:** `SPECS/Workplan.md` P5-T1 entry (status `⬜️ pending`).
- **Actions:**
- Change `⬜️` to `✅ Completed (2026-03-06)`.
- Update `SPECS/INPROGRESS/next.md` to list P5-T1 as recently archived.
- **Outputs:** Updated Workplan and next.md.
- **Verification:** `grep "P5-T1" SPECS/Workplan.md` shows `✅ Completed`.

### Phase E — Validation Report

- **Inputs:** Gate output from Phase C.
- **Actions:** Write `SPECS/INPROGRESS/P5-T1_Validation_Report.md`.
- **Outputs:** `P5-T1_Validation_Report.md` with all gate results recorded.

## Manual Release Commands (for human operator post-merge)

After the PR is merged to `main`, the human operator must run the following commands **with PyPI credentials configured** (OIDC via GitHub Actions is the recommended path):

```bash
# 1. Ensure you are on the latest main
git checkout main && git pull origin main

# 2. Create and push the annotated tag
git tag -a v0.4.0 -m "Release 0.4.0 — broker mode, Web UI, auto-restart, tools cache"
git push origin v0.4.0

# 3. The publish-mcp.yml workflow triggers automatically on the v* tag push.
# Monitor the GitHub Actions run for:
# - "Publish package to PyPI" step success
# - "Publish server to MCP Registry" step success

# 4. Verify after publish propagates (~5 min):
pip install mcpbridge-wrapper==0.4.0
uvx mcpbridge-wrapper[webui] --version # should print 0.4.0

# 5. Check MCP Registry entry:
# https://registry.modelcontextprotocol.io/?q=Xcode
```

## Notes

- `server.json` version is set by the CI workflow from `${GITHUB_REF#refs/tags/v}` — no manual edit needed before the tag push.
- PyPI publish uses OIDC (`pypa/gh-action-pypi-publish@release/v1`) — no API token management required in the workflow.
- README version badge (`shields.io/pypi/v/mcpbridge-wrapper`) resolves automatically once PyPI has `0.4.0` indexed.
- Docs to update once published: none in this PR scope (badge auto-resolves; CHANGELOG date is the only human-maintained field).
1 change: 1 addition & 0 deletions SPECS/INPROGRESS/next.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

## Recently Archived

- **P5-T1** (2026-03-06): Release 0.4.0 to PyPI and MCP Registry — PASS
- **P1-T11** (2026-03-06): Update test coverage badge in README.md with actual numbers — PASS
- **P4-T2** (2026-03-06): Cache tools/list in broker and gate client responses on upstream readiness — PASS
- **P1-T10** (2026-03-06): Document Xcode first-approval timing race — PASS
Expand Down
22 changes: 22 additions & 0 deletions SPECS/Workplan.md
Original file line number Diff line number Diff line change
Expand Up @@ -343,3 +343,25 @@ Add new tasks using the canonical template in [TASK_TEMPLATE.md](TASK_TEMPLATE.m
- [x] `scripts/uninstall.sh` stops running broker daemon before removing files
- [x] `docs/broker-mode.md` documents `--broker-stop`, `--broker-status`, and version management
- [x] All quality gates pass (`pytest`, `ruff`, `mypy`, coverage >= 90%)

### Phase 5: Release

#### ✅ P5-T1: Release 0.4.0 to PyPI and MCP Registry
- **Status:** ✅ Completed (2026-03-06)
- **Description:** Tag `v0.4.0` in git, publish the package to PyPI, and update the MCP Registry entry so users can install the latest release via `pip`, `uvx`, and the MCP Registry. Update the CHANGELOG release date to match the actual tag date, trigger or verify CI/CD publish workflows, and confirm the published artifacts are correct.
- **Priority:** P0
- **Dependencies:** P1-T1, P1-T11, P2-T1, P2-T2, P2-T3, P2-T4, P2-T5, P2-T6, P3-T11, P4-T1, P4-T2, BUG-T8
- **Parallelizable:** no
- **Outputs/Artifacts:**
- `CHANGELOG.md` — release date updated to `2026-03-06` (was placeholder `2026-02-20`)
- `SPECS/INPROGRESS/P5-T1_Validation_Report.md` — all quality gates verified PASS
- `SPECS/ARCHIVE/P5-T1_release_0.4.0/` — archived PRD + validation report
- (Post-merge, human action) `git tag v0.4.0` push triggers CI/CD PyPI + MCP Registry publish
- **Acceptance Criteria:**
- [x] `CHANGELOG.md` `[0.4.0]` entry date matches the actual release date (`2026-03-06`)
- [ ] `git tag v0.4.0` exists on `main` and is pushed to remote (requires human action post-merge)
- [ ] `pip install mcpbridge-wrapper==0.4.0` succeeds from PyPI (requires human action post-merge)
- [ ] `uvx mcpbridge-wrapper[webui] --version` reports `0.4.0` (requires human action post-merge)
- [ ] MCP Registry entry reflects `0.4.0` (auto-triggered by tag push via CI/CD)
- [ ] README version badge displays `v0.4.0` after PyPI publish propagates (auto after tag push)
- [x] All quality gates pass on the tagged commit (`pytest` 785 tests, 90.91% coverage, `ruff`, `mypy`, DocC sync, package assets check)