docs(adr): configurable chunked $batch design (ADR-0004)#146
Merged
Conversation
Capture the v3.0.0 batch decision: uniform hand-rolled multipart $batch, Atomic/ContinueOnError modes, auto-chunking under D365's 200-op cap, and the breaking Result<BatchOutcome> shape — so the per-chunk atomicity and deferred continue-on-error transport are not re-litigated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Overview
Docs-only PR: adds ADR-0004 recording the v3.0.0 configurable chunked $batch design (shipped in #145) and indexes it in docs/adr/README.md. No source, test, or config files touched — risk is effectively zero (worst case is a stale/inaccurate historical record, not a runtime defect).
I cross-checked every concrete claim in the ADR against the actual merged implementation rather than taking it on faith:
BatchFailureMode(Atomic/ContinueOnError),BatchOptions,ODataSettings.Batch.{FailureMode,MaxOperationsPerChunk,StopOnFirstFailedChunk}— confirmed inIntegratoR.OData/Domain/Settings/ODataBatchSettings.csandIntegratoR.Abstractions/Common/Batch/.MaxOperationsPerChunkdefault 150, validator range 1..200 — confirmed inODataSettingsValidator.cs:91-95andODataBatchSettings.cs:27.StopOnFirstFailedChunkdefault true, honoured inAtomicmode — confirmed inODataService.cs:643.ODataService<T>ctor gaining an optional trailingIOptions<ODataSettings>? settings = null— confirmed atODataService.cs:46-50; correctly characterised as a binary (not source) break.- The
$batchPOST riding the named"ODataClient"HttpClient's Polly policy but deliberately not wrapped in the exception handler's operation-retry — confirmed verbatim, the code even carries the same rationale as an inline comment (ODataService.cs:595-596). GitVersion.yml next-version: 3.0.0— present with a comment explaining the MAJOR bump.- Referenced test files (
ODataBatchWireTests,ODataClientAdapterAtomicBatchTests,ODataServiceBatchChunkingTests) andwiki/Known-Limitations.md— all exist and are consistent with the ADR's description (the wiki page states the same 150/200/StopOnFirstFailedChunk facts). - ADR formatting (Status/Date header, section structure) matches ADR-0001/0002/0003, and the README table row is appended correctly.
No discrepancies found between the ADR's narrative and the shipped code.
Findings
None. No Blocker, Major, Minor, or Nit findings — this is an accurate, well-scoped documentation-only change with no code, no hard-rule surface, and no test-adequacy question (nothing behaviour-changing was added).
Stages run
- Stage 1 (correctness/hard-rules/architecture/tests): ran — verified ADR accuracy against source, see above. Not applicable: no
Result<T>/ConfigureAwait/CancellationToken/British-spelling/CPM/var/serialiser-lockstep surface exists in a markdown-only diff. - Stage 2 (security): skipped — flag was
false, and there is no auth/secret/header/logging surface in this diff (pure prose, no code). - Stage 3 (API compatibility): skipped — flag was
false; this PR touches no publishedIntegratoR.*API surface (the ADR documents an already-shipped, already-versioned breaking change from #145/6e779b3, it doesn't introduce one). - Mechanical checks (
dotnet build,dotnet test,dotnet format --verify-no-changes, vulnerable-package scan) live inbuild.ymland were not recomputed here; thebuildcheck reportsSUCCESSon this PR.
Verdict
approve
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
Records the v3.0.0 batch design (shipped in #145) as ADR-0004 and adds it to the
docs/adrindex.Captures the non-obvious rationale so it isn't re-litigated:
$batch— PanoramicData's changeset has no composite/anonymous-key support (re-verified on 10.0.84); uniform path covers every key shape incl. cross-company / no-DataAreaId.Atomic/ContinueOnError+ auto-chunking — D365 F&O caps a$batchat 200 operations; bulk imports must split, so atomicity is per-chunk, not per-dataset.Result<BatchOutcome>— per-item import error analysis (Index/ChunkIndex/Key/status/D365 error).ContinueOnErroris per-item today — the single-$batchPrefer: odata.continue-on-errortransport is undocumented for F&O; deferred behind a live-JFI smoke run.Risks / rollback
Docs-only (one new ADR file + index row). No code, no API surface change. Rollback = revert the commit.
Reviewer focus
Accuracy of the recorded decision against the merged #145 implementation.
🤖 Generated with Claude Code