Track fulfilled vs requested services separately#46
Merged
Conversation
Add FulfilledServices (int?, nullable) to BuilderJob so consumers can distinguish what was requested from what was actually produced. A job completing against a manifest with no text would previously advertise Search/FullText/etc. URLs that 404; now those URLs are omitted. * capabilities.json is always written using the fulfilled bitmask (was only written when services != All) so the Search API gates endpoints on what actually exists, not what was requested * JobResponse exposes FulfilledServices and uses it for endpoint URL generation, falling back to Services for pre-existing null rows * Failed jobs set FulfilledServices = None * New JobResponseTests cover URL generation, partial fulfillment, and backward compatibility; TextBuildJobTests extended with assertions on FulfilledServices and new empty-text scenarios Co-Authored-By: Claude Sonnet 4.6 <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.
Summary
FulfilledServices(nullable int) toBuilderJobso consumers can distinguish what was requested from what was actually produced. Previously a job completing against a manifest with no text would advertise Search/FullText/etc. URLs that 404.capabilities.jsonis now always written using the fulfilled bitmask (previously omitted when all services were requested), so the Search API correctly gates endpoints on what actually exists.JobResponseexposesFulfilledServicesand uses it for endpoint URL generation, falling back toServicesfor pre-existing null rows (backward compatible).FulfilledServices = None.Test plan
JobResponseTestscover URL generation, partial fulfillment, no-base-URL, and backward-compat fallbackTextBuildJobTestsextended withFulfilledServicesassertions on existing tests and two new empty-text scenarios (RestrictedServices→ None;AllServices→ TextAugmented only)fulfilled_servicescolumn — no backfill needed, null means pre-existing/untracked🤖 Generated with Claude Code