Add Immediate.Jobs documentation - #13
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe PR adds comprehensive Immediate.Jobs documentation covering APIs, job creation, scheduling, workflows, storage, operations, integrations, testing, and samples. It also updates shared onboarding and concept pages, reorganizes documentation navigation, adds legacy redirects, and normalizes prerendered redirects during builds. ChangesImmediate.Jobs documentation
Shared documentation and site infrastructure
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 19
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/content/docs/getting-started/tutorial/caching.md`:
- Around line 115-123: Update HandleAsync and the corresponding GetTodoQuery
cache-read path to coordinate access per Todo ID, ensuring an in-flight read
cannot repopulate the cache with a pre-Complete value after repository.Complete
and cache.RemoveValue run. Use an atomic/versioned cache strategy or per-key
synchronization, and preserve the existing completion behavior.
In `@src/content/docs/getting-started/tutorial/first-handler.md`:
- Around line 27-56: Make TodoRepository thread-safe before using it as a
singleton by synchronizing GetAll, GetById, Add, and Complete access to _items
and _nextId, or replacing them with concurrency-safe storage while preserving
current behavior. In
src/content/docs/getting-started/tutorial/dependency-injection.md lines 44-46,
retain the singleton recommendation; it is valid once the repository
implementation is protected.
In `@src/content/docs/Immediate.Apis/openapi.md`:
- Around line 50-55: Update the CreateSchemaReferenceId callback in AddOpenApi
to use the nested type’s full name, replacing nested separators with dots, and
fall back to OpenApiOptions.CreateDefaultSchemaReferenceId(t) when FullName is
unavailable; preserve the existing default behavior for non-nested types.
In `@src/content/docs/Immediate.Handlers/attributes-and-interfaces.md`:
- Line 25: Update the [Handler] heading in the attributes-and-interfaces
documentation from level 3 to level 2, then adjust its following section
headings consistently to preserve a valid heading hierarchy.
In `@src/content/docs/Immediate.Handlers/openapi-and-swashbuckle.md`:
- Around line 48-56: Update the CustomSchemaIds configuration to make generated
IDs globally unique by incorporating the declaring type’s namespace or full name
alongside x.Name. Preserve the existing fallback for schemas without a declaring
type, and ensure distinct declaring types cannot produce the same schema ID.
- Around line 35-38: Update the CustomSchemaIds callback in AddSwaggerGen to
fall back to x.Name when x.FullName is null, while preserving the existing
nested-type replacement behavior for non-null FullName values.
In `@src/content/docs/Immediate.Handlers/registration.md`:
- Around line 56-64: Update the warning callout in the registration
documentation to title it “Generated behavior registrations are transient.”
Clarify that generated registrations use a transient lifetime, while an earlier
user registration preserved by TryAdd may instead be scoped, singleton, or
another lifetime and therefore overrides the generated registration.
- Around line 26-30: The assembly-identifier normalization rules are
inconsistent across package documentation. In
src/content/docs/Immediate.Handlers/registration.md lines 26-30, retain or
clarify the authoritative rule that removes periods, spaces, and hyphens; in
src/content/docs/Immediate.Injections/introduction.md lines 61-63, update the
rule description and example to use the same normalization behavior and assembly
identifier consistently.
In `@src/content/docs/Immediate.Injections/how-it-works.md`:
- Around line 120-126: Update the “Second argument” row in the mapping table to
describe factory registrations using the generated factory member, such as
<AttributedType>.<FactoryMethod>, instead of Type.Factory. Keep the existing
mappings for implementation types and UseProxyFactory unchanged.
In `@src/content/docs/Immediate.Injections/registering-services.md`:
- Around line 34-35: Qualify the default registration statement in the Immediate
Injections service-registration documentation to apply only when no
assembly-wide RegistrationDefaults.RegistrationStrategy is configured. Mention
that bare lifetime attributes inherit the configured strategy and may therefore
register implemented interfaces, while preserving the existing as-itself example
for the unconfigured case.
In `@src/content/docs/Immediate.Jobs/api-reference.md`:
- Around line 166-180: Update the StorageMode entry in the ImmediateJobsOptions
defaults table to document InMemory when no storage provider is selected. Add
separate documentation clarifying that durable providers default to SingleServer
unless distributed mode is explicitly requested, keeping the existing AddXxxJobs
and other defaults unchanged.
In `@src/content/docs/Immediate.Jobs/nodatime.md`:
- Around line 36-38: Define timeZoneProvider before the AddImmediateJobsNodaTime
call in the example, using a concrete NodaTime provider setup so the copied
snippet compiles without undeclared variables.
In `@src/content/docs/Immediate.Jobs/observability-and-health.md`:
- Around line 34-36: Update the observability guidance wording from “growing due
depth” to “growing queue depth,” preserving the existing reference to the
documented queue.depth metric.
In `@src/content/docs/Immediate.Jobs/recurring-jobs.md`:
- Around line 36-53: Expand the dynamic-schedule example to show where
tenantCleanupScheduler comes from by adding a containing class or method that
receives the generated IRecurringJobScheduler through dependency injection. Keep
the existing AddOrUpdateRecurringAsync and RemoveRecurringAsync calls unchanged
and ensure the declared scheduler is the one used by both calls.
In `@src/content/docs/Immediate.Validations/handling-failures.md`:
- Around line 26-40: Update the ValidationException mapping in the
c.ProblemDetails switch to assign ValidationProblemDetails.Title from ex.Title
alongside Status, preserving the documented exception title in the client
response.
In `@src/content/docs/Immediate.Validations/how-it-works.md`:
- Around line 193-198: Reconcile the analyzer count in the “Four analyzers ship
alongside the generator” paragraph with the listed analyzer symbols. Either
identify and add the omitted analyzer to the enumeration, or change the count to
three if only ValidatorClassAnalyzer, ValidateClassAnalyzer, and
AssemblyBehaviorAnalyzer are shipped; keep the two DiagnosticSuppressor entries
distinct.
In `@src/content/docs/Immediate.Validations/introduction.md`:
- Around line 13-16: Update the introduction’s claims around “no reflection” and
AOT/trimming to clarify that validation traversal is generated at compile time,
while reflective metadata access such as custom validator DefaultMessage
requires preservation for trimming/AOT. Apply the same qualification to the
corresponding claims in the additional referenced section, without changing the
generated-validation behavior description.
In `@src/content/docs/Immediate.Validations/localization.md`:
- Around line 106-110: Update the localization guidance around
ValidationConfiguration.Localizer to remove the unsupported claim that missing
entries fall back to the built-in localizer, unless the documentation also
defines and provides an explicit composite localizer that delegates missing keys
to it.
In `@svelte.config.js`:
- Around line 89-98: Update the heading ID processing around the existing `seen`
map to reserve every explicit heading `id` before generating IDs from
`slugify(textContent(node))`. When creating a generated ID, increment or advance
the suffix until it is not already reserved, including explicit IDs and
previously generated IDs, then record the chosen ID in `seen`.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 4a007e1f-fa3a-454b-82a7-e5c703f75685
📒 Files selected for processing (113)
src/content/docs/Immediate.Apis/attributes-reference.mdsrc/content/docs/Immediate.Apis/authorization.mdsrc/content/docs/Immediate.Apis/binding-request-data.mdsrc/content/docs/Immediate.Apis/creating-endpoints.mdsrc/content/docs/Immediate.Apis/customizing-endpoints.mdsrc/content/docs/Immediate.Apis/diagnostics.mdsrc/content/docs/Immediate.Apis/how-it-works.mdsrc/content/docs/Immediate.Apis/introduction.mdsrc/content/docs/Immediate.Apis/openapi.mdsrc/content/docs/Immediate.Apis/route-groups.mdsrc/content/docs/Immediate.Apis/swashbuckle-support.mdsrc/content/docs/Immediate.Apis/tagged-registration.mdsrc/content/docs/Immediate.Cache/api-reference.mdsrc/content/docs/Immediate.Cache/cache-entry-options.mdsrc/content/docs/Immediate.Cache/creating-a-cache.mdsrc/content/docs/Immediate.Cache/diagnostics.mdsrc/content/docs/Immediate.Cache/how-it-works.mdsrc/content/docs/Immediate.Cache/introduction.mdsrc/content/docs/Immediate.Cache/reading-and-writing.mdsrc/content/docs/Immediate.Cache/testing-caches.mdsrc/content/docs/Immediate.Handlers/attributes-and-interfaces.mdsrc/content/docs/Immediate.Handlers/creating-behaviors.mdsrc/content/docs/Immediate.Handlers/creating-handlers.mdsrc/content/docs/Immediate.Handlers/diagnostics.mdsrc/content/docs/Immediate.Handlers/handler-dependencies.mdsrc/content/docs/Immediate.Handlers/how-it-works.mdsrc/content/docs/Immediate.Handlers/introduction.mdsrc/content/docs/Immediate.Handlers/openapi-and-swashbuckle.mdsrc/content/docs/Immediate.Handlers/registration.mdsrc/content/docs/Immediate.Handlers/samples/normal.mdsrc/content/docs/Immediate.Handlers/streaming-handlers.mdsrc/content/docs/Immediate.Handlers/tagged-registration.mdsrc/content/docs/Immediate.Injections/assembly-defaults.mdsrc/content/docs/Immediate.Injections/attributes-reference.mdsrc/content/docs/Immediate.Injections/attributes.mdsrc/content/docs/Immediate.Injections/diagnostics.mdsrc/content/docs/Immediate.Injections/factories-and-proxies.mdsrc/content/docs/Immediate.Injections/how-it-works.mdsrc/content/docs/Immediate.Injections/introduction.mdsrc/content/docs/Immediate.Injections/keyed-services.mdsrc/content/docs/Immediate.Injections/manual-registration.mdsrc/content/docs/Immediate.Injections/migrating-from-other-libraries.mdsrc/content/docs/Immediate.Injections/open-generics.mdsrc/content/docs/Immediate.Injections/register-services.mdsrc/content/docs/Immediate.Injections/registering-services.mdsrc/content/docs/Immediate.Injections/registration-strategies.mdsrc/content/docs/Immediate.Injections/tagged-registration.mdsrc/content/docs/Immediate.Jobs/api-reference.mdsrc/content/docs/Immediate.Jobs/batches-and-continuations.mdsrc/content/docs/Immediate.Jobs/choosing-storage.mdsrc/content/docs/Immediate.Jobs/configuring-storage-providers.mdsrc/content/docs/Immediate.Jobs/creating-jobs.mdsrc/content/docs/Immediate.Jobs/dashboard-and-monitoring.mdsrc/content/docs/Immediate.Jobs/delivery-guarantees.mdsrc/content/docs/Immediate.Jobs/diagnostics.mdsrc/content/docs/Immediate.Jobs/enqueueing-and-scheduling.mdsrc/content/docs/Immediate.Jobs/execution-context-and-behaviors.mdsrc/content/docs/Immediate.Jobs/how-it-works.mdsrc/content/docs/Immediate.Jobs/introduction.mdsrc/content/docs/Immediate.Jobs/nodatime.mdsrc/content/docs/Immediate.Jobs/observability-and-health.mdsrc/content/docs/Immediate.Jobs/queues-and-fairness.mdsrc/content/docs/Immediate.Jobs/recurring-jobs.mdsrc/content/docs/Immediate.Jobs/registration-and-hosting.mdsrc/content/docs/Immediate.Jobs/samples/aspire.mdsrc/content/docs/Immediate.Jobs/samples/basic.mdsrc/content/docs/Immediate.Jobs/samples/native-aot.mdsrc/content/docs/Immediate.Jobs/testing-jobs.mdsrc/content/docs/Immediate.Validation/creating-validators.mdsrc/content/docs/Immediate.Validation/custom-messages.mdsrc/content/docs/Immediate.Validation/extending-validation-classes.mdsrc/content/docs/Immediate.Validation/handling-failures.mdsrc/content/docs/Immediate.Validation/immediate-handlers.mdsrc/content/docs/Immediate.Validation/validating-instances.mdsrc/content/docs/Immediate.Validations/additional-validations.mdsrc/content/docs/Immediate.Validations/api-reference.mdsrc/content/docs/Immediate.Validations/built-in-validators.mdsrc/content/docs/Immediate.Validations/creating-validators.mdsrc/content/docs/Immediate.Validations/custom-messages.mdsrc/content/docs/Immediate.Validations/custom-validators.mdsrc/content/docs/Immediate.Validations/diagnostics.mdsrc/content/docs/Immediate.Validations/handling-failures.mdsrc/content/docs/Immediate.Validations/how-it-works.mdsrc/content/docs/Immediate.Validations/immediate-handlers-integration.mdsrc/content/docs/Immediate.Validations/introduction.mdsrc/content/docs/Immediate.Validations/localization.mdsrc/content/docs/Immediate.Validations/nested-and-collection-validation.mdsrc/content/docs/Immediate.Validations/validating-instances.mdsrc/content/docs/benchmarks/performance-comparisons.mdsrc/content/docs/concepts/assembly-identifier.mdsrc/content/docs/concepts/handlers-and-behaviors.mdsrc/content/docs/concepts/package-compatibility.mdsrc/content/docs/concepts/source-generation.mdsrc/content/docs/concepts/tags.mdsrc/content/docs/getting-started/installation.mdsrc/content/docs/getting-started/introduction.mdsrc/content/docs/getting-started/quickstart.mdsrc/content/docs/getting-started/tutorial/adding-validation.mdsrc/content/docs/getting-started/tutorial/caching.mdsrc/content/docs/getting-started/tutorial/dependency-injection.mdsrc/content/docs/getting-started/tutorial/exposing-endpoints.mdsrc/content/docs/getting-started/tutorial/first-handler.mdsrc/content/docs/getting-started/tutorial/next-steps.mdsrc/content/docs/getting-started/tutorial/overview.mdsrc/lib/components/layout/sidebar-left.sveltesrc/lib/components/ui/sidebar/constants.tssrc/lib/docs/config.tssrc/lib/docs/content.tssrc/lib/docs/navigation.tssrc/lib/docs/types.tssrc/routes/(docs)/docs/[...slug]/+page.tssrc/routes/+page.sveltesvelte.config.js
💤 Files with no reviewable changes (9)
- src/content/docs/Immediate.Validation/validating-instances.md
- src/content/docs/Immediate.Validation/extending-validation-classes.md
- src/content/docs/Immediate.Validation/creating-validators.md
- src/content/docs/Immediate.Validation/immediate-handlers.md
- src/content/docs/Immediate.Injections/attributes.md
- src/content/docs/Immediate.Validation/handling-failures.md
- src/content/docs/Immediate.Injections/register-services.md
- src/content/docs/Immediate.Validation/custom-messages.md
- src/content/docs/Immediate.Apis/swashbuckle-support.md
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
src/content/docs/Immediate.Jobs/api-reference.md (1)
188-188: 🎯 Functional Correctness | 🟠 MajorCorrect the
StorageModedefault.This still does not document the actual defaults:
InMemorywhen no provider is selected, andSingleServerfor durable providers unless distributed mode is enabled. The current wording is contradictory and remains unresolved from the previous review.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/content/docs/Immediate.Jobs/api-reference.md` at line 188, Update the StorageMode documentation entry to state that the default is InMemory when no provider is selected, and SingleServer for durable providers unless distributed mode is enabled. Remove the contradictory “SingleServer until default in-memory selection” wording.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/content/docs/Immediate.Jobs/batches-and-continuations.md`:
- Around line 83-88: Declare tenantId in the documentation example before the
AddToBatchInGroup and AddToBatchAt calls, either by adding it to
ImportWorkflow.StartAsync parameters or defining it locally, so the snippet is
complete and compilable.
---
Duplicate comments:
In `@src/content/docs/Immediate.Jobs/api-reference.md`:
- Line 188: Update the StorageMode documentation entry to state that the default
is InMemory when no provider is selected, and SingleServer for durable providers
unless distributed mode is enabled. Remove the contradictory “SingleServer until
default in-memory selection” wording.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: cb58d45a-fcdc-481e-aa33-16fee52507dd
📒 Files selected for processing (6)
src/content/docs/Immediate.Jobs/api-reference.mdsrc/content/docs/Immediate.Jobs/batches-and-continuations.mdsrc/content/docs/Immediate.Jobs/creating-jobs.mdsrc/content/docs/Immediate.Jobs/diagnostics.mdsrc/content/docs/Immediate.Jobs/execution-context-and-behaviors.mdsrc/content/docs/Immediate.Jobs/recurring-jobs.md
🚧 Files skipped from review as they are similar to previous changes (2)
- src/content/docs/Immediate.Jobs/creating-jobs.md
- src/content/docs/Immediate.Jobs/execution-context-and-behaviors.md
af78b5e to
e1bd169
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/content/docs/Immediate.Jobs/batches-and-continuations.md`:
- Around line 12-14: Update the storage requirement statement in the batches and
continuations documentation to say that batches require a graph-capable provider
rather than specifically a graph-capable SQL provider, keeping the existing
Redis capability clarification unchanged.
In `@src/content/docs/Immediate.Jobs/configuring-storage-providers.md`:
- Around line 81-84: Update the CreateImmediateJobsSchemaAsync example to use
CancellationToken.None instead of the undeclared cancellationToken, keeping the
snippet self-contained and compilable.
In `@src/content/docs/Immediate.Jobs/recurring-jobs.md`:
- Around line 23-26: Make both documentation examples self-contained: in
src/content/docs/Immediate.Jobs/recurring-jobs.md lines 23-26, assign the
injected CleanupSessionsJob.Scheduler to scheduler before calling
TriggerNowAsync; in src/content/docs/Immediate.Jobs/batches-and-continuations.md
line 87, declare or pass a DateTimeOffset-compatible value for runAt so the
example compiles as shown.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 3fb0c9ec-653e-44d3-9321-cfbfda0fd955
⛔ Files ignored due to path filters (4)
static/images/immediate-jobs/dashboard/batch-workflow-dark.pngis excluded by!**/*.pngstatic/images/immediate-jobs/dashboard/batch-workflow-light.pngis excluded by!**/*.pngstatic/images/immediate-jobs/dashboard/jobs-dark.pngis excluded by!**/*.pngstatic/images/immediate-jobs/dashboard/jobs-light.pngis excluded by!**/*.png
📒 Files selected for processing (31)
package.jsonscripts/normalize-prerendered-redirects.mjssrc/content/docs/Immediate.Handlers/samples/normal.mdsrc/content/docs/Immediate.Jobs/api-reference.mdsrc/content/docs/Immediate.Jobs/batches-and-continuations.mdsrc/content/docs/Immediate.Jobs/choosing-storage.mdsrc/content/docs/Immediate.Jobs/configuring-storage-providers.mdsrc/content/docs/Immediate.Jobs/creating-jobs.mdsrc/content/docs/Immediate.Jobs/dashboard-and-monitoring.mdsrc/content/docs/Immediate.Jobs/delivery-guarantees.mdsrc/content/docs/Immediate.Jobs/diagnostics.mdsrc/content/docs/Immediate.Jobs/enqueueing-and-scheduling.mdsrc/content/docs/Immediate.Jobs/execution-context-and-behaviors.mdsrc/content/docs/Immediate.Jobs/how-it-works.mdsrc/content/docs/Immediate.Jobs/introduction.mdsrc/content/docs/Immediate.Jobs/nodatime.mdsrc/content/docs/Immediate.Jobs/observability-and-health.mdsrc/content/docs/Immediate.Jobs/queues-and-fairness.mdsrc/content/docs/Immediate.Jobs/recurring-jobs.mdsrc/content/docs/Immediate.Jobs/registration-and-hosting.mdsrc/content/docs/Immediate.Jobs/samples/aspire.mdsrc/content/docs/Immediate.Jobs/samples/basic.mdsrc/content/docs/Immediate.Jobs/samples/native-aot.mdsrc/content/docs/Immediate.Jobs/testing-jobs.mdsrc/content/docs/concepts/assembly-identifier.mdsrc/content/docs/concepts/package-compatibility.mdsrc/content/docs/concepts/source-generation.mdsrc/content/docs/concepts/tags.mdsrc/content/docs/getting-started/installation.mdsrc/content/docs/getting-started/introduction.mdsrc/lib/docs/config.ts
🚧 Files skipped from review as they are similar to previous changes (12)
- src/content/docs/Immediate.Jobs/samples/aspire.md
- src/content/docs/concepts/assembly-identifier.md
- src/content/docs/Immediate.Jobs/creating-jobs.md
- src/content/docs/Immediate.Jobs/samples/basic.md
- src/content/docs/Immediate.Jobs/dashboard-and-monitoring.md
- src/content/docs/Immediate.Jobs/diagnostics.md
- src/content/docs/Immediate.Jobs/testing-jobs.md
- src/content/docs/Immediate.Jobs/introduction.md
- src/content/docs/concepts/source-generation.md
- src/content/docs/concepts/tags.md
- src/content/docs/Immediate.Jobs/registration-and-hosting.md
- src/content/docs/getting-started/installation.md
Summary
Validation
Summary by CodeRabbit