Repository navigation
Track consumer API hardening for bounded batch, request and flow workloads #75
Copy link
Copy link
Open
0 / 220 of 22 issues completedOpen
0 / 220 of 22 issues completed
Copy link
Labels
enhancementtype:epicTracking issue; execute its scoped childrenTracking issue; execute its scoped children
Description
Activity
Status update vs master @ 58cee73 (the annotations above predate the #64 merge):
- 2a DONE — feat(batch)!: single-use Batch + Go returns (<-chan error, error); inline item IDs #64 merged: inline item IDs, ID goroutine and IDBufferSize removed.
- 6b HALF DONE — second/concurrent
Go()now returnsErrBatchUsed(feat(batch)!: single-use Batch + Go returns (<-chan error, error); inline item IDs #64);WithBufferConfigafterGo()still panics (batch/batch.go:125). Note PR feat(batch): configurable context-cancellation mode (WithCancelMode) #76 adds a same-patternWithCancelModepanic — if 6b is resolved, both should convert together. - 4 lands via Bound stream execution and validate formation/resource configuration #73 (validation); PR docs: clarify config zero-value and clamp semantics #67 documents the clamp semantics in the meantime.
- 2b still live and only tracked here: ExecuteBatches locks the mutex per error in batch/helpers.go — accumulate locally, merge once under one lock.
Remaining actionable: 2b, 6b remainder. Optional: 3 (Unwrapis idiomatic Go — suggest dropping), 5/6a (v1 naming/interface decisions). ROAST.md itself was never committed (recovered from closed PR Add architectural critique (ROAST.md) #58), which is fine — this issue is its tracker.
- changed the title
[-]API hardening & cleanup (ROAST.md architectural review)[/-][+]Track consumer API hardening for bounded batch, request and flow workloads[/+]on Sep 6, 2026 - added sub-issues
on Sep 6, 2026 - addedtype:epicTracking issue; execute its scoped childrenTracking issue; execute its scoped children
on Sep 6, 2026
Metadata
Metadata
Assignees
Labels
enhancementtype:epicTracking issue; execute its scoped childrenTracking issue; execute its scoped children
Current outcome
This is a non-executable coordination issue for GoBatch's application-facing contracts. Keep focused issues authoritative and preserve the useful parts of the old review without treating every stylistic critique as required work.
Replanned on 2026-09-06 against GoBatch master
63ef757and ShitQuant's recorder, enrichment, paper/replay, and flow workloads. This is an implementation target, not a claim that the behavior already exists.Required behavior
Verification and completion
Close only when the committed child outcomes and release evidence for the chosen tranche are complete; deferred ideas do not become implementation obligations. Each child owns its actual code checks.
Follow the repository's formatting, race-test, vet/lint, package documentation, example and changelog requirements for the changed surface. Report the actual supported behavior and migration; do not treat a passing coverage percentage as proof of these outcomes.
Scope and relationships
Preserves the existing review tracker and comment history. Focused follow-ons: #95 lifecycle, #96 bounded-core release, #97 flow delivery epic, #98 flow runtime, #99 standalone flow release and #100 optional request/flow composition. No root-package rename or OnyxCore dependency.
Design history
The earlier report/prototype remains below for provenance; the requirements above supersede conflicting prescriptions. Existing discussion is preserved.
Original issue: API hardening & cleanup (ROAST.md architectural review)
Summary
Tracker for the API/code-quality points raised in an architectural review (the abandoned
ROAST.mdfrom PR #58). Each point is annotated with its current status onmaster(66070eb) so the still-live items are actionable and the already-fixed ones are recorded.Status of each point
Item.Datawasinterface{}everywhere → no compile-time type safetymasterisBatch[T],New[T any].doIDGenerator,b.ids,IDBufferSize) just to increment a countersync/atomiccounter and removes theIDBufferSizeAPI.ExecuteBatcheslocks a mutex per error (batch/helpers.go:119)IgnoreErrorsspawns a goroutine that leaks if the channel never closes;errors.gohand-rollsUnwrap()masternow nil-guards the channel (avoids the nil-channel leak); the "never-closed channel" case is caller-owned. RevisitUnwrapvs%wif desired.fixConfigsilently mutates input (MinItems: 0→1,batch/batch.go:453)batch.Batchstutters; core API could live in rootgobatchso callers writegobatch.New()Newreturns*Batch(concrete) rather than an interface, hurting mockabilitymaster:func New[T any](config Config) *Batch[T].WithBufferConfigafterGo()(batch.go:113) and concurrentGo()(batch.go:240)Actionable items (still live)
ExecuteBatches; accumulate locally, merge once.panics with returned errors and/or immutable-at-construction config.IgnoreErrorscontract / usefmt.Errorf("%w", …).Source (for recovery — branch is being deleted)
roast-codebase-7386035102356312858@ PR #58 (ROAST.md). PR is closed but its diff remains viewable.Related: #73 (resource limits + config validation — point #4 lands there)