Kimberly,
IMO the life cycle is (ignoring the zip for clarity):
1. Create index.html if it doesn’t exist. This is either created by a user request or cache primining.
2. If there’s an index.html.old, delete it and create index.html ON user request or cache priming.
3. The next time garbage collection runs, it turns index.html to index.html.old if the page has expired. IMO an unexpired page is NEVER changed to .old by garbage collection or by cache priming or user request. Emptying cache is an exception where all htmls are converted to .old.
You are right, the expiry is set by browser expiry. But if you set the expiry to 1 week, I don’t think anything will delete it tomorrow unless you “empty” the cache or some other plugin empties it (or a comment or publish). Emptying actually converts pages to .old
I haven’t observed an unexpired html file being renamed. In fact it is possible that an expired file is actually served to the user. This happens because the garbage collection runs say every hour and a page could have expired within two runs. So I am a bit surprised at your claim.