outstanding.agents.state is a queue of what sort of message we sent to a
foreign app. We use it so that when the acknowledgment comes back we
know whether to treat it as a watch-ack, poke-ack, or neither. We used
to put this info in the wire, but this gave us a different ames flow,
which meant %leave and %watch didn't get associated (causing #2079).
The error was that when when retrieving the item from the queue, we put
the new 1-item-shorter queue back in outstanding.agents.state at a
different wire than it came from, so the queues never actually got
shorter, and acknowledgments of the wrong sort were commonly produced.
This caused problems mainly in situations where we poke and peer on the
same wire, and possibly when a subscription was cancelled.
Possibly related to #2206 and #2176. I would expect this bug to cause
those issues, but I haven't verified the converse. Also possibly
related to #2153 and #2079.
"Replace" suggests this function either produces an updated set/map when done,
like +snap, or changes all values in-place, like +turn. In truth, it's more
similar to +roll, which does reduction/accumulation.
("Reduce" specifically was chosen because it maintains the mnemonic relation to
the arm name.)
It's very easy to forget to verify that pills have been updated
accordingly when the kernel changes. This adds a warning that prints
when the kernel in the target has changed but the pills have not.
Also prompts the user for confirmation pre-merge.
The scaffold and reducer work thus far had some bugs and shims. This commit
adds the parameters, API calls and fixes the reducers for the two
features.
This lines up the input with the "Set location" button,
and makes the latitude/longitude setting error
more concise, in order to fit within the tile without overflow.
This commit also removes some Tachyons-specific CSS classes.
Renames the somewhat ambiguous "members" property into "contacts", to
more clearly indicate the source/nature of the data within. (Avoid
confusion with "members of a group", which is contained in groups
instead.)
Also refactors the retrieving of appropriately-defaulted contact values
into a utility function.
We were passing in a contacts object, which may not always contain all
group members. We now pass in a groups object (set of ships) instead,
and derive contributor count from that.