chore: release v0.7.0 #192

Merged
Grandiras merged 2 commits from issue-140-release into main 2026-09-28 14:02:44 +00:00
Owner

Closes #140.

Release preparation for v0.7.0. No tag is created or pushed here: tagging v0.7.0 publishes the packages, so the maintainer does it after this merges (checklist at the end).

Changelog condensed into release register

## [Unreleased] had grown PR by PR to 455 bullets, with overlaps and intermediate states. It is now ## [0.7.0] - 2026-09-28 with 366 bullets, under a fresh, empty ## [Unreleased], as the 0.6.0 release did (7f672c0). The file has no compare links, and ## [0.6.0] and older are byte-identical (the splice script asserts it).

Section Before After
Breaking changes 165 134
Added 104 86
Changed 72 52
Fixed 78 61
Removed 3 3
Security 33 30
  • The section opens with a short intro and a prominent link to the migration guide. The link is absolute (src/tag/v0.7.0/docs/migrating-to-0.7.md), because the section also becomes the Forgejo release body, where a relative link would not resolve.
  • Every bullet follows the CLAUDE.md style: a bold title, then 1–3 sentences, and ending with the refs. There are no tables and no benchmark numbers. Related bullets are merged: for example, the typed-identifier conversions of #119 are now one bullet per area (com.atproto/client, app.bsky, chat/Ozone/site.standard, Spaces, firehose/Jetstream, datetime, lexgen).
  • Max length is 331 characters; 41 bullets are 300–331 characters (the "~300"). Most of those name several removed types plus a migration.

