LITE-NYLE|date>   250222 
LITE-NYLE|who>    pav              
LITE-NYLE|type>   augmentation     
LITE-NYLE|branch> main             
LITE-NYLE|module> pFooBar          
LITE-NYLE|short>  Added Foo        

#---------------------------------
WISE-COLT|date>   250222 
WISE-COLT|who>    pav              
WISE-COLT|type>   bugfix
WISE-COLT|branch> main             
WISE-COLT|module> BHV_AvoidObstacleV24          
WISE-COLT|short>  Handle when helm not configured w/ platform model

The AvoidObstacleV24 behavior is the first behavior to use the new platform
model feature of the helm. However the behavior was not properly handling the
case where the helm was not configured with a Dubins model. This has been
corrected, to default the helm to a holonomic model, and post a warning that
a Dubins model is prefered for this behavior. The warning can be silenced by
settting holonomic_ok = true when configuring the behavior.

#---------------------------------
THIN-SPAT|date>   250218
THIN-SPAT|who>    smr           
THIN-SPAT|type>   augmentation     
THIN-SPAT|branch> main             
THIN-SPAT|module> pMarineViewer
THIN-SPAT|short>  Added SMR vessel type in viewer applications

Added a new vessel type for the SMR USV, selectable with the vessel type "smr"
in pNodeReporter. The type will render in pMarineViewer and alogview.

#---------------------------------
MILD-OMNI|date>   250216 
MILD-OMNI|who>    smr             
MILD-OMNI|type>   augmentation     
MILD-OMNI|branch> main             
MILD-OMNI|module> pNodeReporter
MILD-OMNI|short>  Added static node report riders    

A node report generatxed by pNodeReporter has certain fields present by
default, such as lat/lon, heading, speed. The app can now be
configured to include custom additions by param=value pairs in the
with the platform_aspect config parameter. These pairs are tagged onto
every node report and are not tied to any incoming MOOS variable (as
with dynamic riders). 

#---------------------------------
DULL-VIEW|date>   250215 
DULL-VIEW|who>    smr 
DULL-VIEW|type>   augmentation     
DULL-VIEW|branch> main             
DULL-VIEW|module> pNodeReporter          
DULL-VIEW|short>  Enabled dynamic node report riders

A node report generated by pNodeReporter has certain fields present by
default, such as lat/lon, heading, speed. The app can now be
configured to include custom additions by specifying (a) a MOOS
variable to subscribe for and watch, (b) a field name in the custom
node report, (c) the frequency of the addition to the node report, and
(d) the precision of the numerical value of the field if it is of type
double.

#---------------------------------
DULL-NICO|date>   250214 
DULL-NICO|who>    pav              
DULL-NICO|type>   bugfix
DULL-NICO|branch> main             
DULL-NICO|module> lib_bhvutil
DULL-NICO|short>  Fixed bug in RefineryCPA for missions with non-zero min speed

The RefineryCPA utility is used with collision avoidance behaviors to create
IvP functions with far fewer pieces. An inner loop could be entered indefinitely
in certain conditions, essentially hanging the helm. This was triggered in
helm configurations where the IvPDomain for speed had a minimum value different
from zero. This may be the case for missions with air vehicles where choosing
a speed of zero is not an option. For this reason it went un-noticed until
this bug fix. The bug fix now handles cases with non-zero min speed.

#---------------------------------
POSH-LYLE|date>   250127 
POSH-LYLE|who>    pav              
POSH-LYLE|type>   augmentation
POSH-LYLE|branch> main             
POSH-LYLE|module> uFldObstacleSim     
POSH-LYLE|short>  Added request to pLogger to log obstacle file

The obstacle file is ingested upon startup of uFldObstacleSim. At that
point a message is posted to pLogger, \var{PLOGGER\_CMD} to copy the
obstacle file into the log folder.

#---------------------------------
WIDE-NOTE|date>   250126 
WIDE-NOTE|who>    pav              
WIDE-NOTE|type>   augmentation     
WIDE-NOTE|branch> main             
WIDE-NOTE|module> pMissionEval
WIDE-NOTE|short>  Support for new macros, report formats, appcast output

Added several new macros the user can use for formatting custom report
lines, including time/date options, the mission form, mission mod, and
grade. User has more separator options in formating report lines. The
appcast output provide supported macro confirmation for user defined
macros derived from naming MOOS variables in a report column. Appcast
output also better conveys progress in overall mission test. Normally,
once a mission and evaluation has been developed and tested, appcast
output is not seen, since the mission is presumably being run
headlessly.  Improved appcast output is helpful when
developing/debugging the mission.

#---------------------------------
DRAB-HACK|date>   250125 
DRAB-HACK|who>    pav              
DRAB-HACK|type>   augmentation     
DRAB-HACK|branch> main             
DRAB-HACK|module> pHelmIvP
DRAB-HACK|short>  Added check for initial nav solution before proceeding        

The helm now supports a grace period, \var{nav\_grace=N}, upon startup.
Within this grace period it will not post an appcast warning if the nav
values have not yet been received, x, y, speed, heading and depth if an
underwater vehicle.

#---------------------------------

ZERO-TONE|date>   250113 
ZERO-TONE|who>    smr          
ZERO-TONE|type>   augmentation     
ZERO-TONE|branch> cmgr
ZERO-TONE|module> lib_contacts
ZERO-TONE|short>  Added JSON serialization for NodeRecords

The string2NodeRecord deserialization method now checks if the string is
in CSP or JSON format and deserializes accordingly.

#---------------------------------
HALS-CLEM|date>   250112 
HALS-CLEM|who>    smr
HALS-CLEM|type>   augmentation     
HALS-CLEM|branch> main             
HALS-CLEM|module> alogview          
HALS-CLEM|short>  Added ability detach a numerical variable for plotting.

Normally alogview launches and offers the option to plot any numerical
variable from the log files. However, string variables with multiple
numerical parts, e.g., \var{POINT=x=4,y=5,z=0}, are not
plottable. With the command-line option \var{--detatched=POINT:y},
alogview, in the pre-launch splitting phase, will create a separate
option to plot a variable presented as \var{POINT:y}.

#---------------------------------
FULL-CARY|date>   250112 
FULL-CARY|who>    smr
FULL-CARY|type>   augmentation     
FULL-CARY|branch> main             
FULL-CARY|module> alogsplit          
FULL-CARY|short>  Added ability to isolate numerical subcomponents of strings

Normally alogsplit will split into klog files based on logged MOOS
variable name, e.g, \var{NAV_X} will be split into a file
NAV_X.klog. And a variable say \var{POINT} which may have values like
\var{x=4,y=5,z=0} is similarly split into a file \var{POINT.klog}. The
alogsplit app now allows the user to specify a "detached" variable and
sub-component. For example, on the command-line, the argument
\var{--detached=POINT:y}, would result in the creation of the file
\var{POINT:y.klog}. This is primarily useful because the internal
splitting functionality is also used by alogview, and this allows
alogview to plot numerical variables that may be buried in a
multi-part string. This functionality works on both CSP and JSON
string formats.

#---------------------------------
BONY-ANTS|date>   250114 
BONY-ANTS|who>    smr
BONY-ANTS|type>   augmentation     
BONY-ANTS|branch> main             
BONY-ANTS|module> pNodeReporter          
BONY-ANTS|short>  Added option to publish JSON formatted reports

The pNodeReporter app normally publishes node reports in CSP formatted
strings, e.g, NAME=abe,LON=42.358436,LON=-71.087448,SPD=2.2. The user
now has the option to publish this in JSON format, e.g.,
{"NAME":"abe","LON":42.358436,"LON":-71.087448,"SPD":2.2}. By setting
\var{json_report=true}, the node reports are in JSON format. By setting
\var{json_report=VAR}, an additional node report is published to VAR,
while the CSP formatted report is published as normal.

#---------------------------------
VAIN-FONT|date>   250114
VAIN-FONT|who>    smr
VAIN-FONT|type>   augmentation     
VAIN-FONT|branch> main             
VAIN-FONT|module> lib_mbutil
VAIN-FONT|short>  Added JsonUtils for converting to/from JSON to CSP strings

The most common format for MOOS-IvP strings for complex object is the
common-separated pairs format, e.g., x=23,y=5,z=7. Some users prefer
to deal with JSON strings, e.g., {"x":23,"y":5,"z":5}. These two new
utilities allow for conversion between formats.

#---------------------------------
DARN-ROOM|date>   250111 
DARN-ROOM|who>    smr              
DARN-ROOM|type>   augmentation     
DARN-ROOM|branch> main             
DARN-ROOM|module> pContactMgrV20   
DARN-ROOM|short>  Added support for early warning time

The contact manager, pContactMgrV20, supports early warning
configuration with earl_warning_time=N. When configured, configurable
warnings as event flags are generated when the contact comes within
range to ownship, roughly 30 secs prior to an alert event. If there
are multiple alert events configured for contacts, the early warning
time is relative to the event with the largest range value. The user
may configure to have early warning radii rendered as XYCircle
postings. In this augmentation, the feature of early warning based on
reference speed and fixed warning distance was disabled. Benefits: The
newer approached is automatically tied to the configured alert of the
contact behaviors, and the configuration parameter of "warning time" is
essentially in the units that the operator cares about.

#---------------------------------
WAVY-REID|date>   250108 
WAVY-REID|who>    smr              
WAVY-REID|type>   augmentation     
WAVY-REID|branch> main             
WAVY-REID|module> uSimMarineV22
WAVY-REID|short>  Added option to publish USM_NAVPOS_SUMMARY

uSimMarineV22 will publish both NAV_X/Y and NAV_LAT/LONG as doubles, and
pLogger records double out to 5 decimal places. The USM_NAVPOS_SUMMARY
will publish a string with both, and at sufficient precision, e.g.,
x=68.932,y=-60.32,lat=43.824767,lon=-70.3295309. To opt for this publication
the new configuration parameter: \var{post_navpos_summary=true} should
be used in the uSimMarineV22 configuration.

#---------------------------------
SICK-CODI|date>   250103 
SICK-CODI|who>    smr              
SICK-CODI|type>   bugfix
SICK-CODI|branch> main             
SICK-CODI|module> pContactMgrV20
SICK-CODI|short>  Early warning system fixes and rel speed change

The early warning feature added previously was fixed and augmented to
use the relative speed between ownship and the contact in its policy
to expand the warning range. A new mission, berta_cmgr was created and
added to missions-auto for testing the new features.

#---------------------------------
SOFT-IVER|date>   241229
SOFT-IVER|who>    pav              
SOFT-IVER|type>   augmentation     
SOFT-IVER|branch> helmcl           
SOFT-IVER|module> uFldBeaconRangeSensor          
SOFT-IVER|short>  Integrated ContactLedger into the app

The ContactLedger utility was integrated to handle all incoming
NodeReport messages. The ContactLedger has built-in support for
dynamic datums and handling of global and local coordinates.

#---------------------------------
WIDE-RITZ|date>   241229
WIDE-RITZ|who>    pav              
WIDE-RITZ|type>   augmentation     
WIDE-RITZ|branch> helmcl
WIDE-RITZ|module> uFldContactRangeSensor          
WIDE-RITZ|short>  Integrated ContactLedger into the app

The ContactLedger utility was integrated to handle all incoming
NodeReport messages. The ContactLedger has built-in support for
dynamic datums and handling of global and local coordinates.

#---------------------------------
GRIM-KALE|date>   241229 
GRIM-KALE|who>    smr
GRIM-KALE|type>   augmentation     
GRIM-KALE|branch> helmcl
GRIM-KALE|module> uFldCollObDetect          
GRIM-KALE|short>  Integrated ContactLedger into the app 

The ContactLedger utility was integrated to handle all incoming
NodeReport messages. The ContactLedger has built-in support for
dynamic datums and handling of global and local coordinates.  While
uFldCollObDetect is not part of the autonomous decision-making
process, it is an essential tool for monitoring and validating the
obstacle avoidance algorithms.

#---------------------------------
NUDE-GROG|date>   241228
NUDE-GROG|who>    smr              
NUDE-GROG|type>   augmentation     
NUDE-GROG|branch> helmcl           
NUDE-GROG|module> uFldObstacleSim
NUDE-GROG|short>  Integrated ContactLedger into to the simulator

The ContactLedger utility was integrated to handle all incoming
NodeReport messages. The ContactLedger has built-in support for
dynamic datums and handling of global and local coordinates.  While
uFldObstacleSim is not part of the autonomous decision-making
process, it is an essential tool for monitoring and validating the
obstacle avoidance algorithms.

#---------------------------------
FULL-DUKE|date>   241228 
FULL-DUKE|who>    smr           
FULL-DUKE|type>   augmentation     
FULL-DUKE|branch> helmcl           
FULL-DUKE|module> uFldCollisionDetect
FULL-DUKE|short>  Integrated ContactLedger into the collision detector

The ContactLedger utility was integrated to handle all incoming
NodeReport messages. The ContactLedger has built-in support for
dynamic datums and handling of global and local coordinates. While
uFldCollisionDetect is not part of the autonomous decision-making
process, it is an essential tool for monitoring and validating
the collision avoidance algorithms. 

#---------------------------------
MEGA-MOLD|date>   241222 
MEGA-MOLD|who>    smr 
MEGA-MOLD|type>   augmentation     
MEGA-MOLD|branch> helmcl           
MEGA-MOLD|module> IvPBehavior
MEGA-MOLD|short>  Modified interface for accessing contact info      

Contact info prior to this mod has resided in the information buffer,
a pointer to which is shared between the helm and all behaviors. For
most contact behaviors, the contact position was handled at the
IvPContactBehavior superclass level in the updatePlatformInfo function. So this
mod should not require any behavior authors to modify code unless their
behavior was accessing contact info from the info buffer directly. The
IvPContact behavior now access information from the ContactLedger snapshot
through four new functions, e.g., getLedgerInfoDbl(), which takes the
name of the contact and the field information, e.g., the x position or
longitude position of the contact. This change is a preparation for
the helm and behaviors supporting dynamic datums in an upcoming release.

#---------------------------------
SLIM-TOUR|date>   241222
SLIM-TOUR|who>    smr           
SLIM-TOUR|type>   augmentation     
SLIM-TOUR|branch> main             
SLIM-TOUR|module> pHelmIvP
SLIM-TOUR|short>  Integrated ContactLedger into the helm and behaviors

The ContactLedger utility was integrated to handle all incoming
NodeReport messages. The ContactLedger has built-in support for
dynamic datums and handling of global and local coordinates. Support
was added to allow access for all helm behaviors, typically only
IvPContactBehaviors, to the contact ledger. The helm behaviors no
longer obtain contact information from the information buffer. This
addresses a potential unbounded memory growth issue for long autonomy
missions with thousands+ contact IDs posted and expiring, since the
information buffer didn't clear old contact information. The contact
ledger handles expiring contacts gracefully. The helm behaviors only
get a snapshot of the contacts currently held in the contact ledger
and thus behaviors are not concerned with contact memory management.

#---------------------------------
AVID-SONG|date>   241209 
AVID-SONG|who>    smr
AVID-SONG|type>   augmentation     
AVID-SONG|branch> main             
AVID-SONG|module> pContactMgrV20          
AVID-SONG|short>  Integrated the ContactLedger into the contact manager.

The ContactLedger utility was integrated to handle all incoming NodeReport
messages. The ContactLedger has built-in support for dynamic datums and
handling of global and local coordinates. 

#---------------------------------
DANK-ACHE|date>   241206 
DANK-ACHE|who>    smr           
DANK-ACHE|type>   augmentation     
DANK-ACHE|branch> main             
DANK-ACHE|module> pMarineViewer          
DANK-ACHE|short>  Integrated the ContactLedger into pMarineViewer

The ContactLedger utility was integrated to handle all incoming NodeReport
messages. The ContactLedger has built-in support for dynamic datums and
handling of global and local coordinates. 

#---------------------------------
EASY-BAND|date>   241203 
EASY-BAND|who>    smr
EASY-BAND|type>   augmentation     
EASY-BAND|branch> main             
EASY-BAND|module> lib_geodaid
EASY-BAND|short>  Added lib_geodaid with ContactLedger util class      

The lib_geodaid library was created, with a the ContactLedger utility
class. This class is for use in all MOOS-IvP apps that receive, store
and reason about NodeReports. The ContactLedger has a Geodesy and
declared datum. As node reports are received with lat/lon coordinates
the the local planar coordinates are filled in, based on the current
dataum setting. If a datum shifts mid-mission, any app using the
contact ledger simply needs to set to the new datum, and all previously
received and held node reports will be updated with new local coords.
The ContactLedger was moved to its own library, rather than existing
in lib_contacts, to allow apps (and behaviors) that previously had no
dependency on Geodesy, to remain so. 


#---------------------------------
OPEN-ZALE|date>   241130 
OPEN-ZALE|who>    smr
OPEN-ZALE|type>   augmentation     
OPEN-ZALE|branch> cmgr   
OPEN-ZALE|module> pContactMgrV20          
OPEN-ZALE|short>  Added support for event flags when contact ages out

The contact manager will drop a contact after some period of time with
no updates from the contact. There is now the user option of posting a
flag upon this event, for each contact, with support for macros
revealing the contact name and UTC time of timeout. This can be useful
for proactively informing a UI module to cease rendering a contact.

#---------------------------------
COLD-COBY|date>   241130 
COLD-COBY|who>    smr           
COLD-COBY|type>   augmentation     
COLD-COBY|branch> cmgr          
COLD-COBY|module> pContacMgrV20          
COLD-COBY|short>  Added support for early warnings

The contact manager now supports an early warning capability. The
user specifies a range to ownship within which a contact will trigger
an early warning, typically substantially before a contact related
behavior will be spawned. This allows an operator or other app to
act on the early warning by choosing to disable a contact if other
information indicates that the contact does not pose a safety concern.
The early warning range can be speed regulated, potentially enlarging
for contacts above a certain reference speed threshold.

#---------------------------------
NINE-ALAN|date>   241129 
NINE-ALAN|who>    smr              
NINE-ALAN|type>   augmentation     
NINE-ALAN|branch> cmgr             
NINE-ALAN|module> pHelmIvP   
NINE-ALAN|short>  Added support for disabling/enabling contacts

The helm can now accept requests to disable or re-enable a named
contact.  This change is in coordination with the changes to the
IvPBehavior and IvPContactBehavior to support the new disabled state
for behaviors.  HelmEngine maintains an ordered cache of
disable/enable requests, to ensure that such requests are applied even
if a behavior has not yet been spawned.

#---------------------------------
FLAT-LADY|date>   241129 
FLAT-LADY|who>    smr          
FLAT-LADY|type>   augmentation     
FLAT-LADY|branch> cmgr             
FLAT-LADY|module> pContactMgrV20
FLAT-LADY|short>  Added support for disabling/enabling contacts

The contact manager can now optionally accept input through a
user-provided variable to broker the helm the disabling of behavior(s)
associated with a named contact. Same is true for re-enabling a
contact. The contact manager will keep a local slate of
disabled/enabled contacts. The contact manager has new flags
associated with the disabling/enabling events with associate
macros. The latter allows the contact manager to post confirmations to
whatever app requested the disabling or enabling.

#---------------------------------
DRAB-SLUM|date>   241127 
DRAB-SLUM|who>    smr
DRAB-SLUM|type>   augmentation     
DRAB-SLUM|branch> cmgr             
DRAB-SLUM|module> aloghelm
DRAB-SLUM|short>  Added support for disabled behaviors

The aloghelm output for the --bhvs mode, now reflects disabled behaviors
as part of its standard output. This is a good post-mission method for
verifying behavior disabling and re-enabling proceeded as intended.

#---------------------------------
GOOD-SOUP|date>   241117 
GOOD-SOUP|who>    smr              
GOOD-SOUP|type>   augmentation    
GOOD-SOUP|branch> cmgr             
GOOD-SOUP|module> IvPBehavior
GOOD-SOUP|short>  Added new state, disabled, alongside idle, running etc      

In certain, especially USV, operations an operator may wish to disable
a safety behavior for a specific contact or set of contacts by direct
command. Although the contact manager can be configured to filter out
contacts based on a number of criteria, in this scenario, the behavior
may have already been spawned, and the operator may simply wish to
apply their discretion to filter out an active behavior. When a
behavior is in this new "disabled" state, it will essentially do
nothing. The behavior author can implement an onDisabledState()
function, and users can utilize the new disable_flag and enable_flag
options. Run-time disabling is communicated to the helm with the
BHV_ABLE_FILTER message. This can contain a message identifying the
contact explicitly, and/or also identifying the behavior
type. Subsequent messages to this variable can server to (re)enable
the behavior. Behaviors can be configured with can_disable=false which
will make them immune to run-time disable messages. For example a
close-in last line of defense collision avoidance behavior can be set
with can_disable=false.

#---------------------------------
VAST-NOEL|date>   241107 
VAST-NOEL|who>    smr             
VAST-NOEL|type>   augmentation     
VAST-NOEL|branch> pnr            
VAST-NOEL|module> BHV_CutRange          
VAST-NOEL|short>  Allow users to have patience param up to 100.

The CutRange behavior allowed for a patience parameter up to 100, but
the value was essentially clipped in AOF_CutRangeCPA, to be 85. Some
users want the full range. The default setting and upper bound remain
the same, but now users can set \var{max_patience} in the CutRange
behavior to be say 90 or 100. Then, a higher patience parameter will
be respected. 

#---------------------------------
HAZY-KIAN|date>   241102 
HAZY-KIAN|who>    pav        
HAZY-KIAN|type>   augmentation     
HAZY-KIAN|branch> pnr             
HAZY-KIAN|module> mhash_gen
HAZY-KIAN|short>  Added zhash capability for zbatch auto-testing

A zhash is new hash type comprised of US cities, for tagging batches
of missions in auto-testing. The 'z' is due to the convention of using
a zlaunch script to run a batch of missions. With distributed
auto-testing over a cluster of machines, the missions may not be
orchestrated by a zlaunch script, but nevertheless we settle on the
term of a "zbatch" to apply to a set of auto-tested missions and the
notion of "zhash" to be tagged to a zbatch. This mod is mostly
implemented in the HashUtils.cpp utility which is used by mhash_gen
when passed the -z flag.

#---------------------------------
PINK-WINE|date>   241031 
PINK-WINE|who>    smr              
PINK-WINE|type>   augmentation     
PINK-WINE|branch> pnr             
PINK-WINE|module> pAutoPoke          
PINK-WINE|short>  New thin MOOS app for poking MOOSDB upon startup

pAutoPoke is a thin MOOS app for poking the MOOSDB with a user-configured set
of pokes, typically at the start of the mission. In the initial verison of this
app, the intended use is in a shoreside community, after some specified number
of vehicles have been declared to be connected, based on the UFSB_NODE_COUNT
variable. This ensures that the full N-vehicle plus shoreside is running before
the poke(s) are made. In follow-on versions, the condition will be generalized
to any logic condition. This app was added to remove complexity of the xlaunch.sh
script used in auto-testing. With this app, the auto-launch simply launches the
mission and the kickoff commands are injected into the shoreside when ready.
In follow-on versions, when general logic conditions are supported, this app
can also be run in a vehicle community. 

#---------------------------------
HIGH-TOWN|date>   241031 
HIGH-TOWN|who>    smr 
HIGH-TOWN|type>   augmentation     
HIGH-TOWN|branch> pnr             
HIGH-TOWN|module> uMayFinish          
HIGH-TOWN|short>  New thin cmdline MOOS app for monitoring mission finish

uMayFinish is typically a terminal-launched MOOS app launched within a
shell script, e.g., xlaunch.sh. It will connect to a MOOS community
and monitor for a completion event or timeout based on DB_UPTIME. When
completed, it simply exits.  Presumably to allow the executing script
to proceed to a next phase. For example a script could proceed to
bring down the MOOS community for the mission it was monitoring.
This app was created as a thinnner, simpler alternative to uQueryDB when
running in a shell script running an automated test mission. The script
will launch uMayFinish and when uMayFinish completes, and disconnects from
the MOOSDB, the script may proceed to bring down the mission. 

#---------------------------------
DANK-GIBB|date>   241020 
DANK-GIBB|who>    pav
DANK-GIBB|type>   augmentation     
DANK-GIBB|branch> pnr             
DANK-GIBB|module> IvPBehavior          
DANK-GIBB|short>  Added getBufferIsKnown(string)      

Added the getBufferIsKnown(string var) function to allow behavior authors
to test whether the info buffer has ever had the var. 

#---------------------------------
MEEK-OVAL|date>   241020 
MEEK-OVAL|who>    smr           
MEEK-OVAL|type>   augmentation     
MEEK-OVAL|branch> pnr             
MEEK-OVAL|module> BHV_AvoidObstacleV24          
MEEK-OVAL|short>  Additional macro support for obs id and min_util_cpa

The BHV_AvoidObstacleV24 behavior was augmented to support addional
macros, (a) MINU_CPA, for the config parameter for min_util_cpa,
(b) MAXU_CPA, for the config parameter for max_util_cpa and (c) the
OIDX, for the obstacle ID based on the last component of the obstacle
label, separated by underscored, e.g., "1234" from a label "alpha_1234". 

#---------------------------------
MALE-KENT|date>   241020 
MALE-KENT|who>    pav 
MALE-KENT|type>   augmentation     
MALE-KENT|branch> pnr             
MALE-KENT|module> BHV_FixedTurn
MALE-KENT|short>  Added alt subscription for DESIRED_RUDDERX    

The FixedTurn behavior will normally subscribe for DESIRED_RUDDER
simply to log the rudder values during a turn. It is not part of the
behavior functionality. When using uSimMarineV22 with an embedded PID
controller, DESIRED_RUDDER is not published. uSimMarineV22 can be
configured with post_des_rudder=DESIRED_RUDDERX to publish the
internal rudder values and feed the FixedTurn behavior in this
operation.

#---------------------------------
SOFT-ALEX|date>   241020 
SOFT-ALEX|who>    pav              
SOFT-ALEX|type>   augmentation     
SOFT-ALEX|branch> pnr             
SOFT-ALEX|module> uSimMarineV22          
SOFT-ALEX|short>  mod uSimMarineV22 to halt on OBSTACLE_HIT=true    

