Skip to content

feat: public release — docs, PyPI metadata, GitHub templates#2

Merged
nathanschram merged 10 commits intomasterfrom
feature/ci-and-ux-improvements
Feb 25, 2026
Merged

feat: public release — docs, PyPI metadata, GitHub templates#2
nathanschram merged 10 commits intomasterfrom
feature/ci-and-ux-improvements

Conversation

@nathanschram
Copy link
Contributor

@nathanschram nathanschram commented Feb 25, 2026

Summary

Prepares Untether for public release as an open-source PyPI package.

  • Governance files: CODE_OF_CONDUCT.md (Contributor Covenant v2.1), SECURITY.md, CONTRIBUTORS.md
  • GitHub templates: bug report, feature request, PR template, issue config
  • PyPI metadata: v0.22.2, PEP 639 SPDX license, Little Bear Apps as author/maintainer, 14 classifiers, 8 keywords, well-known project URLs
  • CHANGELOG: fix 101 broken URLs (banteg/untether → banteg/takopi)
  • README: visual refresh with emojis, section dividers, absolute GitHub URLs for PyPI rendering, removed takopi logo, added TOC
  • All doc links: point to GitHub repo (docs/ directory), no external site dependency
  • Version bump: 0.22.2 for clean trusted publisher release with verified details + attestations
  • Other: subscription footer, graceful restart, PTY stdin fix, poller drain fix

Test plan

  • uv run pytest — 829 passed, 80.84% coverage
  • uv run ruff check src tests — all checks passed
  • uv build — wheel + sdist build clean
  • Package metadata verified in built wheel (SPDX license, correct author)
  • Merge → tag v0.22.2 → release workflow publishes via trusted publishing
  • Verify PyPI page shows "Verified details" with green checkmarks

🤖 Generated with Claude Code

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>
@chatgpt-codex-connector
Copy link

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

nathanschram and others added 7 commits February 25, 2026 11:24
- 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>
@nathanschram nathanschram changed the title feat: subscription footer, graceful restart, CI hardening feat: public release — docs, PyPI metadata, GitHub templates Feb 25, 2026
nathanschram and others added 2 commits February 26, 2026 02:11
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>
@nathanschram nathanschram merged commit aed60d7 into master Feb 25, 2026
15 checks passed
@nathanschram nathanschram deleted the feature/ci-and-ux-improvements branch February 25, 2026 15:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant