You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Classify late settlement from Horizon close_time vs expiry and cancel #507
On-chain payment can land after expiresAt or after cancel. Policy docs already exist (docs/LATE_PAYMENT_POLICY.md, docs/EXPIRY-AND-LATE-PAYMENT.md) but verify/monitor still risk using server now instead of ledger close_time, which is wrong under clock skew and delayed Horizon pages.
Goal
Settlement context (ON_TIME / AFTER_EXPIRY / AFTER_CANCEL) is decided only from Horizon transaction close time versus stored expiresAt / cancelledAt. Proof and timeline show the same classification.
Work
Parse created_at / ledger close time from Horizon as UTC
Fail closed if close time is missing (do not invent Date.now())
Persist settlementContext / late-pay warning codes already in the domain model
Verify, monitor, receipt, timeline, and PDF must share one classifier
Tests for the documented matrix; no new overlapping policy doc
Classify settlement strictly from the ledger: parse Horizon close_time on the paying transaction and compare against stored expiresAt / cancelledAt — server now never enters the decision.
Emit one enum (ON_TIME / AFTER_EXPIRY / AFTER_CANCEL) from a shared classifier used by verify, the monitor, proof, and the timeline so all surfaces agree.
Tests with fixed fixtures: payment inside window, after expiry, after cancel, plus a clock-skew case where server time disagrees with close_time and the ledger wins.
I have submitted the implementation in original-author PR #576: #576. I am claiming this contribution for review and any eligible GrantFox OSS reward under the published program terms. Please confirm assignment/acceptance and, if an award is approved, its actual amount, allocation and payout process. I am not representing the Maybe Rewarded label as guaranteed funding or an awarded payment.
Activity
AlexanderJiazx commentedon Sep 22, 2026
Applying for this one.
Approach:
close_timeon the paying transaction and compare against storedexpiresAt/cancelledAt— servernownever enters the decision.ON_TIME/AFTER_EXPIRY/AFTER_CANCEL) from a shared classifier used by verify, the monitor, proof, and the timeline so all surfaces agree.close_timeand the ledger wins.First draft PR within ~24h of assignment.
Classify late settlement by ledger close time vs expiry
Chidi-Dev1 commentedon Sep 27, 2026
Hello team, I want to resolve this issue.
Thanks!
Chidi-Dev1 commentedon Sep 27, 2026
Hello team, I want to resolve this issue.
Thanks!
rupesh-kumar-sah commentedon Oct 3, 2026
Hi,
I have experience with similar implementations and would like to take this on.
Implementation approach:
I can deliver a clean, tested PR within 24 hours. Please assign!
Rodrigoue9 commentedon Oct 7, 2026
Hi @maintainers! I'd like to work on this issue. Here is my proposed technical approach:
Proposed Technical Approach:
close_time.Key Files:
src/**(pipeline handlers and invoice monitors)tests/**Verification & Testing:
cargo test/npm testwith 100% clean check.Relevant Track Record:
I have successfully implemented and merged multiple production PRs across the Stellar ecosystem and Web3 open-source projects (e.g., cybermax4200/stellar-did-credit #898 & #900, Bitcoindefi/OpenAO #218, and FindMalek/sonaraem #416).
Please feel free to assign this issue to me so I can proceed with the implementation. Thank you!
woahwhattheheck commentedon Oct 9, 2026
/claim #507
I have submitted the implementation in original-author PR #576: #576. I am claiming this contribution for review and any eligible GrantFox OSS reward under the published program terms. Please confirm assignment/acceptance and, if an award is approved, its actual amount, allocation and payout process. I am not representing the
Maybe Rewardedlabel as guaranteed funding or an awarded payment.