scrum 2026-05-02: materializer+replay+vectord — ship-with-fixes
Cross-lineage review of 89ca72d (Opus + Kimi + Qwen3-coder).
Convergent findings (≥2 reviewers): NONE.
- Kimi BLOCK (materializer main.go exits 0 on validation fail):
confabulation. Code does os.Exit(1) at lines 65-66.
- Qwen BLOCK (saveTask race condition): confabulation. All access
to inflight/pending is under s.mu.
- Qwen WARN (saveAfter nil deref): confabulation. Explicit
`if h.persist == nil { return }` guard at line 184.
- Opus BLOCK (TestSaveTask_Coalesces): self-withdrawn in same
response.
Opus WARNs actioned:
- Detached docstring on TestAdd_SmallIndex_ConcurrentDistinctIDs —
attached.
- isoDatePartition fallback comment — clarified as defense-in-depth
(MaterializeAll guards upstream; branch unreachable through public
surface).
Disposition + verdicts in reports/scrum/_evidence/2026-05-02/.
Pattern matches feedback_cross_lineage_review.md: only Opus emits
BLOCK-class findings worth verifying; Kimi/Qwen single-reviewer
BLOCKs failed trace verification.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -446,9 +446,11 @@ func isoDatePartition(iso string) string {
|
||||
t, err = time.Parse(time.RFC3339, iso)
|
||||
}
|
||||
if err != nil {
|
||||
// Fallback: TS would have produced "NaN/NaN/NaN" — we use
|
||||
// "0000/00/00" which is at least a valid path. Materializer
|
||||
// fails its own RecordedAt validation before reaching here.
|
||||
// Defense-in-depth only — MaterializeAll calls validISOTimestamp
|
||||
// on RecordedAt before processSource ever invokes us, so this
|
||||
// branch is unreachable through the public surface. Kept so a
|
||||
// future direct caller doesn't get a panic; "0000/00/00" is at
|
||||
// least a valid path.
|
||||
return "0000/00/00"
|
||||
}
|
||||
t = t.UTC()
|
||||
|
||||
@@ -561,10 +561,12 @@ func TestAdd_RecoversFromPanickingGraph(t *testing.T) {
|
||||
// path and proceeding.
|
||||
_ = safeGraphDelete(idx.g, "safe-test")
|
||||
}
|
||||
// playbook_record pattern: many requests in flight, each Adding a
|
||||
// unique ID to a fresh small index. Vectord's mutex serializes
|
||||
// these, but the concurrency stresses lock acquisition timing
|
||||
// against the small-index transition state.
|
||||
|
||||
// TestAdd_SmallIndex_ConcurrentDistinctIDs reproduces the playbook_record
|
||||
// pattern: many requests in flight, each Adding a unique ID to a fresh
|
||||
// small index. Vectord's mutex serializes these, but the concurrency
|
||||
// stresses lock acquisition timing against the small-index transition
|
||||
// state.
|
||||
func TestAdd_SmallIndex_ConcurrentDistinctIDs(t *testing.T) {
|
||||
idx, _ := NewIndex(IndexParams{Name: "concurrent_small", Dimension: 8})
|
||||
const writers = 16
|
||||
|
||||
Reference in New Issue
Block a user