4.7.12: facade unwrap (T/Page<T>), Fallout-generated CI, publish enhancements, public-API tests#10
Merged
Merged
Conversation
…lection<T>
Implements the agreed facade-unwrap (option 2). The codegen overlay now strips
TheTVDB's { data, status, links } envelope from every response schema, so the
generated clients return the entity (T) or collection (ICollection<T>) directly
instead of NSwag ResponseNN wrappers. At runtime, EnvelopeUnwrappingHandler
(outermost in the HttpClient pipeline) peels `data` off successful JSON responses;
non-JSON, error, and already-unwrapped bodies pass through.
- build/Build.cs: StripDataEnvelope overlay (66 responses).
- Handlers/EnvelopeUnwrappingHandler.cs + Bootstrapper registration.
- Regenerated clients/models with unwrapped return types.
- EnvelopeUnwrappingSpecs (4 specs) via InternalsVisibleTo; all pass.
- README: fix stale Fallout link → Fallout-build/Fallout.
Note: the 8 paginated list endpoints currently return ICollection<T> (links
dropped). Page<T> with pagination links is the remaining step.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Completes the unwrap: the paginated list endpoints now surface a generic Page<T> (Items + Links + Status + HasNext/HasPrevious/TotalItems/PageSize) instead of a bare collection that dropped the pagination links. - Page<T> (Abstractions). - TvdbResponseContext: an async-flow-local capture the EnvelopeUnwrappingHandler fills with links/status; the mutable capture flows down into the handler and is read back by the wrapper (keeps generated clients returning plain collections). - TvdbPagingExtensions: `GetPageAsync` overloads for the 8 paged clients (series/movies/episodes/people/lists/seasons/companies + updates). - Overlay now coerces ALL integer params (page/year/since/… not just path ids) number → long; no float params exist in the API. - Specs: PagingSpecs (end-to-end links capture) + a Mockly-backed SeriesClientSpecs (client deserialization). 9 specs pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ized notes The publish lane now, on a version tag: - pushes to nuget.org (OIDC, as before), - pushes to GitHub Packages (GITHUB_TOKEN), - creates a GitHub Release with the .nupkg files attached and auto-generated, label-categorized notes (softprops/action-gh-release + .github/release.yml mapping PR labels → Features / Fixes / Docs / Maintenance / Other). Adds contents:write + packages:write to the job. Static version fallback → 4.7.12. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bakes in the key conventions so they aren't forgotten — most importantly: GitHub workflows are GENERATED by Fallout from [GitHubActions] attributes on build/Build.cs and must never be hand-edited. Also: in-stack tooling only, generated codegen (don't hand-edit), the 3-project architecture + arch tests, the Fallout spec test convention (no CPM), versioning, and publishing. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ited Per the CLAUDE.md rule (Fallout owns the workflows). Fixes: - Pin Fallout.GlobalTool 10.3.49 (nuget.org) and align Fallout.Common/Components to 10.3.49 (they were 11.0.18, mismatched with the tool). - Make build.cmd the proper bat/sh polyglot (dispatches to build.sh on Linux, build.ps1 on Windows) + add build.sh, so the tool's generated `./build.cmd` run step runs on the ubuntu runner. Verified locally: `./build.cmd Test`. - Flip the build [GitHubActions] attribute back to AutoGenerate (drop the earlier hand-edit) and regenerate build.yml → `./build.cmd Test Pack`. - Tools roll forward (net10 CI). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…exception - PublicApiSpecs (PublicApiGenerator + Verify) snapshots the public surface of all three packages; committed .verified.txt baselines. Any accidental surface change now fails until re-accepted. Chosen over Roslyn PublicApiAnalyzers to reuse the Verify already in the Fallout test stack. 12 specs pass. - CLAUDE.md: document that publish.yml is the one hand-written workflow (the published Fallout tool 10.3.49 lacks the 11.x custom-step API to model the uses:-based OIDC/Release steps — as Fallout's own repo also hand-writes publish). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Doc-comment cleanup after reverting the (10.3.49-incompatible) publish [GitHubActions] attempt; regenerated .fallout/build.schema.json. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fast-follow to 4.7.11. Ships as 4.7.12 (tag
v4.7.12).Client ergonomics — envelope unwrap
{ data, status, links }envelope;EnvelopeUnwrappingHandlerpeels it at runtime. Clients now return the entityT/ICollection<T>instead ofResponseNNwrappers.Page<T>(Items + Links +HasNext/TotalItems/…) viaGetPageAsyncextensions, backed by an ambient link-capture the handler fills.number→long.CI / build (Fallout-owned)
build.ymlis now genuinely Fallout-generated (was hand-edited): pinnedFallout.GlobalTool10.3.49, alignedFallout.Common/Componentsto 10.3.49, and a proper bat/sh polyglotbuild.cmdso the generated./build.cmd Test Packruns on ubuntu.publish.ymlstays hand-written — the one documented exception (the published Fallout tool lacks the 11.x custom-step API for theuses:-based OIDC/Release steps; Fallout's own repo also hand-writes publish). See CLAUDE.md.Publishing enhancements (publish.yml)
.nupkgfiles attached and label-categorized release notes (.github/release.yml), alongside the existing nuget.org OIDC push.Tests (Fallout spec convention)
Docs
Also filed: #9 (optional caching via DI — future).
🤖 Generated with Claude Code