One snapshot per block, and figures that say what they measure

FixDocsService
Shipped
August 12, 2026 at 8:47 PM UTC
Author
Kamo
Commit
8c6ee4b

Both summarize methods are @Transactional(readOnly = true). Each issues six or seven reads whose figures are cross-checked ACROSS query boundaries: countOverdueByMemberForOrg's own javadoc promises the per-member figures sum to `overdue`, an invariant spanning two separate reads that can only hold under one snapshot. Without it each read commits on its own and a delivery landing mid-summary makes the compliance matrix disagree with the pillar above it. envelopeMissing -> executionIncomplete. The field never measured a missing envelope: it read the EXECUTION_INCOMPLETE bucket straight off the histogram. The real signal — a signable document with no envelope — is the PRE-delivery defect **************** reports, a different fact at a different lifecycle point. Renamed rather than reimplemented because the UI label ("Execution incomplete") was already honest, so the identifier was the only thing lying about itself; the org-level envelope-missing query remains unbuilt and the javadoc says so rather than leaving it implied by a name. averageScore is one AVG over GRADED_STATES, org-wide. It sampled the 200 most recently DELIVERED assignments while passRate was org-wide, so a card could print "83% pass rate / mean score 55" with both true of different people — and the sample was drawn on DELIVERY, which correlates with nothing about scoring: one large assignment delivered this morning displaced every graded row and the mean went null while the pass rate sat unchanged. The pass rate's denominator now reads the same GRADED_STATES constant, so the two populations cannot drift apart by edit. Null-when-nothing-graded is preserved on both. WIRE CHANGE: legal.envelopeMissing -> legal.executionIncomplete. HrResourceAccess -> HrSummaryAccess: it has always gated all three blocks and canReadAnything is the whole endpoint's admission check, so a name scoped to resources understates its blast radius. AttentionRow.daysOverdue said "always positive"; DAYS.between truncates, so a row two hours overdue reads 0. Non-negative — presence in the list is the test for lateness, not `> 0`. The overdue predicate split is untouched: legal OPEN_STATES, training REMINDABLE_STATES, AWAITING_GRADING never overdue.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing