Move the pure, IO-free src/signals/duplicate-winner.ts (60 lines) into packages/gittensory-engine/src/duplicate-winner.ts. This module's election logic ("exactly one winner survives a duplicate cluster: the earliest observed linked-issue claimant") is explicitly called out in the roadmap as reusable for the miner's own soft-claim adjudication (deciding which of several miners claiming the same issue proceeds) — extracting it now means both the maintainer gate and the miner's local claim-ledger (a later Phase-0 issue) import the identical, versioned logic instead of the miner reimplementing its own copy that could drift.
Deliverables
References
src/signals/duplicate-winner.ts (60 lines, full file) — the exact module to port, PURE (no IO, no Date, no random per its own header comment).
packages/gittensory-engine/ — created by the package-skeleton issue (must land first).
- Phase description's explicit call-out: "has the duplicate-winner ELECTION logic — reuse for soft-claim adjudication".
Move the pure, IO-free
src/signals/duplicate-winner.ts(60 lines) intopackages/gittensory-engine/src/duplicate-winner.ts. This module's election logic ("exactly one winner survives a duplicate cluster: the earliest observed linked-issue claimant") is explicitly called out in the roadmap as reusable for the miner's own soft-claim adjudication (deciding which of several miners claiming the same issue proceeds) — extracting it now means both the maintainer gate and the miner's local claim-ledger (a later Phase-0 issue) import the identical, versioned logic instead of the miner reimplementing its own copy that could drift.Deliverables
packages/gittensory-engine/src/duplicate-winner.ts— verbatim port ofDuplicateClaimMember,isDuplicateClusterWinnerByClaim, and the deprecatedisDuplicateClusterWinner(keep the@deprecateddoc comment; do not drop legacy callers' compatibility).src/signals/duplicate-winner.tsbecomes a thin re-export shim from@jsonbored/gittensory-engineso existingsrc/imports keep working unchanged.packages/gittensory-engine/src/index.tsre-exports the new module.References
src/signals/duplicate-winner.ts(60 lines, full file) — the exact module to port, PURE (no IO, no Date, no random per its own header comment).packages/gittensory-engine/— created by the package-skeleton issue (must land first).