Repository navigation
Skip gear estates already settled in the hourly pass - #68
Conversation
Decided estates stay decided for good, and the hourly pass settled every one of them again each hour. Each settle reads gear-stations.yml several times on the main thread, so the cost grows with both the file and the number of estates; on 10-21 that froze Main for 20-30 s every hour. A revision this process already reported DONE is now skipped until the next restart. RETRY and BLOCKED answers, and new revisions, still settle every hour, and the first pass after a restart settles every estate once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Summary
Merge Risk: ⚪ Minimal · up to
|
Dev test (TFMCDev01, 2026-10-22)Jar I recorded every file read with JFR (
|
|
Sol (gpt-6.1-sol) review: VERDICT: APPROVE, no blocking findings. @coderabbitai review |
✅ Action performedReview finished.
|
Why
On 2026-10-21 Main froze for 20–30 s once an hour from 16:57 until the 06:00 restart (14 Paper watchdog dumps). At 16:57, 13 held guildless estates were all decided at once.
Estates.decided()only grows.CharacterGearEstate.reconcile(every 72000 ticks) settled every decided estate each hour, including ones Magic had already answered DONE.gear-stations.ymlabout five times on the main thread (requireReady→migrate,retained,loadViews, …).#66 (in 0.11.0+) removed the per-row copy and archives released rows at startup, so today the pass is cheap. The cost still grows with the number of decided estates and with the station rows added during the day: each released row is about 120 KB and stays in the file until the next restart.
What changes
The hourly pass skips a revision that this process already reported DONE.
reportedis empty)Trade-off: gear that reaches an already-settled testator later now moves at the first pass after the next daily restart, not within the hour. One example is a station that staff recover into a return. A dead character cannot deposit, so this should be rare. It is noted in the code.
Tests
hourlyReconcileSkipsARevisionAlreadyReportedDoneButSettlesRetriesAndNewRevisionscovers four cases:mvn verifylocally: 710 tests pass andCharacterGearEstateis at 100 % coverage. On Windows the run excludes the four known Windows-only failures (two case-spelling tests and two symlink tests, which also fail onmain) and uses a local-only directory-fsync workaround that is not committed.Draft: not for merge or release yet.
🤖 Generated with Claude Code