Summary

  • RFC 3977 tells an NNTP client to obtain the server's time before issuing NEWNEWS, while querying from the timestamp saved during its previous session.
  • That ordering deliberately overlaps successive searches. A Message-ID may be returned again, but an identifiable duplicate is safer than an article stranded between two checkpoints.
  • The result remains bounded evidence: server-local arrival time, selected newsgroups and command availability define what the list can say.

The eight-second hole

Imagine that a client begins a poll when the server clock reads twelve o'clock. It asks for everything since yesterday. The search and response take eight seconds. During those seconds, a new article reaches the server.

If the client waits for the response and then stores twelve-oh-oh-eight as its next starting point, the newcomer can be lost between observations. The first search may already have taken its snapshot before the article arrived. The next search excludes anything older than twelve-oh-oh-eight. Nothing in either response announces the omission. The client has manufactured a clean ledger with a hole it cannot see.

The safe alternative looks untidy. Read the server clock first and hold that value. Run the search from the checkpoint saved on the preceding visit. Only when the operation is over does the client replace the old checkpoint with the value it captured before the search. The next poll begins early enough to cover the whole interval again. One identifier may appear twice. It can be recognised. Silence cannot.

A command built for discovery, not delivery

RFC 977 introduced NEWNEWS in 1986. A client supplied one or more newsgroup patterns plus a date and time. The server returned one Message-ID per line for articles posted or received in the matching groups since that boundary. Wildcards could broaden the search; an initial exclamation mark could exclude a branch; an empty list was still a valid answer.

That shape matters. NEWNEWS did not send the articles themselves. It supplied identifiers from which a client could decide what to retrieve. The protocol therefore separated discovery from custody: learning that an identifier qualified did not prove that a body had been downloaded, retained or even remained available indefinitely.

The first specification also carried an optional distribution selector. By 2000, RFC 2980 recorded that implementations disagreed about what this selector meant. The same document warned that administrators often disabled NEWNEWS. A useful historical mechanism was never a licence to presume uniform deployment.

The timestamp belonged to the server

The critical word in “new” is not the date written by an author. RFC 3977 describes three retrieval keys: a globally unique Message-ID, a server-local group-and-article number, and an arrival timestamp assigned when the article reaches that server. NEWNEWS uses the third.

This prevents an authored date from deciding whether an item enters a poll. A delayed or incorrectly dated article can still be new to this server. It also means that two servers can truthfully assign different arrival times to the same article. The command reports a situated history: what this server received, within these selected groups, after this boundary.

Clock ownership follows evidence ownership. RFC 2980 had standardised DATE as the server's view of UTC. RFC 3977 tightened the relationship: DATE must use the same clock that determines article-arrival and group-creation times. It is not a substitute for NTP. It is a way for the client to place its checkpoint in the coordinate system the server will later use to evaluate it.

Save before asking

RFC 3977 gives an unusually concrete sequence. In a later session, the client first issues DATE and holds the returned value in temporary storage. It then issues NEWNEWS using the timestamp saved from the previous session. Afterward, it overwrites the saved timestamp with the value already in temporary storage.

The ordering is the algorithm. Recording the clock before the query closes the race between selection and checkpoint advancement. A crash before the new checkpoint is committed merely causes the older interval to be queried again. A slow response widens the overlap rather than opening a gap.

The specification even permits moving the timestamp back by two or three minutes to absorb minor errors. Its example then returns one Message-ID in two consecutive sessions. That repeat is not presented as corruption. It is the visible cost of a safety margin.

There can be duplication inside one response too. RFC 3977 says response order has no defined significance, may vary during the same session, and may contain the same Message-ID more than once. Multiple occurrences carry the meaning of one. A client therefore needs set-like reconciliation rather than position-based inference.

Choosing the failure that leaves evidence

Overlap does not make every failure harmless. A client must preserve its checkpoint durably, keep the previous value until the poll completes and deduplicate identifiers without confusing repeated discovery with repeated article publication. Group patterns must be correct. If NEWNEWS is not advertised, the client needs another method. Material already outside the server's reportable history cannot be summoned by moving a timestamp backward.

But the design makes one strong choice. A duplicate has a name. It can be logged, compared and collapsed. A gap created by advancing the checkpoint too late has no corresponding object in the client's record. It can look exactly like a quiet interval.

The IANA NNTP Parameters registry now records NEWNEWS as the capability declaring that the command is available. The registry proves a standard name and reference, not that a particular server enables it. Capability discovery, group scope, clock source and checkpoint state all remain part of the evidence chain.

The history inside a checkpoint

Incremental systems are often described as if a cursor simply marks “where we are.” NEWNEWS reveals a more careful truth. A checkpoint is a claim about which interval has been observed completely enough to leave behind. Its placement decides whether uncertainty appears as repeat work or as an undetectable absence.

NNTP chose the recoverable inconvenience. It read the clock before the search, kept the old checkpoint while the answer was in flight and let the next search overlap. The protocol did not eliminate uncertainty. It arranged for uncertainty to leave an identifier.

Sources