uSimMarineV22 had a partially implemented feature to react to a posting
to OBSTACLE_HIT=true, resulting in the vehicle coming to stop. This mod
ensures that the event (a) more immediately results in speed=0, and
also ensures that the NAV_*_GT values also instantly halt.

#---------------------------------
FLAT-MARK|date>   241017
FLAT-MARK|who>    pav
FLAT-MARK|type>   augmentation     
FLAT-MARK|branch> pnr             
FLAT-MARK|module> BehaviorSpec
FLAT-MARK|short>  Added optional spawning cap for templating behaviors

For a behavior configured for templating, prior to this change, an arbitrary
number of instances could be spawned. For a behavior like collision avoidance,
this is fine. For a goal-oriented behavior like CutRange or Trail, it doesn't
make sense to spawn more than one instance at a time. This mod allows for
a behavior to be configured to cap the number of instances to an arbitrary
number like 1. NOTE: currently if a behavior is spawned and completes, the
completion event does not decrement the counter. 

#---------------------------------
FAST-RIOT|date>   241012 
FAST-RIOT|who>    smr 
FAST-RIOT|type>   augmentation     
FAST-RIOT|branch> pnr             
FAST-RIOT|module> AOF_R16          
FAST-RIOT|short>  Option added to disallow any port turn during giveway

A user opted for a slightly different conservative policy in the
COLREGS behavior, specifically in the "Give-way" mode. It pertains to
which set of maneuvers are outright prohibited in this mode. The
AOF_R16 class was modified to support conservative policy as a
configuration option.

#---------------------------------
SAFE-CODE|date>   241010 
SAFE-CODE|who>    smr            
SAFE-CODE|type>   augmentation     
SAFE-CODE|branch> pnr             
SAFE-CODE|module> BHV_AvdColregsV22
SAFE-CODE|short>  Additional status macros, quieter idle output 

The BHV_AvdColregs behavior produces a number of status messages,
mostly for post-mission analysis/debugging. To facilate users who wish
to make their own status messages, a number of supported macros were
added. These include AVD_MODE (the main avoid mode, e.g., headon,
giveway), AVD_SMODE (the sub-mode when the main mode has sub-modes),
APWT (the applied priority weight given by the static priority wt and
relevance, MODE_ID (a unique integer associated with all mode:sub-mode
values), and FULL_MODE (simply the string comprised of
mode:sub-mode). Macros may be used in any flag defined for the
behavior and behavior superclasses.  This behavior is now configured
by default to not publish any status messages in the idle mode. This
can be overridden by setting post_status_info_on_idle=true.

#---------------------------------
LONG-MELL|date>   241009 
LONG-MELL|who>    smr 
LONG-MELL|type>   augmentation     
LONG-MELL|branch> main             
LONG-MELL|module> uFldNodeComms
LONG-MELL|short>  Integration of ContactLedger as key data structure

The uFldNodeComms app received node repprts from all vehicles, and
uses this information to pass on node reports to other vehicles, and
uses the node report position information to decide whether to allow
messages to be routed to other vehicles. The ContactLedger class is a
new super-utilty class for receiving and storing node reports. The old
data structures were swapped out and replaced with the ContactLedger.
This allows this app to support dynamic datum changes.

#---------------------------------
ZERO-LAND|date>   241009 
ZERO-LAND|who>    smr
ZERO-LAND|type>   augmentation     
ZERO-LAND|branch> pnr             
ZERO-LAND|module> ContactLedger          
ZERO-LAND|short>  Introduced ContactLedger class, NodeRecord mods

The ContractLedger class is a new super-utility class to be used in
all applications that receive and reason about node reports. It
ensures that every node report has both Lat/Lon and X/Y coordinates,
converting as needed if a node report has only one or the other.  It
the dynamic update of a datum, recalculating local coordinates on each
update. It also is able to answer queries about node report staleness
and requests to remove stale nodes. It it first being integrated into
uFldNodeComms, but will also be integrated into pMarineViewer,
pHelmIvP, pContactMgrV20 and any other app reasoning about contacts.

#---------------------------------
MEEK-RUST|date>   241003
MEEK-RUST|who>    smr              
MEEK-RUST|type>   augmentation     
MEEK-RUST|branch> pnr         
MEEK-RUST|module> pHelmIvP
MEEK-RUST|short>  IvPHelm now handles node reports w/ only lat/lon

Prior to this change, the helm received node reports assuming each
node report contained local X/Y coordinates. The helm needs the local
coordinates for many behaviors using planar math. Things are moving
to where all inter-vehicle messages with position coordinates will use
only lat/lon coordinates and not local coordinates at all. The helm
was augmented to have an instances of MOOSGeodesy to allow incoming
node reports to convert reports with only lat/lon to also have local
coordinates, stored locally in the helm for access by the behaviors.
This change was to HelmIvP.h/.cpp.

#---------------------------------
VERY-LADY|date>   241003
VERY-LADY|who>    smr              
VERY-LADY|type>   augmentation     
VERY-LADY|branch> pnr             
VERY-LADY|module> lib_contacts          
VERY-LADY|short>  NodeRecord class serialize only global coords

Serialization of node records happends in the NodeRecord class. The
class was augmented to have a "coord_policy" which can be set to
global, resulting in all serializations using only lat/lon coordinates
while omitting local x/y coordinates. 

#---------------------------------
DRAB-EMIL|date>   241005
DRAB-EMIL|who>    pav
DRAB-EMIL|type>   augmentation
DRAB-EMIL|branch> pnr
DRAB-EMIL|module> mhash_gen
DRAB-EMIL|short>  mhash_gen --shore,-s produces short mhash

The mhash_gen utility produces a full mission hash, e.g.,
241005-1954L-SOFT-LEAF.  With the --short (-s) option, the short
version can be produced, e.g., SOFT-LEAF.  This is useful in some
shell scripts.

#---------------------------------
PINK-BRAM|date>   241004
PINK-BRAM|who>    pav
PINK-BRAM|type>   bugfix
PINK-BRAM|branch> pnr
PINK-BRAM|module> pMarineViewer
PINK-BRAM|short>  Fixed infocast pane browser reset upon refresh

Infocast panes with content larger than the pane will result in a
scroll bar. Using the scroll bar only worked until an instant later
when the pane was updated and the scroll position reset to the
top. Previous work-arounds included (a) making the pane bigger or (b)
pausing the infocast refresh. This bug fix ensures the position of the
content of the pane remains the same even as refreshes are arriving.

#---------------------------------
LIVE-JAWS|date>   241003
LIVE-JAWS|who>    smr
LIVE-JAWS|type>   augmentation
LIVE-JAWS|branch> pnr
LIVE-JAWS|module> pNodeReporter
LIVE-JAWS|short>  Enable node reports to be posted with just lat/lon

New support for a configuration that results in \mvar{NODE\_REPORT}
messages containing only Lat/Lon value and NOT include X/Y
coordinates. This is to support a larger effort to no longer use local
coordinates between vehicles. To enable this mode of operation, a new
configuration parameter was added, \var{coord\_global\_policy}.  When
set to true, only LAT/LON position information will be present in
outgoing \mvar{NODE\_REPORT\_LOCAL} messages. Note, for backward
compatability purposes, \var{coord\_global\_policy} is FALSE by
default. Perhaps in the furture, the inclusion of X/Y in reports will
be deprecated, but for now we err on the side of no unexpected
behavior for those who are not concerned by this issue.

#---------------------------------
GRIM-WINS|date>   241003
GRIM-WINS|who>    smr
GRIM-WINS|type>   augmentation
GRIM-WINS|branch> main
GRIM-WINS|module> pMarineViewer
GRIM-WINS|short>  Handle node reports with only lat/lon and no x/y

Now able to handle incoming \mvar{NODE\_REPORT} messages that do not
contain an X/Y value, only LAT/LON. Part of the migration to use only
global coordinates between vehicles and command/control. This will
support certain users where vehcles have different datums, or set
their datum to the current vehicle position at time of mission start.

#---------------------------------
HALF-PAWS|date>   241001
HALF-PAWS|who>    pav
HALF-PAWS|type>   augmentation
HALF-PAWS|branch> 
HALF-PAWS|module> pMarineViewer
HALF-PAWS|short>  Added Infocast Layout options esp for swarms

Support was added for optional infocast pane layouts. In addition to
the default layout (nodes upper left, procs upper right, cast on the
botttom), two other layouts are supported. A "swarm" mode with nodes
taking the entire PMV height on the left, and a "fullcast" mode where
only the cast pane is shown large.

#---------------------------------
JUST-ZIGS|date>   240930
JUST-ZIGS|who>    pav
JUST-ZIGS|type>   augmentation
JUST-ZIGS|branch> 
JUST-ZIGS|module> pMarineViewer
JUST-ZIGS|short>  Added Infocast panes darker colors 

Support was added for a few more darker colors for infocast
background. To help in certain lighting situations or on monitors
where lighter colors appear washed out.