Table of Contents

Constructor SpamClassificationHistoryEntry

Namespace
MailFathom.Application.Spam.History
Assembly
MailFathom.Application.dll

SpamClassificationHistoryEntry(StoredEmailId, MailFolderAlias, SpamVerdict, SpamClassificationStage, SpamAssessment?, string?, SpamClassificationProfile, IReadOnlyList<string>, DateTimeOffset, IReadOnlyList<SpamClassificationRequestedMutation>)

What classification concluded about one message, as an operator reads it back afterwards.

public SpamClassificationHistoryEntry(StoredEmailId EmailId, MailFolderAlias FolderAlias, SpamVerdict Verdict, SpamClassificationStage DecidedBy, SpamAssessment? Assessment, string? CorpusRevision, SpamClassificationProfile Profile, IReadOnlyList<string> SignalNames, DateTimeOffset EvaluatedAt, IReadOnlyList<SpamClassificationRequestedMutation> RequestedMutations)

Parameters

EmailId StoredEmailId

The stored occurrence the verdict is about.

FolderAlias MailFolderAlias

MailFathom's own name for the folder the occurrence is in.

Verdict SpamVerdict

What was concluded.

DecidedBy SpamClassificationStage

Which stage reached the verdict.

Assessment SpamAssessment

The score and the threshold it was judged against, or null when no stage produced a number.

CorpusRevision string

The scanner rule corpus the deciding stage ran under, or null when it has none.

Profile SpamClassificationProfile

The settings the verdict was reached under, or the unspecified value for a record that names none.

SignalNames IReadOnlyList<string>

The names of the facts the verdict rests on, in the order the stages produced them.

EvaluatedAt DateTimeOffset

When the classification was evaluated.

RequestedMutations IReadOnlyList<SpamClassificationRequestedMutation>

The changes the verdict asked the mailbox for, which is empty where it asked for none.

Remarks

It is a reading of the classification record rather than a second copy of one. There is no per-run history table behind this: a classification is what is believed about a message now, so the run that reached it is recoverable from the instant and the profile the record already names, and inventing a row per run per message would duplicate the verdict in order to record it twice.

The signals appear by name and never by value. A name is a method from RFC 8601, a header field, a folder alias, or a scanner rule; the observation beside it is text a mail server wrote and can carry a sending domain, which is exactly the second copy of the mailbox a record read back over an administrative endpoint must not become.

A requested change is named and pointed at rather than described. What became of it — attempted, converged, failed, given up on — is the mutation trail's own record with its own retention, and restating any of it here would leave two answers to one question.