feat: public release — docs, PyPI metadata, GitHub templates#2
Merged
nathanschram merged 10 commits intomasterfrom Feb 25, 2026
Merged
feat: public release — docs, PyPI metadata, GitHub templates#2nathanschram merged 10 commits intomasterfrom
nathanschram merged 10 commits intomasterfrom
Conversation
Subscription usage footer:
- Configurable [footer] in untether.toml to show 5h/weekly subscription
usage instead of/alongside API costs
- FooterSettings model with show_api_cost and show_subscription_usage
- format_usage_compact() for single-line footer rendering
Graceful restart:
- /restart command drains active runs before clean exit
- SIGTERM/SIGINT signal handlers trigger graceful drain
- New runs rejected during drain with "restarting" message
- systemd Restart=always brings process back up
CI hardening:
- pytest matrix: Python 3.12, 3.13, 3.14 (validates requires-python)
- pip-audit: dependency vulnerability scanning (PyPA advisory DB)
- bandit: Python SAST (security static analysis)
- uv lock --check: lockfile validation
- All third-party actions pinned to commit SHAs (supply chain protection)
- Top-level permissions: {} for least-privilege
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
- Run ruff format on all src/ and tests/ files (31 files reformatted) - Downgrade pre-existing ty diagnostics to warnings (invalid-argument-type, unresolved-attribute, invalid-assignment, not-subscriptable) — all pre-existing, none introduced by our changes - Fix docs prebuild script to reference CHANGELOG.md (uppercase) after rename Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add standard open-source governance files (CODE_OF_CONDUCT.md, SECURITY.md, CONTRIBUTORS.md), GitHub issue/PR templates, and update PyPI metadata for v0.22.1 release. - CODE_OF_CONDUCT.md: Contributor Covenant v2.1 (AU English) - SECURITY.md: vulnerability disclosure policy - CONTRIBUTORS.md: 13 contributors with banteg as original author - GitHub templates: bug report, feature request, PR template - pyproject.toml: version 0.22.1, keywords, 14 classifiers, docs URLs - CHANGELOG.md: fix 101 broken URLs (banteg/untether → banteg/takopi) - README.md: fix engine guide links, point to untether.cc - All URLs updated: untether.dev → untether.cc - LICENSE: fork copyright lines for LBA and Nathan Schram - Fix PTY stdin scoping in claude runner - Fix poller drain and shutdown reset in telegram loop Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove takopi octopus logo (not ours) - Add table of contents - Add pipx as alternative install method alongside uv - Switch license badge to static (shields.io can't read from private-turned-public repos until merged to default branch) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add emoji markers to all section headings and feature sub-headings - Add GitHub alert blocks (TIP, NOTE, WARNING) for key callouts - Add horizontal rules between major sections for scannability - Keep table of contents with updated anchor links Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
All documentation links now point to the docs/ directory in the repo rather than untether.cc. The docs site URL can be restored when it goes live. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Author: "Little Bear Apps" (was "Nathan Schram")
- License: PEP 639 SPDX expression `license = "MIT"` (was dumping
full license text via `{ file = "LICENSE" }`)
- Remove deprecated License:: classifier (PEP 639 supersedes it)
- Add maintainers field
- README: convert GitHub-specific alerts to cross-renderer bold text
- README: convert relative doc links to absolute GitHub URLs so they
resolve on PyPI
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Version bump to 0.22.2 for clean trusted publisher release - Add .git suffix to Repository URL (PyPI well-known label convention) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
uuid.uuid7 was added in Python 3.14. The test was asserting it exists on all versions, causing CI failures on 3.12 and 3.13. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Prepares Untether for public release as an open-source PyPI package.
Test plan
uv run pytest— 829 passed, 80.84% coverageuv run ruff check src tests— all checks passeduv build— wheel + sdist build clean🤖 Generated with Claude Code