Skip to content

Not Future Check FAQ

Answers to common questions about what Not Future compares against, how arrays and NULLs behave, and how anomalies are reported, grouped by topic.

Behavior

What exactly is the check comparing against?

The moment the Scan evaluates the row. The boundary moves with every run, which is why the rule needs no configuration and never goes stale.

Why does it fire on timestamps that are barely ahead of now?

Almost always a clock difference or a time zone applied in the wrong direction during ingestion, not a genuinely future event. Both sides are compared in UTC.

How are NULL values treated?

NULLs pass. Not Future only constrains dates that are present. Pair with Not Null when the field is mandatory.

How does the rule behave on an array field?

Every element must be in the past for the row to pass. One future element fails the row, empty elements are skipped, and an empty array passes. On an array field the rule runs as a field-level check, so violations are always reported as a Shape Anomaly rather than one anomaly per row.

Can I use it for a fixed deadline instead of "now"?

No. For an explicit boundary use Before Date Time, which takes the date and time as a property.


Anomaly Reporting

What do the anomaly messages look like?

Record Anomaly: <field> has the value <value>, which is dated in the future

Shape Anomaly: <field> values are dated in the future, affecting N of M asserted records

When a filter is set, the message names it at the end of its first sentence, as (applied to records where <expression>). Record and Shape Anomaly messages both carry it.

Does Not Future produce Record Anomalies, Shape Anomalies, or both?

On a Date or Timestamp field at 100% coverage (the default), violating rows are reported as Record Anomalies. Below 100% coverage, a failed coverage assertion produces one Shape Anomaly for the dataset. On an array field the rule always reports a Shape Anomaly, at any coverage.

Scan settings can group a large number of Record Anomalies into one rolled-up Shape Anomaly, which carries the Shape Anomaly message. This behavior applies across rule types and is documented under Maximum Record Anomalies per Check.

Does Custom Anomaly Description work for Not Future?

Yes, on a Date or Timestamp field, because those emit Record Anomalies: the anomaly_message_field payload field (and the Custom Anomaly Description toggle in the UI) applies. It has no effect on an array field, which reports a Shape Anomaly.

When the option points at another column on the same row, the Record Anomaly message becomes that column's value for the violating row, shown as written. When the column is null, missing, or empty, the message falls back to the rule's standard wording, and when the column is masked the message reads <masked>. Shape Anomaly messages are unaffected.


Configuration

Can I lower the coverage on a Not Future check?

Yes. Coverage at 1.0 (100%) means every row must pass. Lowering coverage to 0.995 allows up to 0.5% of rows to fail without raising an anomaly; once the failing fraction goes past that, the check reports a Shape Anomaly. Use lower coverage with care: a real regression that happens to fall just under the threshold will not raise an alert at all.

The check has no properties. What can I edit?

The evaluated field, the filter clause, the coverage threshold, and everything under Ownership and Metadata. See Edit a Check for the full steps. The rule type, the target container, and the associated Check Template stay immutable.

What permission do I need to create or edit a Not Future check?

The Drafter team permission on the datastore covers Draft work (creating a check as Draft or editing it while it stays Draft). Anything that puts the check into evaluation, such as creating or editing an Active check, archiving, or deleting, requires the Author team permission (or above). Viewing only requires Reporter. See Permissions for the full matrix.

Should I use Not Future or Before Date Time?

Use Not Future when the boundary is the present moment and should stay that way. Use Before Date Time when the boundary is a specific date you want stated on the check.