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
3 changes: 3 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ python -m pip install -e ".[dev,mcp]"
python -m pytest -q
```

Tests live in `tests/`. Run only the MCP wire tests with
`python -m pytest -q tests/test_mcp*.py`.

Tests isolate the default and named-bag directories as well as
`POSTBAG_LEDGER`, and use fake doors. They must never scan the user's bags
or reach a real session. Core tests use the standard library and pytest.
Expand Down
8 changes: 5 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ jobs:
- name: Install MCP and test dependencies
run: python -m pip install -e '.[dev,mcp]'
- name: Run MCP subprocess wire tests
run: python -m pytest -q test_mcp*.py
run: python -m pytest -q tests/test_mcp*.py
- name: Check MCP entry point
run: postbag-mcp --version

Expand All @@ -82,7 +82,9 @@ jobs:
import tarfile
with tarfile.open(next(Path("dist").glob("*.tar.gz"))) as archive:
packaged = {name.split("/", 1)[1] for name in archive.getnames() if "/" in name}
missing = {path.name for path in Path(".").glob("test_*.py")} - packaged
tests = {path.as_posix() for path in Path("tests").glob("test_*.py")}
assert tests, "No test modules found under tests/"
missing = tests - packaged
assert not missing, f"Source archive is missing test modules: {sorted(missing)}"
PYTESTARCHIVE
- name: Install wheel and source archive in fresh environments
Expand Down Expand Up @@ -115,7 +117,7 @@ jobs:
wheels=(dist/*.whl)
"$RUNNER_TEMP/wheel-mcp/bin/python" -m pip install "${wheels[0]}[mcp]" pytest
mkdir "$RUNNER_TEMP/wheel-mcp-tests"
cp test_mcp*.py "$RUNNER_TEMP/wheel-mcp-tests/"
cp tests/test_mcp*.py "$RUNNER_TEMP/wheel-mcp-tests/"
cd "$RUNNER_TEMP/wheel-mcp-tests"
"$RUNNER_TEMP/wheel-mcp/bin/postbag-mcp" --version
"$RUNNER_TEMP/wheel-mcp/bin/python" -I -c 'import pathlib, sys, postbag_mcp; assert pathlib.Path(postbag_mcp.__file__).is_relative_to(sys.prefix)'
Expand Down
20 changes: 19 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,23 @@ All notable changes to postbag are recorded here. The format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project
uses [Semantic Versioning](https://semver.org/).

## [2.2.1] - 2026-10-02

Documentation and repository layout release. No runtime change beyond the
version number.

### Changed
- The README is a short product page: install and connect for both hosts,
the two-prompt setup, the five tools, and what to know before use. Release
evidence and migration notes stay in this file, `docs/mcp.md` and
`docs/native-compatibility.md`.
- The demo shows scripted calls to two real `postbag mcp` servers, one with
a Codex identity and one with a Claude Code identity, through fake native
doors, including the envelope each door receives. Its source is
`docs/demo_mcp.py`. The CLI demo environment script is removed.
- Tests live in `tests/`. CI, the installed-wheel check and the source
distribution follow the new paths.

## [2.2.0] - 2026-10-01

The new `postbag mcp` launcher lets MCP installers run Postbag by its
Expand Down Expand Up @@ -386,7 +403,8 @@ Four commits from "bridge" to "postbag" on the day the idea was born:
the ledger became the only state, `open` became human-only, and every
refusal learned to say stop.

[Unreleased]: https://github.com/parasxos/postbag/compare/v2.2.0...HEAD
[Unreleased]: https://github.com/parasxos/postbag/compare/v2.2.1...HEAD
[2.2.1]: https://github.com/parasxos/postbag/releases/tag/v2.2.1
[2.2.0]: https://github.com/parasxos/postbag/releases/tag/v2.2.0
[2.1.0]: https://github.com/parasxos/postbag/releases/tag/v2.1.0
[2.0.0]: https://github.com/parasxos/postbag/releases/tag/v2.0.0
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
# letters through a host session's native door, which a container does not have,
# so native delivery from this image is unsupported and unverified.
FROM python:3.12-slim
ARG POSTBAG_VERSION=2.2.0
ARG POSTBAG_VERSION=2.2.1
RUN pip install --no-cache-dir "postbag[mcp]==${POSTBAG_VERSION}"
ENTRYPOINT ["postbag-mcp"]
11 changes: 2 additions & 9 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
include postbag
include CONCEPT.md CHANGELOG.md .github/SECURITY.md .github/CONTRIBUTING.md
include test_postbag.py test_hardening.py test_transports.py
include test_names.py test_presentation.py
include test_bags.py test_bag_context.py
include test_inventory.py
include test_inventory_terminal.py
include test_resume.py
include test_mcp*.py test_review_core.py test_core_2.py
include test_leave.py
include docs/demo.tape docs/demo-env.sh docs/readme-research.md
recursive-include tests test_*.py
include docs/demo.tape docs/demo_mcp.py docs/readme-research.md
include docs/native-compatibility.md
include docs/mcp.md
include server.json llms-install.md
Loading
Loading