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.
- {mootup-0.2.0 → mootup-0.2.1}/PKG-INFO +1 -1
- mootup-0.2.1/docs/publish.md +84 -0
- mootup-0.2.1/docs/specs/moot-up-progress-output.md +592 -0
- mootup-0.2.1/docs/specs/post-create-fixes.md +424 -0
- {mootup-0.2.0 → mootup-0.2.1}/pyproject.toml +1 -1
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/__init__.py +1 -1
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/devcontainer.py +24 -29
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/launch.py +28 -6
- mootup-0.2.1/src/moot/templates/devcontainer/post-create.sh +28 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_devcontainer.py +101 -28
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_launch.py +18 -6
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_templates.py +81 -2
- {mootup-0.2.0 → mootup-0.2.1}/uv.lock +1 -1
- mootup-0.2.0/src/moot/templates/devcontainer/post-create.sh +0 -23
- {mootup-0.2.0 → mootup-0.2.1}/.github/workflows/publish.yml +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/.gitignore +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/LICENSE +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/README.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/docs/specs/devcontainer-orchestration.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/docs/specs/moot-cli-brand-login.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/docs/specs/moot-init-full-provisioning.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/__main__.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/__init__.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/channel_adapter.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/channel_runner.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/mcp_adapter.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/mcp_runner.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/notification_core.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/notify_runner.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/adapters/tmux_delivery.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/auth.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/cli.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/config.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/id_encoding.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/lifecycle.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/models.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/provision.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/response_format.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/scaffold.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/team_profile.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/CLAUDE.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/devcontainer/devcontainer.json +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/devcontainer/run-moot-channel.sh +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/devcontainer/run-moot-mcp.sh +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/devcontainer/run-moot-notify.sh +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/doc-curation/SKILL.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/handoff/SKILL.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/leader-workflow/SKILL.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/librarian-workflow/SKILL.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/product-workflow/SKILL.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/spec-checklist/SKILL.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/skills/verify/SKILL.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-3/CLAUDE.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-3/README.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-3/team.toml +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4/CLAUDE.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4/README.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4/team.toml +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-observer/CLAUDE.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-observer/README.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-observer/team.toml +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-parallel/CLAUDE.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-parallel/README.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-parallel/team.toml +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-split-leader/CLAUDE.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-split-leader/README.md +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/src/moot/templates/teams/loop-4-split-leader/team.toml +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/__init__.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_adapters/__init__.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_auth.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_cli.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_config.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_example.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_lifecycle.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_models.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_package.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_provision.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_response_format.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_scaffold.py +0 -0
- {mootup-0.2.0 → mootup-0.2.1}/tests/test_security.py +0 -0
|
@@ -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`.
|