mootup 0.2.0__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. {mootup-0.2.0 → mootup-0.2.1}/PKG-INFO +1 -1
  2. mootup-0.2.1/docs/publish.md +84 -0
  3. mootup-0.2.1/docs/specs/moot-up-progress-output.md +592 -0
  4. mootup-0.2.1/docs/specs/post-create-fixes.md +424 -0
  5. {mootup-0.2.0 → mootup-0.2.1}/pyproject.toml +1 -1
  6. {mootup-0.2.0 → mootup-0.2.1}/src/moot/__init__.py +1 -1
  7. {mootup-0.2.0 → mootup-0.2.1}/src/moot/devcontainer.py +24 -29
  8. {mootup-0.2.0 → mootup-0.2.1}/src/moot/launch.py +28 -6
  9. mootup-0.2.1/src/moot/templates/devcontainer/post-create.sh +28 -0
  10. {mootup-0.2.0 → mootup-0.2.1}/tests/test_devcontainer.py +101 -28
  11. {mootup-0.2.0 → mootup-0.2.1}/tests/test_launch.py +18 -6
  12. {mootup-0.2.0 → mootup-0.2.1}/tests/test_templates.py +81 -2
  13. {mootup-0.2.0 → mootup-0.2.1}/uv.lock +1 -1
  14. mootup-0.2.0/src/moot/templates/devcontainer/post-create.sh +0 -23
  15. {mootup-0.2.0 → mootup-0.2.1}/.github/workflows/publish.yml +0 -0
  16. {mootup-0.2.0 → mootup-0.2.1}/.gitignore +0 -0
  17. {mootup-0.2.0 → mootup-0.2.1}/LICENSE +0 -0
  18. {mootup-0.2.0 → mootup-0.2.1}/README.md +0 -0
  19. {mootup-0.2.0 → mootup-0.2.1}/docs/specs/devcontainer-orchestration.md +0 -0
  20. {mootup-0.2.0 → mootup-0.2.1}/docs/specs/moot-cli-brand-login.md +0 -0
  21. {mootup-0.2.0 → mootup-0.2.1}/docs/specs/moot-init-full-provisioning.md +0 -0
  22. {mootup-0.2.0 → mootup-0.2.1}/src/moot/__main__.py +0 -0
  23. {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/__init__.py +0 -0
  24. {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/channel_adapter.py +0 -0
  25. {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/channel_runner.py +0 -0
  26. {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/mcp_adapter.py +0 -0
  27. {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/mcp_runner.py +0 -0
  28. {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/notification_core.py +0 -0
  29. {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/notify_runner.py +0 -0
  30. {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/tmux_delivery.py +0 -0
  31. {mootup-0.2.0 → mootup-0.2.1}/src/moot/auth.py +0 -0
  32. {mootup-0.2.0 → mootup-0.2.1}/src/moot/cli.py +0 -0
  33. {mootup-0.2.0 → mootup-0.2.1}/src/moot/config.py +0 -0
  34. {mootup-0.2.0 → mootup-0.2.1}/src/moot/id_encoding.py +0 -0
  35. {mootup-0.2.0 → mootup-0.2.1}/src/moot/lifecycle.py +0 -0
  36. {mootup-0.2.0 → mootup-0.2.1}/src/moot/models.py +0 -0
  37. {mootup-0.2.0 → mootup-0.2.1}/src/moot/provision.py +0 -0
  38. {mootup-0.2.0 → mootup-0.2.1}/src/moot/response_format.py +0 -0
  39. {mootup-0.2.0 → mootup-0.2.1}/src/moot/scaffold.py +0 -0
  40. {mootup-0.2.0 → mootup-0.2.1}/src/moot/team_profile.py +0 -0
  41. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/CLAUDE.md +0 -0
  42. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/devcontainer/devcontainer.json +0 -0
  43. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/devcontainer/run-moot-channel.sh +0 -0
  44. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/devcontainer/run-moot-mcp.sh +0 -0
  45. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/devcontainer/run-moot-notify.sh +0 -0
  46. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/doc-curation/SKILL.md +0 -0
  47. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/handoff/SKILL.md +0 -0
  48. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/leader-workflow/SKILL.md +0 -0
  49. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/librarian-workflow/SKILL.md +0 -0
  50. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/product-workflow/SKILL.md +0 -0
  51. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/spec-checklist/SKILL.md +0 -0
  52. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/verify/SKILL.md +0 -0
  53. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-3/CLAUDE.md +0 -0
  54. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-3/README.md +0 -0
  55. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-3/team.toml +0 -0
  56. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4/CLAUDE.md +0 -0
  57. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4/README.md +0 -0
  58. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4/team.toml +0 -0
  59. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-observer/CLAUDE.md +0 -0
  60. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-observer/README.md +0 -0
  61. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-observer/team.toml +0 -0
  62. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-parallel/CLAUDE.md +0 -0
  63. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-parallel/README.md +0 -0
  64. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-parallel/team.toml +0 -0
  65. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-split-leader/CLAUDE.md +0 -0
  66. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-split-leader/README.md +0 -0
  67. {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-split-leader/team.toml +0 -0
  68. {mootup-0.2.0 → mootup-0.2.1}/tests/__init__.py +0 -0
  69. {mootup-0.2.0 → mootup-0.2.1}/tests/test_adapters/__init__.py +0 -0
  70. {mootup-0.2.0 → mootup-0.2.1}/tests/test_auth.py +0 -0
  71. {mootup-0.2.0 → mootup-0.2.1}/tests/test_cli.py +0 -0
  72. {mootup-0.2.0 → mootup-0.2.1}/tests/test_config.py +0 -0
  73. {mootup-0.2.0 → mootup-0.2.1}/tests/test_example.py +0 -0
  74. {mootup-0.2.0 → mootup-0.2.1}/tests/test_lifecycle.py +0 -0
  75. {mootup-0.2.0 → mootup-0.2.1}/tests/test_models.py +0 -0
  76. {mootup-0.2.0 → mootup-0.2.1}/tests/test_package.py +0 -0
  77. {mootup-0.2.0 → mootup-0.2.1}/tests/test_provision.py +0 -0
  78. {mootup-0.2.0 → mootup-0.2.1}/tests/test_response_format.py +0 -0
  79. {mootup-0.2.0 → mootup-0.2.1}/tests/test_scaffold.py +0 -0
  80. {mootup-0.2.0 → mootup-0.2.1}/tests/test_security.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mootup
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: CLI + MCP adapters for Moot agent teams
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -0,0 +1,84 @@
1
+ # Publishing `mootup` to PyPI
2
+
3
+ One-page runbook for cutting a new `mootup` release. Every new user who
4
+ runs `moot init` + `moot up` hits `pip install mootup` in the bundled
5
+ `post-create.sh`, so PyPI must stay current with tagged versions.
6
+
7
+ ## Prerequisites
8
+
9
+ - PyPI account on <https://pypi.org> with upload rights on the `mootup`
10
+ project.
11
+ - `twine` installed: `pip install twine` (or `uv tool install twine`).
12
+ - Credentials available to `twine` via either:
13
+ - `~/.pypirc` with a `[pypi]` section containing an API token, or
14
+ - environment: `TWINE_USERNAME=__token__` and
15
+ `TWINE_PASSWORD=pypi-AgEI…` exported for the shell session.
16
+ - `build` installed: `pip install build` (skip if you use `uv build`).
17
+
18
+ ## Version bump
19
+
20
+ Two authoritative sites; both must match.
21
+
22
+ - `src/moot/__init__.py` → `__version__ = "<new>"`
23
+ - `pyproject.toml` → `version = "<new>"`
24
+
25
+ Confirm no stray hard-coded version refs:
26
+
27
+ ```bash
28
+ grep -rn '0\.2\.' src/ pyproject.toml
29
+ # allow list: __init__.py + pyproject.toml only
30
+ ```
31
+
32
+ ## Build
33
+
34
+ ```bash
35
+ rm -rf dist/
36
+ python -m build # or: uv build
37
+ ```
38
+
39
+ Produces `dist/mootup-<new>-py3-none-any.whl` and
40
+ `dist/mootup-<new>.tar.gz`.
41
+
42
+ ## Upload
43
+
44
+ ```bash
45
+ twine upload dist/*
46
+ ```
47
+
48
+ Twine prompts for credentials if `~/.pypirc` and `TWINE_*` are both
49
+ absent. On success it prints a URL like
50
+ `https://pypi.org/project/mootup/<new>/`.
51
+
52
+ ## Post-publish smoke
53
+
54
+ Install from PyPI in a clean venv and confirm the version:
55
+
56
+ ```bash
57
+ python -m venv /tmp/mootup-smoke
58
+ source /tmp/mootup-smoke/bin/activate
59
+ pip install 'mootup==<new>'
60
+ moot --version # should print: moot <new>
61
+ deactivate
62
+ rm -rf /tmp/mootup-smoke
63
+ ```
64
+
65
+ ## Tag and push
66
+
67
+ ```bash
68
+ git tag v<new>
69
+ git push origin v<new>
70
+ ```
71
+
72
+ Optional but recommended — keeps the release history aligned with
73
+ PyPI. If the tag is pushed before `twine upload` and the upload fails,
74
+ delete with `git push origin :refs/tags/v<new>` and retry.
75
+
76
+ ## Troubleshooting
77
+
78
+ - **`HTTPError: 403 Forbidden` on upload.** Token is missing upload
79
+ rights on the `mootup` project, or scoped to a different project.
80
+ Generate a new project-scoped token on PyPI.
81
+ - **`File already exists` on upload.** PyPI does not allow re-uploading
82
+ the same version. Bump the version and rebuild.
83
+ - **`mootup <new>` not found from `pip install`.** PyPI CDN can lag by
84
+ up to a minute after upload. Retry, or pass `--no-cache-dir`.