Skip to content

Move dead characters' locks through their estates (stage 6b) - #47

Merged
ryanbarlow97 merged 9 commits into
mainfrom
stage6b/estates
Oct 13, 2026
Merged

ryanbarlow97 merged 9 commits into
mainfrom
stage6b/estates

Conversation

@ryanbarlow97

@ryanbarlow97 ryanbarlow97 commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Stage 6b: a dead character's locks pass through their estate at the next restart.

The estate planner works on the same scan as the 6a lock pass and adds its entries to the same numbered journal, marked kind: estate with their deathId (6a entries are now marked kind: migrate). For every decided estate whose guard holds, PRIVATE and PUBLIC containers and entities and doors go to the property recipient, GUILD and FACTION ones to the guild-locks recipient. Waiting or frozen parts are not planned; lock state and accessMap are kept. The planner runs in its own try, so a failure (or TLibs older than 2.6.0) leaves the pass with its 6a entries and locks still reach FULL.

  • Dedupe and double chests. Only owners marked CHARACTER are estate-planned, so a markerless file the 6a planner claims moves next boot. A container next to one the 6a planner gives the same testator waits too, with every container joined to it, so double-chest halves move together.
  • Archive. A pass with no 6a entries archives only the files it journals.
  • Replay. An estate entry is replayed only while its estate still applies; otherwise the file keeps (or gets back from the archive) its original bytes and the entry is marked skipped.
  • Report. After the pass each decided estate is reported from the state after the pass: DONE with counts (locks for containers and displays, doors) and every moved path (from all journals) only when nothing of the testator's is left in a part with a character recipient; AT_RESTART when something is; RETRY on planner failure. Thievery registers as the thievery estate participant once locks are loaded; at runtime settle() answers from that boot's report (DONE still holds for a later revision whose new character parts held nothing at boot) or AT_RESTART, and RETRY when the decision's guard fails. Each estate is reported on its own, so one failing report does not drop the rest.
  • Furniture passes lazily on first interaction for a dead owner with a decided estate whose guard holds.
  • /thievery locks setowner refuses a dead or missing character by UUID.
  • tools/thievery_rollback.py --estate-only restores estate entries only and keeps the 6a markers; an older jar that completes an estate journal drops kind/deathId, after which only a full rollback undoes those entries.

Pins TLibs 2.6.0 (not yet released, so CI will 404 until it is). Gate: tfmc-mvn -o -B clean verify, 1004 tests, 100% instruction/line/branch/method/class coverage; Python tool tests 8/8.

Docs: TF-Minecraft/Docs#217

🤖 Generated with Claude Code

ryanbarlow97 and others added 5 commits October 13, 2026 14:37
Pin TLibs 2.6.0 and probe its estate API. The estate planner works on the
lock pass's scan and adds kind=estate entries with their deathId to the same
numbered journal; a planner failure leaves the 6a entries only and never
holds the guard. An estate-only pass archives just the files it journals.
Replay skips estate entries whose estate no longer applies. Each estate is
reported from the state after the pass, and Thievery registers as the
"thievery" estate participant, settling at restart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
….6.0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 13, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the size:XL 500-999 effective changed lines (tests excluded in mixed PRs). label Oct 13, 2026
ryanbarlow97 and others added 4 commits October 13, 2026 15:38
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One failing report no longer drops the rest, and a report no estate service
received is logged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ryanbarlow97
ryanbarlow97 marked this pull request as ready for review October 13, 2026 18:26
@ryanbarlow97
ryanbarlow97 merged commit 0f7fc84 into main Oct 13, 2026
3 of 4 checks passed
@ryanbarlow97
ryanbarlow97 deleted the stage6b/estates branch October 13, 2026 18:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL 500-999 effective changed lines (tests excluded in mixed PRs).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant