auditAcks function
Classify every entry in state against project, using the raw
(pre-suppression) result to tell a live ack from an inert one.
Sorted by id, so the output is stable in a diff.
Implementation
List<AckAudit> auditAcks(
CheckResult result,
DialectProject project,
StateStore state,
) {
final fired = <String>{};
for (final issue in result.issues) {
final id = ackId(issue);
if (id != null) fired.add(id);
}
final audits = <AckAudit>[];
for (final entry in state.checks.entries) {
final id = entry.key;
final parts = id.split(':');
if (parts.length != 3 ||
parts.any((p) => p.isEmpty) ||
!isAckableRule(parts[0])) {
audits.add(
AckAudit(id: id, status: AckStatus.invalid, record: entry.value),
);
continue;
}
final locale = parts[1] == 'source' ? null : parts[1];
final current = ackFingerprint(parts[0], locale, parts[2], project);
final AckStatus status;
if (current == null) {
status = AckStatus.orphaned;
} else if (current != entry.value.acknowledged) {
status = AckStatus.lapsed;
} else if (fired.contains(id)) {
status = AckStatus.live;
} else {
status = AckStatus.inert;
}
audits.add(AckAudit(id: id, status: status, record: entry.value));
}
audits.sort((a, b) => a.id.compareTo(b.id));
return audits;
}