Time and Label Contract: Reader Edition of Technically Accepted v2
The frequency is monthly and the audit timezone is UTC. The source contains only YYYYMM; do not rename it as an actual trading timestamp. Each monthly interval is the half-open interval [B_t, B_(t+1)), where B_t is 00:00:00 UTC on the first day of month t. This is a calendar label, not a definition of U.S. trading hours.
Decision, allocation, and holding period
The study assumes a signal cutoff
For a real PIT row, the required eligibility condition is event_time describes the economic event and is not forced into a total ordering with announcement time; an announcement can precede the event's effective time. revision_at records the external release of a revision and is not sorted by ingestion time. Select the latest eligible external version; reject a tie at the same publication time. as_of is the query cutoff, not a way to backdate the 2026 snapshot download time to 1990.
Historical monthly available, ingested, and revision times for the French data are unknown; the known download UTC records only ingestion of the 2026 snapshot. Therefore, strict historical PIT status is unknown/blocked; the bounded historical-analysis status is hypothetical simulation, within the scope accepted by the original main conversation. Delay sensitivities cannot turn unknown into passed.
RF and factors are used only for same-month excess returns, risk, or attribution after returns are realized; they are not features for decisions made in that month. Subtract the corresponding FF3 RF once from portfolio total return; do not subtract RF again from Mkt-RF, SMB, or HML. If cash is retained, using same-month RF for its return is an ex-post assumption and must be labeled as such; do not claim it was known at signal time. The primary specification is fully invested; cash only absorbs the reconciliation residual from costs.
Label maturity, purging, and gap
When fitting at cutoff
For forward-only splits, all training data precede validation, so future-side embargo is 0. A one-month signal skip is a signal skip, not an embargo. Historical publication delay is unknown, so the source cannot determine a fixed maturity gap; record pending_available_history and do not assume that a one-month gap is enough. Cross-validation that trains on future data is outside this protocol's support domain.
Two explicit constructed rows
| Row | event | available | ingested | revision | query_as_of | signal | trade | label end / available | Step-by-step decision |
|---|---|---|---|---|---|---|---|---|---|
| Normal constructed row | 2026-01-31 19:00Z | 1/31 20:00Z | 1/31 21:00Z | 1/31 22:00Z | 1/31 22:00Z | 2/1 00:00Z | 2/1 00:00:01Z | Matured prior label 1/1/1/2 (constructed) |
Latest eligibility time 1/31 22:00 is |
| Future announcement / immature row | 2026-01-31 19:00Z | 2/2 00:00Z | 2/2 01:00Z | 2/2 00:00Z | 2/2 01:00Z | 2/1 00:00Z | 2/1 00:00:01Z | February label end= |
available and ingested are later than signal, so reject the feature; label end and availability are also later than fit, so reject it for training. |
The months and values above are explicitly CONSTRUCTED; the half-open endpoint is available times onto French rows. Applicability of corporate events is explained in the monthly-return dictionary; do not add separate event cash to aggregate total returns.
v2 confirmed calendar and continuous-stage contract
G02 dates are closed. Warm-up is 1988-07..1989-12; evaluation is 1990-01..2026-08; development ends 2004-08, validation is 2004-09..2015-08, and locked reporting is 2015-09..2026-08. Independent month-index checks established
Each of the 13 paths enters once with cash 1 at 1990-01 and then carries its actual prior drifted holdings/NAV forward every month. It does not reset, liquidate, or charge another entry cost at segment boundaries; it liquidates once in 2026-08. Thus the first primary-report row's pre_NAV carries from month-end 2015-08. The 2015-09 d is a row from the continuous paired ledger, not a separate experiment restarted with cash 1. The final primary month includes terminal liquidation. Segment-chart normalization changes display only; it does not change costs or returns.
The first-month windows are L11=1989-01..1989-11, L5=1989-07..1989-11, and L17=1988-07..1989-11; skip1 excludes December 1989. L11/skip2 uses 1988-12..1989-10. Warm-up does not initialize compounded account wealth. Signal
Check completeness of the 132-month HAC sample using month keys; do not drop a missing row and treat the next row as the next month. The forward-only design has CONSTRUCTED and their eligibility clocks must not be copied to market data rows.
Return to the Capstone README. Full cost and HAC equations are in the technical protocol.