Skip to content

Commit deb82c1

Browse files
2.0.1 — fix the funding link that shipped to PyPI
The Buy Me a Coffee handle was wrong (buymeacoffee.com/piyushmishra, 404). The fix landed on main after v2.0.0 was tagged, so the 2.0.0 sdist and wheel — and therefore the README rendered on the PyPI project page — still carried the dead link. PyPI releases are immutable, so correcting it requires a new version. The version bump covers she/__init__.py, pyproject.toml, she.toml, the VS Code extension and the docs that name a version. Guards added so this cannot recur: tests assert that every copy of the funding link matches, that the README PyPI renders contains a working one, and that the version agrees across all four places that declare it. The wheel metadata was inspected before tagging this time rather than after publishing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 9a25456 commit deb82c1

9 files changed

Lines changed: 81 additions & 6 deletions

File tree

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ body:
4343
attributes:
4444
label: SHE version
4545
description: "`she --version`"
46-
placeholder: SHE 2.0.0
46+
placeholder: SHE 2.0.1
4747
validations:
4848
required: true
4949
- type: input

.github/release-notes.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
## SHE 2.0.1
2+
3+
A metadata fix on top of 2.0.0. The language, standard library and sandbox are unchanged.
4+
5+
The Buy Me a Coffee link used the wrong handle, which returned 404. PyPI releases are
6+
immutable, so the README on the 2.0.0 project page could not be corrected in place —
7+
this release exists to fix it. Tests now assert the funding link and the version agree
8+
everywhere, so neither can drift into a release again.
9+
10+
Everything below describes SHE 2.0.
11+
12+
---
13+
114
## SHE 2.0
215

316
A programming language that reads like English — and can't touch your machine unless you say so.

CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,25 @@
22

33
All notable changes to SHE. This project follows [semantic versioning](https://semver.org).
44

5+
## [2.0.1] — 2026-08-27
6+
7+
A metadata fix. No change to the language, the standard library or the sandbox.
8+
9+
### Fixed
10+
11+
- The Buy Me a Coffee link used the wrong handle
12+
(`buymeacoffee.com/piyushmishra`, which returns 404). PyPI releases are
13+
immutable, so the README shown on the 2.0.0 project page could not be
14+
corrected in place — hence this release.
15+
- Added `.github/FUNDING.yml`, which is what renders the Sponsor button on the
16+
repository and on every issue and pull request.
17+
18+
### Added
19+
20+
- Tests asserting the funding link is identical everywhere, and that the version
21+
agrees across `she/__init__.py`, `pyproject.toml`, `she.toml` and the VS Code
22+
extension — so neither can drift into a release again.
23+
524
## [2.0.0] — 2026-08-27
625

726
A complete rewrite. SHE 2.0 does not run SHE 1.0 programs; the old interpreter is
@@ -119,4 +138,5 @@ Defects carried over from 1.0, each now covered by a test:
119138

120139
The original interpreter, kept on the `v1.0.0` branch for history. Unmaintained.
121140

141+
[2.0.1]: https://github.com/ni-sh-a-char/SHE/releases/tag/v2.0.1
122142
[2.0.0]: https://github.com/ni-sh-a-char/SHE/releases/tag/v2.0.0

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ The VS Code extension in [`editors/vscode`](editors/vscode) gives syntax highlig
318318

319319
```sh
320320
cd editors/vscode && npm install && npm run package
321-
code --install-extension she-lang-2.0.0.vsix
321+
code --install-extension she-lang-2.0.1.vsix
322322
```
323323

324324
Any editor that speaks LSP can use `she lsp` directly.

editors/vscode/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "she-lang",
33
"displayName": "SHE",
44
"description": "Syntax highlighting, snippets and live diagnostics for the SHE programming language.",
5-
"version": "2.0.0",
5+
"version": "2.0.1",
66
"publisher": "she-lang",
77
"license": "Apache-2.0",
88
"icon": "icon.png",

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "she-lang"
7-
version = "2.0.0"
7+
version = "2.0.1"
88
description = "A programming language that reads like English, with permissions built in."
99
readme = "README.md"
1010
requires-python = ">=3.9"

she.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# SHE project manifest.
22
name = "she"
3-
version = "2.0.0"
3+
version = "2.0.1"
44
entry = "examples/01-hello.she"
55

66
# Permissions this project's examples need when run with `she run`.

she/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
format_source(text) canonical formatting
1212
"""
1313

14-
__version__ = "2.0.0"
14+
__version__ = "2.0.1"
1515
__all__ = [
1616
"__version__", "run", "run_file", "Interpreter", "Sandbox", "Grant",
1717
"parse", "format_source", "SheError",

tests/test_tooling.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io
88
import json
99
import os
10+
import re
1011
import subprocess
1112
import sys
1213

@@ -315,3 +316,44 @@ def test_lsp_completes_module_members():
315316
labels = [item["label"] for item in completion["result"]["items"]]
316317
assert "sqrt" in labels
317318
assert "median" in labels
319+
320+
321+
# --- packaging metadata -----------------------------------------------------
322+
323+
REPO = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
324+
FUNDING = "https://buymeacoffee.com/piyushmishra00"
325+
326+
327+
def read(*parts):
328+
with open(os.path.join(REPO, *parts), encoding="utf-8") as handle:
329+
return handle.read()
330+
331+
332+
def test_the_funding_link_is_the_same_everywhere():
333+
"""A wrong handle shipped to PyPI once, where releases are immutable and the
334+
only fix is a new version. Every copy of the link is checked here now."""
335+
wrong = []
336+
for name in ("README.md", "pyproject.toml", "CONTRIBUTING.md",
337+
"docs/README.md", ".github/FUNDING.yml", ".github/release-notes.md",
338+
"site/index.html", "site/docs.html", "site/playground.html"):
339+
text = read(*name.split("/"))
340+
for found in re.findall(r"https://buymeacoffee\.com/[A-Za-z0-9_-]+", text):
341+
if found != FUNDING:
342+
wrong.append(f"{name}: {found}")
343+
assert not wrong, "these point at the wrong Buy Me a Coffee handle: " + "; ".join(wrong)
344+
345+
346+
def test_the_readme_pypi_will_show_has_a_working_funding_link():
347+
"""pyproject points long_description at README.md, so this is the text that
348+
ends up on the PyPI project page."""
349+
readme = read("README.md")
350+
assert FUNDING in readme
351+
assert 'readme = "README.md"' in read("pyproject.toml")
352+
353+
354+
def test_the_version_is_the_same_everywhere():
355+
import she
356+
version = she.__version__
357+
assert f'version = "{version}"' in read("pyproject.toml")
358+
assert f'version = "{version}"' in read("she.toml")
359+
assert f'"version": "{version}"' in read("editors", "vscode", "package.json")

0 commit comments

Comments
 (0)