[codex] Refine EIP fork timeline model#346
Conversation
✅ Deploy Preview for eth-forkcast ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
No blocking issues found. The domain split is aligned with the stated intent: Validation run locally:
|
|
After taking another pass at the domain boundary, I think we should tweak the headliner side before merging. The current split is directionally right: The part that still feels muddled is
That makes the reader infer lifecycle semantics from field presence. Against our modeling principles, I think a scoped headliner history is the cleaner boundary: statusHistory // inclusion lifecycle
headlinerHistory // headliner candidacy lifecycle
discussionHistory // non-lifecycle discussion referencesFor example: headlinerHistory?: Array<
| { type: 'proposed'; date: string; link: string }
| { type: 'presented'; date: string; call: ProtocolCallReference; timestamp?: number }
| { type: 'selected'; date?: string; call?: ProtocolCallReference; timestamp?: number }
| { type: 'notSelected'; date?: string; call?: ProtocolCallReference; timestamp?: number }
| { type: 'withdrawn'; date?: string; call?: ProtocolCallReference; timestamp?: number }
>;I do not think this overextends enums if it stays scoped to the headliner lifecycle. It gives proposal/presentation/selection a natural temporal home, avoids boolean inference like So the requested change is: keep |
7085de1 to
7a07598
Compare
|
@dionysuz-bot please re-review. I addressed the latest dionysuzx feedback by replacing |
|
No blocking issues found. The revised Validation run locally:
|
7a07598 to
a635080
Compare
|
@dionysuz-bot please re-review. I tightened the headliner model further after reconsidering |
|
I found one blocking issue.
Validation:
|
a635080 to
c2e213a
Compare
|
@dionysuz-bot please re-review. Fixed the clean-checkout blocker: |
|
No blocking issues found on re-review. I verified the clean-checkout blocker is addressed:
The new split between status transitions, discussions, and headliner history is consistent with the intended domain boundary, and I didn’t see a correctness or maintenance issue that should block this PR. |

What changed
Refines the fork relationship timeline model so each field has a narrower domain meaning:
statusHistoryas the inclusion state machine for fork status transitionspresentationHistoryentries with genericdiscussionHistorycall referencesheadlinerCandidacyWhy
Issue #242 called out that a standalone
Presentedtimeline entry is not useful when it duplicates a proposal/status reference, and that the oldstatusHistory/presentationHistorysplit was mixing responsibilities through event enums.The new boundary keeps persistence simple: inclusion status transitions remain separate from non-transition discussion references. The UI gets a complete timeline by projection instead of requiring the raw domain model to be one all-purpose event log.
Validation
npm testnpm run checknpm run buildFixes #242