Verification scripts (in the session scratchpad; verify.py output reproduced here)

  • (a) References: all 34 refs in the old section are still present (#110–#141, #180, #187, #190). #108 is added to the four sync-workflow Security items, which had no ref; it is the PR that fixed them. The upstream atproto#4896 mention is kept too.
  • (b) Breaking changes: there is a mapping for each of the 165 old Breaking bullets:
    • 157 are carried by a Breaking bullet that has a Migration: note and the old refs.
    • 1 (the CursorStreamConsumerOptions move) is an intermediate step, merged into the kept #126 streaming bullet.
    • 7 are folded, because they never shipped in 0.6.0 (see below).
    • All 134 new Breaking bullets carry Migration:. Four more breaking notes live in Removed (Redis store, resilience handler) and Security (login error codes, space-token kid), each with a Migration note.
    • Every kept change is found in docs/migrating-to-0.7.md by keyword.
    • The guide lacked one breaking change: AtProtoClient.LoginAsync / ServerClient.CreateSessionAsync gained allowTakendown before the cancellation token, which breaks a positional token. It was listed only under Added. It is now in the guide's "New Lexicon parameters shift positional arguments" and in the changelog's matching Breaking bullet.
  • (c) Security: each of the 33 old Security bullets maps onto one of the 30 new Security bullets. Two merges: the four workflow items became two, and "pushed-authorization/token/revocation follow the fetch policy" joined "OAuth … no longer reach private addresses". None is dropped.

Folded: API that never shipped in 0.6.0

Each item below was checked against the 7f672c0 tree.

  • Folded into their Added bullet:
    • DistributedCacheOAuthStateStore requires protected options: the type is new in #132.
    • AtProtoServiceAuthOptions.Verifier and the removal of RequireLexiconMethod: both new in #125, changed in #180.
    • MapTapWebhook keeps only its delegate overload: Tap is new in #134.
    • "Claim type constants move to AtProtoClaimTypes": AtProtoServiceAuthDefaults is new in #125, and 0.6 had no claim constants.
    • Tools.Ozone.Report.LiveStats → QueueStats: new in #131.
    • "Enumerate* trimmed to 13": every helper removed was added this cycle, and all 7 enumerators 0.6 had remain.
  • Dropped or corrected inside kept bullets:
    • the WithSessionStore(factory) removal;
    • AtProtoOAuthServerOptions.AllowPrivateNetworks (0.6 had HttpClient, HttpClientTimeout and HandleResolutionTimeout, and those stay listed);
    • IsIssuedRelayUrl;
    • OAuthOptions.MetadataHttpClient ("renamed HttpClient": the 0.6 constructor took the HttpClient itself);
    • the AuthorizationServerDiscovery constructor/IDisposable changes (the type is now internal);
    • AddAtProtoRedisSpaceReplayStore "registers against the new interface" (it was removed);
    • the SpaceServerOptions.BuildRequestUri migration target (also removed);
    • the intermediate AtProtoOAuthService constructor changes of #120/#132/#136 (it is now internal: one bullet, #120/#132/#136/#180);
    • the IsRepoHostAsync concurrency item under Changed and the AtProtoAuthenticationHandler empty-did fix (both APIs are gone);
    • the #sync-CID-checked-with-Verifier item (the option is gone);
    • the did:web case-insensitive-host "fix" from #120, which #125 reversed (a Security item).
  • Internal-only Changed items dropped: from #180, the DTO merges, positional DTO records, lexgen option parsing, and the Unknown* primary constructors. Their public API and wire format are unchanged.

Known inaccuracies fixed

  • The #136 builder mapping named the 0.6 registration AddAtProtoEfCoreSessionStore. The 0.6 name was AddAtProtoEfCoreTokenStore (checked at 7f672c0), and the #124 bullet no longer mentions the intermediate name.
  • new FirehoseConsumer(…): on main, the #122 bullet already read new TypedFirehoseConsumer(…). It stays correct. FirehoseConsumer appears only in its removal.
  • [RequiresTheory]: there was no mention left in the old section, and none is in the new one.
  • The #190 "Faster JSON model (de)serialization" bullet went from 334 to about 240 characters.
  • #124 now lists the 0.6 store names (ISessionStore, IAtProtoTokenStore → IAtProtoSessionStore).
  • The lexgen space-type fix (#141) fixed a regression this cycle introduced. It now sits on the lexgen typed-identifiers bullet, as (#119, #141).

Migration guide

The guide gets two small fixes:

  • It now has the allowTakendown line (above).
  • The "Behaviour changes" line "#sync events are CID-checked whenever a Verifier is set" is dropped, because TypedFirehoseConsumerOptions.Verifier no longer exists.

Nothing else changed. Optional follow-up: the guide still describes some never-shipped intermediate API, which is harmless but not needed by 0.6 users: the LiveStats bullet, the DistributedCacheOAuthStateStore options requirement, the "Tap webhooks" subsection (already framed as a preview), and the lexgen "migrate messages removed" bullet.

Release roll

  • Directory.Build.props: <Version>0.7.0</Version>.
  • release.yml extraction is simulated with the exact awk from the workflow. It yields the intro, the migration link, the 6 subsections and 366 bullets, and stops before ## [0.6.0]. It is 79 KB of body, and jq builds the payload fine.
  • PublicAPI.Unshipped.txt is already empty in every package, so there is nothing to move into Shipped.

Package set (dotnet pack -c Release -p:EnableSourceControlManagerQueries=false)

Package Version Dependencies (nuspec) README / license snupkg
ATProtoNet 0.7.0 Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Logging.Abstractions, System.Formats.Cbor (10.0.10) yes / MIT 1 pdb
ATProtoNet.Server 0.7.0 ATProtoNet only + framework ref Microsoft.AspNetCore.App yes / MIT 1 pdb
ATProtoNet.Server.EntityFrameworkCore 0.7.0 ATProtoNet.Server, Microsoft.EntityFrameworkCore.Relational 10.0.10 + AspNetCore.App yes / MIT 1 pdb
ATProtoNet.Blazor 0.7.0 ATProtoNet.Server, ATProtoNet + AspNetCore.App yes / MIT 1 pdb
ATProtoNet.Aspire.Hosting 0.7.0 Aspire.Hosting, Aspire.Hosting.PostgreSQL 13.4.6 yes / MIT 1 pdb
ATProtoNet.LexiconGenerator (DotnetTool) 0.7.0 none (bundles ATProtoNet.dll) yes / MIT 2 pdbs
  • Descriptions and tags all match the current packages, so no csproj changes.
  • Repository metadata: every nuspec carries repository url="https://git.grandiras.net/Grandiras/ATProto.NET", without .git, which is what Forgejo's package linkage matches on. A pack without the SCM workaround flag also stamps branch and commit (checked on the EF package).
  • SourceLink (pre-existing, not changed here): no source-link document map is embedded in the PDBs. There is no *.sourcelink.json in obj/, because the SDK's built-in SourceLink providers don't recognize the git.grandiras.net host. Microsoft.SourceLink.Gitea (Forgejo speaks the Gitea URL scheme) would enable it. ContinuousIntegrationBuild is also not set in release.yml.
  • Pack warnings (pre-existing): dotnet pack warns once each for samples/ManagedPdsSample and samples/ServerIntegrationSample: "cannot be packaged because packaging has been disabled". The Web SDK sets WarnOnPackingNonPackableProject. Nothing is packed from them. <WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject> in samples/Directory.Build.props would silence it.

Verification

  • Build: dotnet build -c Release --no-incremental: all 16 projects (src, tests, DocSnippets and its generator, samples, the tool and the AppHost) with 0 warnings, 0 errors.
  • Unit suite (Release, run twice): 4964 passed, 0 failed, 5 skipped, both times.
  • Aspire manifest: dotnet run --project samples/ManagedPdsSample.AppHost -- --publisher manifest produced the manifest, and AspireManifest with ATPROTO_REQUIRE_INTEGRATION=1 gave 6/6 passed.
  • PDS integration (ran, podman): it ran against the local ghcr.io/bluesky-social/pds:latest image (no pull), with the CI job's environment, on 127.0.0.1:2599. The CI filter (PdsAdminTests|AuthenticationTests|RepositoryTests|CustomRecordTests|IdentityResolutionTests) with ATPROTO_REQUIRE_INTEGRATION=1 and TreatNoTestsAsError gave 30/30 passed. The container was removed afterwards.
  • Spaces-alpha suite: not run. It needs the non-public spaces-alpha PDS image and PLC network.

Maintainer release checklist

  1. Merge this PR, once the review approves and CI is green.
  2. Tag the merge commit and push the tag, which starts release.yml: git tag v0.7.0 <merge-sha> && git push origin v0.7.0.
  3. Watch release.yml. It builds and tests at 0.7.0, packs, pushes the .nupkgs and .snupkgs to the Forgejo feed and nuget.org, and creates the Forgejo release from the [0.7.0] section.
  4. Check that ATProtoNet.Server.EntityFrameworkCore shows on the repository's Packages tab. The package ID dates from 0.4.0, when it was published orphaned, and Forgejo never re-evaluates the link. If it is missing, relink it:
    curl -X POST -H "Authorization: token $TOKEN" https://git.grandiras.net/api/v1/packages/Grandiras/nuget/ATProtoNet.Server.EntityFrameworkCore/-/link/ATProto.NET (HTTP 201).
  5. On nuget.org, if ATProtoNet.Server.EntityFrameworkCore was deprecated or unlisted when it was merged into Server in 0.5.0, undo that.

🤖 Generated with Claude Code

Closes #140. Release preparation for v0.7.0. **No tag is created or pushed here:** tagging `v0.7.0` publishes the packages, so the maintainer does it after this merges (checklist at the end). ## Changelog condensed into release register `## [Unreleased]` had grown PR by PR to 455 bullets, with overlaps and intermediate states. It is now `## [0.7.0] - 2026-09-28` with 366 bullets, under a fresh, empty `## [Unreleased]`, as the 0.6.0 release did (`7f672c0`). The file has no compare links, and `## [0.6.0]` and older are byte-identical (the splice script asserts it). | Section | Before | After | |---|---|---| | Breaking changes | 165 | 134 | | Added | 104 | 86 | | Changed | 72 | 52 | | Fixed | 78 | 61 | | Removed | 3 | 3 | | Security | 33 | 30 | - The section opens with a short intro and a prominent link to the migration guide. The link is absolute (`src/tag/v0.7.0/docs/migrating-to-0.7.md`), because the section also becomes the Forgejo release body, where a relative link would not resolve. - Every bullet follows the CLAUDE.md style: a bold title, then 1–3 sentences, and ending with the refs. There are no tables and no benchmark numbers. Related bullets are merged: for example, the typed-identifier conversions of #119 are now one bullet per area (`com.atproto`/client, `app.bsky`, chat/Ozone/site.standard, Spaces, firehose/Jetstream, datetime, lexgen). - Max length is 331 characters; 41 bullets are 300–331 characters (the "~300"). Most of those name several removed types plus a migration. ### Verification scripts (in the session scratchpad; `verify.py` output reproduced here) - **(a) References:** all 34 refs in the old section are still present (`#110`–`#141`, `#180`, `#187`, `#190`). `#108` is added to the four sync-workflow Security items, which had no ref; it is the PR that fixed them. The upstream `atproto#4896` mention is kept too. - **(b) Breaking changes:** there is a mapping for each of the 165 old Breaking bullets: - **157** are carried by a Breaking bullet that has a `Migration:` note and the old refs. - **1** (the `CursorStreamConsumerOptions` move) is an intermediate step, merged into the kept #126 streaming bullet. - **7** are folded, because they never shipped in 0.6.0 (see below). - All 134 new Breaking bullets carry `Migration:`. Four more breaking notes live in Removed (Redis store, resilience handler) and Security (login error codes, space-token `kid`), each with a Migration note. - Every kept change is found in `docs/migrating-to-0.7.md` by keyword. - **The guide lacked one breaking change:** `AtProtoClient.LoginAsync` / `ServerClient.CreateSessionAsync` gained `allowTakendown` before the cancellation token, which breaks a positional token. It was listed only under Added. It is now in the guide's "New Lexicon parameters shift positional arguments" and in the changelog's matching Breaking bullet. - **(c) Security:** each of the 33 old Security bullets maps onto one of the 30 new Security bullets. Two merges: the four workflow items became two, and "pushed-authorization/token/revocation follow the fetch policy" joined "OAuth … no longer reach private addresses". None is dropped. ### Folded: API that never shipped in 0.6.0 Each item below was checked against the `7f672c0` tree. - **Folded into their Added bullet:** - `DistributedCacheOAuthStateStore` requires protected options: the type is new in #132. - `AtProtoServiceAuthOptions.Verifier` and the removal of `RequireLexiconMethod`: both new in #125, changed in #180. - `MapTapWebhook` keeps only its delegate overload: Tap is new in #134. - "Claim type constants move to `AtProtoClaimTypes`": `AtProtoServiceAuthDefaults` is new in #125, and 0.6 had no claim constants. - `Tools.Ozone.Report.LiveStats` → `QueueStats`: new in #131. - "`Enumerate*` trimmed to 13": every helper removed was added this cycle, and all 7 enumerators 0.6 had remain. - **Dropped or corrected inside kept bullets:** - the `WithSessionStore(factory)` removal; - `AtProtoOAuthServerOptions.AllowPrivateNetworks` (0.6 had `HttpClient`, `HttpClientTimeout` and `HandleResolutionTimeout`, and those stay listed); - `IsIssuedRelayUrl`; - `OAuthOptions.MetadataHttpClient` ("renamed `HttpClient`": the 0.6 constructor took the `HttpClient` itself); - the `AuthorizationServerDiscovery` constructor/`IDisposable` changes (the type is now internal); - `AddAtProtoRedisSpaceReplayStore` "registers against the new interface" (it was removed); - the `SpaceServerOptions.BuildRequestUri` migration target (also removed); - the intermediate `AtProtoOAuthService` constructor changes of #120/#132/#136 (it is now internal: one bullet, #120/#132/#136/#180); - the `IsRepoHostAsync` concurrency item under Changed and the `AtProtoAuthenticationHandler` empty-`did` fix (both APIs are gone); - the `#sync`-CID-checked-with-`Verifier` item (the option is gone); - the `did:web` case-insensitive-host "fix" from #120, which #125 reversed (a Security item). - **Internal-only Changed items dropped:** from #180, the DTO merges, positional DTO records, lexgen option parsing, and the `Unknown*` primary constructors. Their public API and wire format are unchanged. ### Known inaccuracies fixed - The #136 builder mapping named the 0.6 registration `AddAtProtoEfCoreSessionStore`. The 0.6 name was `AddAtProtoEfCoreTokenStore` (checked at `7f672c0`), and the #124 bullet no longer mentions the intermediate name. - `new FirehoseConsumer(…)`: on `main`, the #122 bullet already read `new TypedFirehoseConsumer(…)`. It stays correct. `FirehoseConsumer` appears only in its removal. - `[RequiresTheory]`: there was no mention left in the old section, and none is in the new one. - The #190 "Faster JSON model (de)serialization" bullet went from 334 to about 240 characters. - #124 now lists the 0.6 store names (`ISessionStore`, `IAtProtoTokenStore` → `IAtProtoSessionStore`). - The lexgen space-type fix (#141) fixed a regression this cycle introduced. It now sits on the lexgen typed-identifiers bullet, as `(#119, #141)`. ### Migration guide The guide gets two small fixes: - It now has the `allowTakendown` line (above). - The "Behaviour changes" line "`#sync` events are CID-checked whenever a `Verifier` is set" is dropped, because `TypedFirehoseConsumerOptions.Verifier` no longer exists. Nothing else changed. Optional follow-up: the guide still describes some never-shipped intermediate API, which is harmless but not needed by 0.6 users: the `LiveStats` bullet, the `DistributedCacheOAuthStateStore` options requirement, the "Tap webhooks" subsection (already framed as a preview), and the lexgen "migrate messages removed" bullet. ## Release roll - `Directory.Build.props`: `<Version>0.7.0</Version>`. - `release.yml` extraction is simulated with the exact `awk` from the workflow. It yields the intro, the migration link, the 6 subsections and 366 bullets, and stops before `## [0.6.0]`. It is 79 KB of body, and `jq` builds the payload fine. - `PublicAPI.Unshipped.txt` is already empty in every package, so there is nothing to move into `Shipped`. ## Package set (`dotnet pack -c Release -p:EnableSourceControlManagerQueries=false`) | Package | Version | Dependencies (nuspec) | README / license | snupkg | |---|---|---|---|---| | ATProtoNet | 0.7.0 | Microsoft.Extensions.Caching.Abstractions, Microsoft.Extensions.Logging.Abstractions, System.Formats.Cbor (10.0.10) | yes / MIT | 1 pdb | | ATProtoNet.Server | 0.7.0 | **ATProtoNet only** + framework ref Microsoft.AspNetCore.App | yes / MIT | 1 pdb | | ATProtoNet.Server.EntityFrameworkCore | 0.7.0 | ATProtoNet.Server, Microsoft.EntityFrameworkCore.Relational 10.0.10 + AspNetCore.App | yes / MIT | 1 pdb | | ATProtoNet.Blazor | 0.7.0 | ATProtoNet.Server, ATProtoNet + AspNetCore.App | yes / MIT | 1 pdb | | ATProtoNet.Aspire.Hosting | 0.7.0 | Aspire.Hosting, Aspire.Hosting.PostgreSQL 13.4.6 | yes / MIT | 1 pdb | | ATProtoNet.LexiconGenerator (DotnetTool) | 0.7.0 | none (bundles ATProtoNet.dll) | yes / MIT | 2 pdbs | - **Descriptions and tags** all match the current packages, so no csproj changes. - **Repository metadata:** every nuspec carries `repository url="https://git.grandiras.net/Grandiras/ATProto.NET"`, without `.git`, which is what Forgejo's package linkage matches on. A pack without the SCM workaround flag also stamps `branch` and `commit` (checked on the EF package). - **SourceLink (pre-existing, not changed here):** no source-link document map is embedded in the PDBs. There is no `*.sourcelink.json` in `obj/`, because the SDK's built-in SourceLink providers don't recognize the `git.grandiras.net` host. `Microsoft.SourceLink.Gitea` (Forgejo speaks the Gitea URL scheme) would enable it. `ContinuousIntegrationBuild` is also not set in `release.yml`. - **Pack warnings (pre-existing):** `dotnet pack` warns once each for `samples/ManagedPdsSample` and `samples/ServerIntegrationSample`: "cannot be packaged because packaging has been disabled". The Web SDK sets `WarnOnPackingNonPackableProject`. Nothing is packed from them. `<WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>` in `samples/Directory.Build.props` would silence it. ## Verification - **Build:** `dotnet build -c Release --no-incremental`: all 16 projects (src, tests, DocSnippets and its generator, samples, the tool and the AppHost) with **0 warnings, 0 errors**. - **Unit suite (Release, run twice):** 4964 passed, 0 failed, 5 skipped, both times. - **Aspire manifest:** `dotnet run --project samples/ManagedPdsSample.AppHost -- --publisher manifest` produced the manifest, and `AspireManifest` with `ATPROTO_REQUIRE_INTEGRATION=1` gave **6/6 passed**. - **PDS integration (ran, podman):** it ran against the local `ghcr.io/bluesky-social/pds:latest` image (no pull), with the CI job's environment, on `127.0.0.1:2599`. The CI filter (`PdsAdminTests|AuthenticationTests|RepositoryTests|CustomRecordTests|IdentityResolutionTests`) with `ATPROTO_REQUIRE_INTEGRATION=1` and `TreatNoTestsAsError` gave **30/30 passed**. The container was removed afterwards. - **Spaces-alpha suite: not run.** It needs the non-public spaces-alpha PDS image and PLC network. ## Maintainer release checklist 1. Merge this PR, once the review approves and CI is green. 2. Tag the merge commit and push the tag, which starts `release.yml`: `git tag v0.7.0 <merge-sha> && git push origin v0.7.0`. 3. Watch `release.yml`. It builds and tests at 0.7.0, packs, pushes the `.nupkg`s and `.snupkg`s to the Forgejo feed and nuget.org, and creates the Forgejo release from the `[0.7.0]` section. 4. Check that **`ATProtoNet.Server.EntityFrameworkCore`** shows on the repository's **Packages** tab. The package ID dates from 0.4.0, when it was published orphaned, and Forgejo never re-evaluates the link. If it is missing, relink it: `curl -X POST -H "Authorization: token $TOKEN" https://git.grandiras.net/api/v1/packages/Grandiras/nuget/ATProtoNet.Server.EntityFrameworkCore/-/link/ATProto.NET` (HTTP 201). 5. On nuget.org, if `ATProtoNet.Server.EntityFrameworkCore` was deprecated or unlisted when it was merged into Server in 0.5.0, undo that. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chore: release v0.7.0 (closes #140)
All checks were successful
CI / pds-integration (pull_request) Successful in 29s
CI / build-and-test (pull_request) Successful in 59s
8189d87a54
Bumps Directory.Build.props to 0.7.0 and rolls the changelog's
[Unreleased] section into [0.7.0] - 2026-09-28, under a fresh, empty
[Unreleased], as the 0.6.0 release did.

Condenses the section, which had grown PR by PR to 455 bullets with
overlaps and intermediate states, to 366 in changelog register, with an
intro and a link to the migration guide. Every issue reference and every
Security item survives, and every breaking change that affects 0.6
users keeps its Migration note and its migration-guide entry. Changes to
API that never shipped in 0.6.0 (added this cycle and reshaped before
release) are described by their final shape under Added instead of as
breaking. Fixes stale names: the 0.6 EF store registration was
AddAtProtoEfCoreTokenStore, and the removed Verifier/IsIssuedRelayUrl
and similar intermediate members are gone from the text.

Migration guide: adds the positional allowTakendown parameter of
LoginAsync/CreateSessionAsync, which it lacked, and drops a behaviour
note about the removed TypedFirehoseConsumerOptions.Verifier.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator

🤖 Reviewing this PR — the review will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the review runs.

🤖 Reviewing this PR — the review will link the full session transcript. <!-- opencode-run:review --> 📜 [Live transcript](https://git.grandiras.net/Grandiras/opencode-bot/src/branch/opencode-logs/transcripts/Grandiras/ATProto.NET/pr-192/run-2026-09-28T13-55-29-286Z.md) — updating every ~5 minutes while the review runs.
Author
Owner

@claude /review

Release PR for v0.7.0 (no code changes). Please focus on:

  • the condensed [0.7.0] CHANGELOG section: is every breaking change still there with a migration note, is every security fix still listed, and are the references and links intact?
  • whether docs/migrating-to-0.7.md is consistent with the Breaking changes section
  • the version bump in Directory.Build.props, and whether release.yml will extract the [0.7.0] section correctly
  • the package set and dependency graph in the PR description
@claude /review Release PR for v0.7.0 (no code changes). Please focus on: - the condensed `[0.7.0]` CHANGELOG section: is every breaking change still there with a migration note, is every security fix still listed, and are the references and links intact? - whether `docs/migrating-to-0.7.md` is consistent with the Breaking changes section - the version bump in `Directory.Build.props`, and whether `release.yml` will extract the `[0.7.0]` section correctly - the package set and dependency graph in the PR description
Collaborator

🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the task runs.

🤖 Reviewing this PR — follow along in [the action run](https://git.grandiras.net/Grandiras/claude-bot/actions/runs/649); the reply will link the full session transcript. <!-- claude-run:pr_review --> 📜 [Live transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/ATProto.NET/pr-192/run-649.md) — updating every ~5 minutes while the task runs.
claude-reviewer approved these changes 2026-09-28 13:59:46 +00:00
Dismissed
claude-reviewer left a comment

✅ Verdict: approve — no blocking issues found.

This is a mechanical release-prep PR and it holds up well under verification.

  • Directory.Build.props bumps <Version> from 0.6.0 to 0.7.0, matching the PR description.
  • The ## [0.6.0] section and everything below it in CHANGELOG.md is byte-for-byte identical before and after (verified via checksum on the exact line ranges) — the splice touched only the Unreleased/new [0.7.0] region, as claimed.
  • All issue references from the old Unreleased section (#110–#141, #180, #187, #190, plus the upstream atproto#4896 mention) are present in the new [0.7.0] section, and #108 is newly attached to the four sync-workflow Security items exactly as described.
  • The previously-missing breaking-change entry for allowTakendown (on LoginAsync/CreateSessionAsync) is now correctly listed under Breaking changes ("New Lexicon parameters shift positional arguments... LoginAsync..."), and docs/migrating-to-0.7.md was updated in the same two spots described in the PR (the allowTakendown positional-argument note, and removal of the stale #sync/Verifier CID-check line).
  • The migration-guide link in the new section header points at src/tag/v0.7.0/..., which won't resolve until the maintainer tags the release post-merge — but that's the documented, intentional sequencing (tag happens after merge), not a bug.

One very minor, non-blocking observation: the condensed simplespace read/write-split bullet drops the inline link to the upstream PR (bluesky-social/atproto#5496) that the old bullet carried. It's a citation, not a functional or migration detail, so it doesn't affect correctness of the release notes, just a small loss of provenance.

No correctness issues, no dropped breaking changes, no inconsistencies found in the parts of the diff and surrounding files inspected. Good to merge.


⏱ 2m 15s · 37 turns · tokens: 96.7k in / 7.8k out (+4036.6k cache-read)
📜 Full session transcript

✅ **Verdict: approve** — no blocking issues found. This is a mechanical release-prep PR and it holds up well under verification. - `Directory.Build.props` bumps `<Version>` from `0.6.0` to `0.7.0`, matching the PR description. - The `## [0.6.0]` section and everything below it in `CHANGELOG.md` is byte-for-byte identical before and after (verified via checksum on the exact line ranges) — the splice touched only the `Unreleased`/new `[0.7.0]` region, as claimed. - All issue references from the old `Unreleased` section (`#110`–`#141`, `#180`, `#187`, `#190`, plus the upstream `atproto#4896` mention) are present in the new `[0.7.0]` section, and `#108` is newly attached to the four sync-workflow Security items exactly as described. - The previously-missing breaking-change entry for `allowTakendown` (on `LoginAsync`/`CreateSessionAsync`) is now correctly listed under *Breaking changes* ("New Lexicon parameters shift positional arguments... `LoginAsync`..."), and `docs/migrating-to-0.7.md` was updated in the same two spots described in the PR (the `allowTakendown` positional-argument note, and removal of the stale `#sync`/`Verifier` CID-check line). - The migration-guide link in the new section header points at `src/tag/v0.7.0/...`, which won't resolve until the maintainer tags the release post-merge — but that's the documented, intentional sequencing (tag happens after merge), not a bug. One very minor, non-blocking observation: the condensed `simplespace` read/write-split bullet drops the inline link to the upstream PR (`bluesky-social/atproto#5496`) that the old bullet carried. It's a citation, not a functional or migration detail, so it doesn't affect correctness of the release notes, just a small loss of provenance. No correctness issues, no dropped breaking changes, no inconsistencies found in the parts of the diff and surrounding files inspected. Good to merge. --- ⏱ 2m 15s · 37 turns · tokens: 96.7k in / 7.8k out (+4036.6k cache-read) 📜 [Full session transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/ATProto.NET/pr-192/run-649.md) <!-- claude-verdict:approve --> <!-- claude-reviewed-head:8189d87a54fb77123eb56e250f7fe18e8ff2602c -->
opencode-reviewer left a comment

💬 Verdict: comment — the reviewer did not submit a structured review; the raw output follows.

Let me verify the exact section boundaries and bullet counts in the 0.7.0 section.


⏱ 4m 29s · 31 steps · $0.0800 · tokens: 119.3k in / 2.3k out (+1999.0k cache-read) · Go: 5h 0% · wk 0% · mo 82%
📜 Full session transcript

💬 **Verdict: comment** — the reviewer did not submit a structured review; the raw output follows. Let me verify the exact section boundaries and bullet counts in the 0.7.0 section. --- ⏱ 4m 29s · 31 steps · $0.0800 · tokens: 119.3k in / 2.3k out (+1999.0k cache-read) · Go: 5h 0% · wk 0% · mo 82% 📜 [Full session transcript](https://git.grandiras.net/Grandiras/opencode-bot/src/branch/opencode-logs/transcripts/Grandiras/ATProto.NET/pr-192/run-2026-09-28T13-55-29-286Z.md)
docs: restore the upstream simplespace link in the 0.7.0 changelog
All checks were successful
CI / pds-integration (pull_request) Successful in 31s
CI / build-and-test (pull_request) Successful in 1m3s
Sync Closures to GitHub / sync-closure (pull_request) Successful in 7s
7a51fa015d
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

@claude /review

7a51fa0 addresses the one observation from the previous review: the condensed simplespace bullet links bluesky-social/atproto#5496 again. That is the only change since the approved 8189d87.

@claude /review 7a51fa0 addresses the one observation from the previous review: the condensed `simplespace` bullet links [bluesky-social/atproto#5496](https://github.com/bluesky-social/atproto/pull/5496) again. That is the only change since the approved 8189d87.
Collaborator

🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the task runs.

🤖 Reviewing this PR — follow along in [the action run](https://git.grandiras.net/Grandiras/claude-bot/actions/runs/650); the reply will link the full session transcript. <!-- claude-run:pr_review --> 📜 [Live transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/ATProto.NET/pr-192/run-650.md) — updating every ~5 minutes while the task runs.
claude-reviewer left a comment

✅ Verdict: approve — no blocking issues found.

Re-review after one new commit (7a51fa0). It restores exactly the citation I flagged as a minor, non-blocking note in my previous approval: the simplespace read/write-split bullet's inline link to the upstream PR (bluesky-social/atproto#5496), which had been dropped in the condensation. Diffed it directly against the prior state and confirmed it's a pure addition of the markdown link with no other changes to the bullet or surrounding text. Everything else verified in the previous pass (version bump, byte-identical [0.6.0] and older sections, all references preserved, the allowTakendown breaking-change fix, migration guide fixes) is unaffected. No outstanding issues; good to merge.


⏱ 0m 20s · 5 turns · tokens: 85.0k in / 1.1k out (+452.8k cache-read)
📜 Full session transcript

✅ **Verdict: approve** — no blocking issues found. Re-review after one new commit (`7a51fa0`). It restores exactly the citation I flagged as a minor, non-blocking note in my previous approval: the `simplespace` read/write-split bullet's inline link to the upstream PR (`bluesky-social/atproto#5496`), which had been dropped in the condensation. Diffed it directly against the prior state and confirmed it's a pure addition of the markdown link with no other changes to the bullet or surrounding text. Everything else verified in the previous pass (version bump, byte-identical `[0.6.0]` and older sections, all references preserved, the `allowTakendown` breaking-change fix, migration guide fixes) is unaffected. No outstanding issues; good to merge. --- ⏱ 0m 20s · 5 turns · tokens: 85.0k in / 1.1k out (+452.8k cache-read) 📜 [Full session transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/ATProto.NET/pr-192/run-650.md) <!-- claude-verdict:approve --> <!-- claude-reviewed-head:7a51fa015d3624a2fc7acc297e1a3c37f1083874 -->
Collaborator

🤖 Reviewing this PR — the review will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the review runs.

🤖 Reviewing this PR — the review will link the full session transcript. <!-- opencode-run:review --> 📜 [Live transcript](https://git.grandiras.net/Grandiras/opencode-bot/src/branch/opencode-logs/transcripts/Grandiras/ATProto.NET/pr-192/run-2026-09-28T14-01-51-892Z.md) — updating every ~5 minutes while the review runs.
Grandiras deleted branch issue-140-release 2026-09-28 14:02:44 +00:00
Grandiras referenced this pull request from a commit 2026-09-28 14:02:45 +00:00
opencode-reviewer left a comment

✅ Verdict: approve — no blocking issues found.

Re-review of the release-prep PR. My previous pass promised verification of the [0.7.0] section boundaries and bullet counts — done now, and the one minor item raised in the earlier review round (the dropped upstream citation) is confirmed fixed in 7a51fa0.

Verified on this pass:

  • Section boundaries and counts: ## [Unreleased] (line 8) is empty; ## [0.7.0] - 2026-09-28 spans lines 10–399 with [0.6.0] starting at 400. Grepping blank lines, indented continuation lines, and non-bold bullets shows the only non-bullet lines in the new section are the intro (12), the migration link (14), and the expected separators — every bullet block is contiguous one-liners. That pins the counts by line arithmetic: Breaking 18–151 = 134, Added 155–240 = 86, Changed 244–295 = 52, Fixed 299–359 = 61, Removed 363–365 = 3, Security 369–398 = 30 — 366 total, exactly matching the PR table.
  • Intro and migration link are as described, with the absolute src/tag/v0.7.0/docs/migrating-to-0.7.md URL (resolves once the maintainer tags, per the documented sequencing).
  • Refs spot-checks: #108 on the two merged sync-workflow Security bullets (the four old items), #187, #190, and the upstream atproto#4896 mention all present.
  • The fix in 7a51fa0: the simplespace read/write-split Breaking bullet (line 135) again carries the inline [bluesky-social/atproto#5496](…) link, with no other changes to the bullet.
  • Migration guide: the allowTakendown positional-argument note is in "New Lexicon parameters shift positional arguments" (guide lines 732–739), and the stale "#sync events are CID-checked whenever a Verifier is set" line is gone (no matches).
  • Version: Directory.Build.props has <Version>0.7.0</Version>.
  • Release workflow compatibility: the exact awk in .forgejo/workflows/release.yml (line 87) matches ^## \[0.7.0\], captures the intro, link, six subsections and all bullets, and stops before ## [0.6.0] — so the Forgejo release body will be well-formed.

Minor, non-blocking: the Breaking bullet "New Lexicon parameters shift positional arguments" lists LoginAsync (with #124 among its refs) without spelling out allowTakendown; the explicit mention stays in the Added bullet and in the migration guide. That covers the breaking aspect and matches the PR description's own wording, so nothing to change.

No correctness issues, no dropped content, no inconsistencies. Good to merge; tagging afterwards is the maintainer's step per the checklist.


⏱ 6m 44s · 8 steps · $0.0299 · tokens: 71.5k in / 2.6k out (+419.8k cache-read) · Go: 5h 1% · wk 0% · mo 83%
📜 Full session transcript

✅ **Verdict: approve** — no blocking issues found. Re-review of the release-prep PR. My previous pass promised verification of the `[0.7.0]` section boundaries and bullet counts — done now, and the one minor item raised in the earlier review round (the dropped upstream citation) is confirmed fixed in `7a51fa0`. **Verified on this pass:** - **Section boundaries and counts:** `## [Unreleased]` (line 8) is empty; `## [0.7.0] - 2026-09-28` spans lines 10–399 with `[0.6.0]` starting at 400. Grepping blank lines, indented continuation lines, and non-bold bullets shows the only non-bullet lines in the new section are the intro (12), the migration link (14), and the expected separators — every bullet block is contiguous one-liners. That pins the counts by line arithmetic: Breaking 18–151 = **134**, Added 155–240 = **86**, Changed 244–295 = **52**, Fixed 299–359 = **61**, Removed 363–365 = **3**, Security 369–398 = **30** — **366 total**, exactly matching the PR table. - **Intro and migration link** are as described, with the absolute `src/tag/v0.7.0/docs/migrating-to-0.7.md` URL (resolves once the maintainer tags, per the documented sequencing). - **Refs spot-checks:** `#108` on the two merged sync-workflow Security bullets (the four old items), `#187`, `#190`, and the upstream `atproto#4896` mention all present. - **The fix in `7a51fa0`:** the `simplespace` read/write-split Breaking bullet (line 135) again carries the inline `[bluesky-social/atproto#5496](…)` link, with no other changes to the bullet. - **Migration guide:** the `allowTakendown` positional-argument note is in "New Lexicon parameters shift positional arguments" (guide lines 732–739), and the stale "`#sync` events are CID-checked whenever a `Verifier` is set" line is gone (no matches). - **Version:** `Directory.Build.props` has `<Version>0.7.0</Version>`. - **Release workflow compatibility:** the exact `awk` in `.forgejo/workflows/release.yml` (line 87) matches `^## \[0.7.0\]`, captures the intro, link, six subsections and all bullets, and stops before `## [0.6.0]` — so the Forgejo release body will be well-formed. Minor, non-blocking: the Breaking bullet "New Lexicon parameters shift positional arguments" lists `LoginAsync` (with `#124` among its refs) without spelling out `allowTakendown`; the explicit mention stays in the Added bullet and in the migration guide. That covers the breaking aspect and matches the PR description's own wording, so nothing to change. No correctness issues, no dropped content, no inconsistencies. Good to merge; tagging afterwards is the maintainer's step per the checklist. --- ⏱ 6m 44s · 8 steps · $0.0299 · tokens: 71.5k in / 2.6k out (+419.8k cache-read) · Go: 5h 1% · wk 0% · mo 83% 📜 [Full session transcript](https://git.grandiras.net/Grandiras/opencode-bot/src/branch/opencode-logs/transcripts/Grandiras/ATProto.NET/pr-192/run-2026-09-28T14-01-51-892Z.md) <!-- opencode-reviewed-head:7a51fa015d3624a2fc7acc297e1a3c37f1083874 --> <!-- opencode-verdict:approve -->
Sign in to join this conversation.
No description provided.