docs(changelog): cut 0.2.0 - #144
Conversation
|
Warning Review limit reached
On-demand reviews are free for the next 29 days. After that, they cost $0.25 per reviewed file. Or wait 4 minutes for your next included review. View limit detailsLimit details: You’ve used the included review currently available. Your 98 included PR review attempts over the past 7 days set your current allowance at 1 review per hour. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Team Run ID: 📒 Files selected for processing (1)
Comment |
30b262b to
9bd1c8e
Compare
robinjhuang
left a comment
There was a problem hiding this comment.
Auto-approved under the full-autonomy policy.
Gates verified at 9bd1c8e5dd3a0aa267aeebea9e8cc8807d5bf611:
full-autonomylabel present- assigned to, or review requested from, @robinjhuang
- not a draft
- 8 required check(s) green — none failing, none pending
Issued by full-autonomy-approve.yml (run). This approval attests
that the machine gates above passed at this commit. It does not attest that a
human read the diff.
ELI-5
This moves everything under
## [Unreleased]in the changelog under a## [0.2.0] - 2026-09-10heading, so the next GitHub Release (tagv0.2.0) has a matching changelog section. Nothing else changes: the version is injected from the tag at publish time, sopyproject.tomlstays a placeholder per CONTRIBUTING.md.#141 has merged, so this is the one-commit cut on top of
main.What ships in 0.2.0
Asset.get_download_url()/AsyncAsset.get_download_url()(feat(assets): add Asset.get_download_url and document Router image-to-image #142)ApiError.body_excerpt, shown bystr()at both layers (feat: name the status on an unrecognised error and keep the body that explains it #141)http_<status>instead of"error"(feat: name the status on an unrecognised error and keep the body that explains it #141)Why 0.2.0 rather than 0.1.10
The
.codestring for an unrecognised error changes, and it keeps the two SDKs in lockstep with the TypeScript 0.2.0 cut. Edit the heading in this PR if 0.1.10 is preferred.Draft release notes for
v0.2.0Release notes (paste into the GitHub Release)
Uploaded assets get a directly-fetchable URL, and an error answered by something in front of the service now says so — and keeps the one line that explains it.
Highlights
Asset.get_download_url()/AsyncAsset.get_download_url(). A directly-fetchable URL for an uploaded asset's bytes, mirroringOutput.get_download_url()(sameDownloadUrl, commits the asset first if needed). On Comfy Cloud it is a short-lived signed URL any fetcher can read untilexpires_at, which is what lets a local image be passed to a URL-taking image-to-image model viaclient.models.run(): upload the file as an asset, resolve its URL, put the URL in the model's input. The README's "Image to image — upload an asset first" section walks through the flow.An error nothing in the stack recognised names its status. Such a response now carries
.code == "http_<status>"(http_503,http_500) instead of"error". It is reached only after the envelope's owncode, Router's error bucket and the status table have all declined, so a bare401still maps toUnauthorizedand every documented code is untouched. Read it as answered by something in front of Router rather than by the service itself, so no service verdict was reached; retry per your own policy — nothing about what the SDK retries changed.The body that explains a bare
503is kept. A load balancer'sno healthy upstreamorupstream connect error or disconnect/reset before headersarrives as plain text with no JSON and no request id, and used to be discarded with the response. It is now oncomfy_low.errors.ApiError.body_excerpt, andstr()of the exception you catch — at both the protocol and the SDK layer — readsHTTP 503: no healthy upstream. The excerpt is one line, capped at 256 characters, with control, bidi and zero-width characters replaced, and it isNonewhenever the response stated a message of its own.Upgrading
Additive except for one string: code that matched the literal
"error"on an unrecognisedComfyErrorshould matchcode.startswith("http_")instead.Full detail in CHANGELOG.md.
Not in this release
do-not-mergeuntil the router queue routes are deployed to cloud.