A family object built outside frmtmb::frm() has no data, so it has
no fastest response and no bound. That state is not neutral, and this
is the seam entry that settles it, so that a family which reaches
ndt_bound_attach() at CONSTRUCTION is in one of two honest states
rather than carrying whatever link its constructor happened to
declare.
Details
max_ndt = NULLgives a PENDING bound. Thendtlink then refuses by name untilfrmtmb::frm()settles it. That refusal is load-bearing rather than decorative:frmtmb::mixture()never finalizes its components, so a component with an unsettled bound would readndton a scale nothing had set; andbf(ndt = )runslinkfun()at PARSE time, where the range check is against whichever link the family is carrying, so a constant outside the SETTLED bound passes a check against a placeholder and reaches the objective asNaN.max_ndt = <a number>gives a SETTLED bound, and the family scores outsidefrm():ndtis a time measured against that bound,frm_linpred(dpar = "ndt", type = "response")reports seconds, and a pinned constant means what it says.
The second is what a package reaching into another family's density
slot needs, and it is what wiener(), lba(), rdm() and
wiener_gng() do for themselves through their own max_ndt
argument.
See also
ndt_bound() for the bound derived once the response is in
hand, ndt_bound_attach() to put either on a family.