Each of the elements of an updatedFeed is mandatory. If you don't have a value for it, include it with an empty string as its value.
The elements of an updatedFeed come from the top level of a feed, except for feedUrl, which is of course the address of the feed itself, and whenLastUpdate which is the time when the new items from the feed was read by the aggregator.
websiteUrl comes from the link element in the feed, feedTitle from the title element and feedDescription from the description element.
The top-level metadata element contains data that would have appeared in the head element if this were OPML or at the top level of an RSS feed.
docs is a link to a web page that documents the format. It's present here considering the possibility that someone finds this file 50 years from now and has no idea what the format is. It should tell them, more or less, what they're looking at. As soon as this document is finished I'm going to have my rivers point to this page from this element.
whenGMT says when the file was built in a universal time. whenLocal is a string that says when it was built in local time so the person responsible for the file doesn't have to do the translation when debugging the code.
version is 3.
secs is the number of seconds it took to build the file.
In this post, written on June 23, 2009, I admit that 280 is an arbitrary number.
In that post I talk about doing an experiment with the feeds of the NY Times and the BBC, and we actually did that experiment and found that the average length of descriptions was longer than 140 character (the limit in Twitter), but less than 500 characters.
In case it isn't obvious, 280 is exactly twice 140. :-)
We're using RFC 822 format. It's the same one we use in RSS, and since everyone has to parse RSS to be able to produce this format, it stands to reason that everyone has code to parse this format. It's also nicely human-readable.