Decide and document the fold summary-row timestamp semantics (first/last source-ts vs accumulator finalize-ts) #335
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fieldtest of the #310 cycle (fold-selector, 2026-07-24), spec_gap: the timestamp a fold's one summary row carries is undocumented and observably mixed —
first/lastcarry the source value's own ts (per their roster doc), whilecount/sum/mean/min/maxcarry the finalize ts; notablymin/maxdo NOT carry the extremum's ts. The behaviour is deterministic and defensible (accumulator folds have no single source instant), but nothing states it: decide the intended semantics (ratify as-is vs. extremum-ts for min/max), then record it where the fold roster docs live and in C27's Current state / the glossary tap-plan paragraph.refs #310
Derived decision (tracker harvest, 2026-07-24)
Ratified as-is:
first/lastcarry the source value's own timestamp (they pin a single source instant); the accumulator folds (count/sum/mean/min/max) carry the finalize timestamp (they summarise a range and have no single source instant).min/maxdeliberately do NOT carry the extremum's timestamp — that would privilege one input instant for a row that summarises the whole window, and cost extra state for no known consumer. To be recorded where the fold roster docs live, in C27's Current state, and in the glossary tap-plan paragraph by the harvest commit.Correction to the decision above (review-refuted, 2026-07-24)
The independent diff review refuted the "finalize timestamp" half of the earlier comment against the code:
TapFoldstamps the summary row withlast_ts— the instant of the last WARM (contributing) eval — not the run-end instant; the two coincide only while the tap stays warm to the end (which the fieldtest fixtures did, hence the misreading). "No single source instant" was likewise false.Ratified as shipped: the row is emitted at finalize and stamped with the last contributing value's instant;
firstalone pins the first contributing instant;min/maxdeliberately do not carry the extremum's instant. C27, the glossary, and the roster doc lines ("one row at the last warm ts") record this corrected form.