Skip to content

Commit 25a37b7

Browse files
committed
release: 0.7.0
1 parent 69e0d13 commit 25a37b7

5 files changed

Lines changed: 383 additions & 218 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 168 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -1,155 +1,168 @@
1-
# Changelog
2-
3-
## 0.6.0
4-
5-
### Added
6-
7-
- Add read-only `Api.export_draft_to_markdown(draft_id)` with the original draft, exported Markdown, and unsupported-node details.
8-
- Add `substack drafts export DRAFT_ID`, including stable JSON output and safe `--output` and `--force` file handling.
9-
- Reverse-render every Substack node supported by Markdown import, including formatting, nested lists, images and captions, code languages, footnotes, math, pull quotes, and callouts.
10-
- Preserve unsupported nodes and unknown fields as versioned, decodable `python-substack-node:v1` markers instead of silently dropping them.
11-
12-
## 0.5.0
13-
14-
### Added
15-
16-
- Resolve `publication_url` dynamically against Substack subdomains and custom domains.
17-
- Allow optional `timeout` configuration for the API client and CLI.
18-
- Detect local image MIME types (JPEG, PNG, GIF, WebP) for uploads instead of defaulting to JPEG.
19-
- Add Dependabot configuration (#74).
20-
21-
### Improved
22-
23-
- Raise `SubstackRequestException` explicitly instead of failing silently when a publication is unavailable.
24-
- Expand secret redaction to cookie-like values in request error messages to prevent credential leaks.
25-
- Ensure bounded retries apply strictly to safe GET and DELETE requests only.
26-
- Bump `fastmcp` from 3.2.0 to 3.4.7 (#73).
27-
- Bump `markdown-it-py` from 3.0.0 to 4.2.0 (#72).
28-
- Bump `pre-commit` from 4.6.1 to 4.6.2 (#71).
29-
- Bump `requests` from 2.33.0 to 2.34.2 (#70).
30-
- Bump `python-dotenv` from 1.2.2 to 1.2.3 (#69).
31-
32-
## 0.4.0
33-
34-
### Added
35-
36-
- Seven new MCP tools for read operations and safe publishing: `get_status`, `list_publications`, `list_drafts`, `get_draft`, `schedule_draft`, `unschedule_draft`, and `publish_draft_checked`.
37-
- Pre-publish validation, interactive confirmation requirements, and no-email defaults for the new `publish_draft_checked` MCP tool.
38-
- Verified MCP client configuration examples in `docs/mcp.md`.
39-
- Documentation for Gemini CLI with Vertex AI (`docs/gemini-vertex-ai.md`).
40-
41-
### Improved
42-
43-
- Simplify MCP draft creation by routing through the existing `Api.create_draft_from_markdown` SDK helper, preserving response format.
44-
- Document the legacy `publish_draft` MCP tool as the compatibility interface.
45-
- Bump `cryptography` dependency from `48.0.1` to `50.0.0` (#68).
46-
47-
## 0.3.0
48-
49-
### Added
50-
51-
- GitHub Pages documentation with a task-oriented index for installation,
52-
authentication, CLI, Python, Markdown, MCP, safety, and troubleshooting.
53-
- A five-minute Markdown-to-unpublished-draft walkthrough using the existing
54-
before and after images.
55-
- Tested examples for draft creation, scheduling, publication selection,
56-
stable JSON automation, and cookie authentication verification.
57-
- A documentation project link in package metadata and repository navigation.
58-
59-
### Improved
60-
61-
- Add Jekyll front matter to existing documentation while preserving every
62-
previous documentation path.
63-
- Keep creating, scheduling, publishing, and deleting clearly separated in the
64-
onboarding and safety guides.
65-
66-
No runtime interface changed in this release.
67-
68-
## 0.2.0
69-
70-
### Added
71-
72-
- Outcome-focused documentation for authentication, legacy CLI commands,
73-
low-level Python construction, YAML drafts, MCP, compatibility, security,
74-
contributing, and adoption metrics.
75-
- Offline tests for the documented unauthenticated installation checks and
76-
local documentation links.
77-
- A documented compatibility commitment covering the Python API, five console
78-
scripts, unified CLI, JSON keys, environment variables, and MCP tools.
79-
80-
### Improved
81-
82-
- Reposition the package around safe writer-side Markdown automation.
83-
- Put the unpublished draft workflow and publishing safeguards first in the
84-
README.
85-
- Classify the package as Beta after four years of compatible releases.
86-
- Update pre-commit, formatting, and import-sorting hooks to current verified
87-
releases.
88-
- Validate the hook runner as a locked development dependency.
89-
- Publish through short-lived PyPI Trusted Publishing credentials instead of a
90-
long-lived API token.
91-
92-
Existing Python APIs, CLI commands, console scripts, defaults, JSON contracts,
93-
environment variables, and MCP tools remain unchanged.
94-
95-
## 0.1.27
96-
97-
### Added
98-
99-
- Unified `substack drafts create MARKDOWN_FILE` command for safe draft-only Markdown creation.
100-
- Markdown rendering for LaTeX, superscript, subscript, pull quotes, and callouts.
101-
- Registered `live` test marker with documented opt-in API and CLI smoke commands.
102-
103-
### Fixed
104-
105-
- Support Substack subscriber responses that provide a `subscribers` list instead of `subscriberCount`.
106-
- Use Substack's current scheduled-release endpoint for scheduling and unscheduling drafts.
107-
- Retry rate-limited GET and DELETE requests with bounded backoff without retrying write-producing POST requests.
108-
109-
### Improved
110-
111-
- Validate offline tests separately from live integrations.
112-
- Validate wheel metadata, console entry points, base installations, and MCP-extra installations on Python 3.10 and 3.14.
113-
- Require release tags, package metadata, and `substack.__version__` to agree before publishing.
114-
115-
## 0.1.26
116-
117-
### Added
118-
119-
- Unified `substack` CLI for publication status and draft operations.
120-
- Commands to list publications, inspect drafts, schedule, unschedule, publish, and delete.
121-
- Stable `--json` output for automation and `--publication-url` overrides.
122-
- Interactive confirmation and non-interactive `--yes` protection for publishing and deletion.
123-
- Pull-request CI across Python 3.10 through 3.14.
124-
125-
### Improved
126-
127-
- Clear CLI error output, exit codes, timezone validation, and secret redaction.
128-
- Package positioning, keywords, operational examples, and release validation.
129-
- PyPI publishing now uploads the exact tested wheel and source distribution.
130-
131-
## 0.1.25
132-
133-
### Added
134-
135-
- Markdown-first draft helper: `Api.create_draft_from_markdown(...)`.
136-
- CLI commands:
137-
- `substack-auth-check`
138-
- `substack-publish-markdown`
139-
- `substack-publish-yaml`
140-
- `substack-mcp`
141-
- Optional MCP extra: `python-substack[mcp]`.
142-
- `.env.example` for setup.
143-
- GitHub issue templates for auth bugs and feature requests.
144-
145-
### Fixed
146-
147-
- Include `substack_mcp` in packaged distributions.
148-
- Fix `examples/publish_post.py --publish` so the flag publishes.
149-
- Correct MCP documentation to use `substack_mcp.mcp_server`.
150-
151-
### Improved
152-
153-
- Reworked README around Markdown, cookie auth, CLI usage, and MCP setup.
154-
- Added PyPI classifiers and project links.
155-
- Added focused tests for CLI behavior and Markdown draft creation.
1+
# Changelog
2+
3+
## 0.7.0
4+
5+
### Added
6+
7+
- Add `Api.update_draft_from_markdown(draft_id, markdown, ...)` method to safely update draft content.
8+
- Add `substack drafts update DRAFT_ID MARKDOWN_FILE` CLI command with `--dry-run` validation.
9+
- Refuse to update drafts containing unsupported nodes to prevent remote data loss.
10+
- Added `--yes` flag to bypass interactive confirmation for script usage.
11+
12+
### Dependencies
13+
14+
- Bump `fastmcp` from 3.4.7 to 4.0.3 (#74).
15+
16+
## 0.6.0
17+
18+
### Added
19+
20+
- Add read-only `Api.export_draft_to_markdown(draft_id)` with the original draft, exported Markdown, and unsupported-node details.
21+
- Add `substack drafts export DRAFT_ID`, including stable JSON output and safe `--output` and `--force` file handling.
22+
- Reverse-render every Substack node supported by Markdown import, including formatting, nested lists, images and captions, code languages, footnotes, math, pull quotes, and callouts.
23+
- Preserve unsupported nodes and unknown fields as versioned, decodable `python-substack-node:v1` markers instead of silently dropping them.
24+
25+
## 0.5.0
26+
27+
### Added
28+
29+
- Resolve `publication_url` dynamically against Substack subdomains and custom domains.
30+
- Allow optional `timeout` configuration for the API client and CLI.
31+
- Detect local image MIME types (JPEG, PNG, GIF, WebP) for uploads instead of defaulting to JPEG.
32+
- Add Dependabot configuration (#74).
33+
34+
### Improved
35+
36+
- Raise `SubstackRequestException` explicitly instead of failing silently when a publication is unavailable.
37+
- Expand secret redaction to cookie-like values in request error messages to prevent credential leaks.
38+
- Ensure bounded retries apply strictly to safe GET and DELETE requests only.
39+
- Bump `fastmcp` from 3.2.0 to 3.4.7 (#73).
40+
- Bump `markdown-it-py` from 3.0.0 to 4.2.0 (#72).
41+
- Bump `pre-commit` from 4.6.1 to 4.6.2 (#71).
42+
- Bump `requests` from 2.33.0 to 2.34.2 (#70).
43+
- Bump `python-dotenv` from 1.2.2 to 1.2.3 (#69).
44+
45+
## 0.4.0
46+
47+
### Added
48+
49+
- Seven new MCP tools for read operations and safe publishing: `get_status`, `list_publications`, `list_drafts`, `get_draft`, `schedule_draft`, `unschedule_draft`, and `publish_draft_checked`.
50+
- Pre-publish validation, interactive confirmation requirements, and no-email defaults for the new `publish_draft_checked` MCP tool.
51+
- Verified MCP client configuration examples in `docs/mcp.md`.
52+
- Documentation for Gemini CLI with Vertex AI (`docs/gemini-vertex-ai.md`).
53+
54+
### Improved
55+
56+
- Simplify MCP draft creation by routing through the existing `Api.create_draft_from_markdown` SDK helper, preserving response format.
57+
- Document the legacy `publish_draft` MCP tool as the compatibility interface.
58+
- Bump `cryptography` dependency from `48.0.1` to `50.0.0` (#68).
59+
60+
## 0.3.0
61+
62+
### Added
63+
64+
- GitHub Pages documentation with a task-oriented index for installation,
65+
authentication, CLI, Python, Markdown, MCP, safety, and troubleshooting.
66+
- A five-minute Markdown-to-unpublished-draft walkthrough using the existing
67+
before and after images.
68+
- Tested examples for draft creation, scheduling, publication selection,
69+
stable JSON automation, and cookie authentication verification.
70+
- A documentation project link in package metadata and repository navigation.
71+
72+
### Improved
73+
74+
- Add Jekyll front matter to existing documentation while preserving every
75+
previous documentation path.
76+
- Keep creating, scheduling, publishing, and deleting clearly separated in the
77+
onboarding and safety guides.
78+
79+
No runtime interface changed in this release.
80+
81+
## 0.2.0
82+
83+
### Added
84+
85+
- Outcome-focused documentation for authentication, legacy CLI commands,
86+
low-level Python construction, YAML drafts, MCP, compatibility, security,
87+
contributing, and adoption metrics.
88+
- Offline tests for the documented unauthenticated installation checks and
89+
local documentation links.
90+
- A documented compatibility commitment covering the Python API, five console
91+
scripts, unified CLI, JSON keys, environment variables, and MCP tools.
92+
93+
### Improved
94+
95+
- Reposition the package around safe writer-side Markdown automation.
96+
- Put the unpublished draft workflow and publishing safeguards first in the
97+
README.
98+
- Classify the package as Beta after four years of compatible releases.
99+
- Update pre-commit, formatting, and import-sorting hooks to current verified
100+
releases.
101+
- Validate the hook runner as a locked development dependency.
102+
- Publish through short-lived PyPI Trusted Publishing credentials instead of a
103+
long-lived API token.
104+
105+
Existing Python APIs, CLI commands, console scripts, defaults, JSON contracts,
106+
environment variables, and MCP tools remain unchanged.
107+
108+
## 0.1.27
109+
110+
### Added
111+
112+
- Unified `substack drafts create MARKDOWN_FILE` command for safe draft-only Markdown creation.
113+
- Markdown rendering for LaTeX, superscript, subscript, pull quotes, and callouts.
114+
- Registered `live` test marker with documented opt-in API and CLI smoke commands.
115+
116+
### Fixed
117+
118+
- Support Substack subscriber responses that provide a `subscribers` list instead of `subscriberCount`.
119+
- Use Substack's current scheduled-release endpoint for scheduling and unscheduling drafts.
120+
- Retry rate-limited GET and DELETE requests with bounded backoff without retrying write-producing POST requests.
121+
122+
### Improved
123+
124+
- Validate offline tests separately from live integrations.
125+
- Validate wheel metadata, console entry points, base installations, and MCP-extra installations on Python 3.10 and 3.14.
126+
- Require release tags, package metadata, and `substack.__version__` to agree before publishing.
127+
128+
## 0.1.26
129+
130+
### Added
131+
132+
- Unified `substack` CLI for publication status and draft operations.
133+
- Commands to list publications, inspect drafts, schedule, unschedule, publish, and delete.
134+
- Stable `--json` output for automation and `--publication-url` overrides.
135+
- Interactive confirmation and non-interactive `--yes` protection for publishing and deletion.
136+
- Pull-request CI across Python 3.10 through 3.14.
137+
138+
### Improved
139+
140+
- Clear CLI error output, exit codes, timezone validation, and secret redaction.
141+
- Package positioning, keywords, operational examples, and release validation.
142+
- PyPI publishing now uploads the exact tested wheel and source distribution.
143+
144+
## 0.1.25
145+
146+
### Added
147+
148+
- Markdown-first draft helper: `Api.create_draft_from_markdown(...)`.
149+
- CLI commands:
150+
- `substack-auth-check`
151+
- `substack-publish-markdown`
152+
- `substack-publish-yaml`
153+
- `substack-mcp`
154+
- Optional MCP extra: `python-substack[mcp]`.
155+
- `.env.example` for setup.
156+
- GitHub issue templates for auth bugs and feature requests.
157+
158+
### Fixed
159+
160+
- Include `substack_mcp` in packaged distributions.
161+
- Fix `examples/publish_post.py --publish` so the flag publishes.
162+
- Correct MCP documentation to use `substack_mcp.mcp_server`.
163+
164+
### Improved
165+
166+
- Reworked README around Markdown, cookie auth, CLI usage, and MCP setup.
167+
- Added PyPI classifiers and project links.
168+
- Added focused tests for CLI behavior and Markdown draft creation.

‎docs/releases/0.7.0.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--
2+
layout: default
3+
title: 0.7.0
4+
parent: Releases
5+
--
6+
7+
# 0.7.0
8+
9+
### Added
10+
11+
- Add Api.update_draft_from_markdown(draft_id, markdown, ...) method to safely update draft content.
12+
- Add substack drafts update DRAFT_ID MARKDOWN_FILE CLI command with --dry-run validation.
13+
- Refuse to update drafts containing unsupported nodes to prevent remote data loss.
14+
- Added --yes flag to bypass interactive confirmation for script usage.
15+
16+
### Dependencies
17+
18+
- Bump astmcp from 3.4.7 to 4.0.3 (#74).

0 commit comments

Comments
 (0)