Skip to content

Add cross-space chore move flow with history-preserving user reconciliation - #38

Draft
sassdawe with Copilot wants to merge 5 commits into
mainfrom
copilot/move-chores-between-spaces
Draft

Add cross-space chore move flow with history-preserving user reconciliation#38
sassdawe with Copilot wants to merge 5 commits into
mainfrom
copilot/move-chores-between-spaces

Conversation

Copilot AI commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Chores could not be reorganized across spaces without losing their context. This change adds an explicit move flow from the chore editor, preserves completion history during the move, and reconciles history entries when some prior completers do not belong to the destination space.

  • Move flow

    • Adds a Move action on the chore edit page.
    • Introduces a dedicated move page for destination-space selection.
    • Requires an explicit confirmation step before the move is applied.
    • Redirects to a follow-up page to assign labels from the destination space.
  • History-preserving migration

    • Adds ChoreMoveService to handle the migration as one operation.
    • Moves the chore to the target space without dropping CompletionRecord history.
    • Clears labels from the source space so the user can reassign valid destination labels immediately after the move.
  • Completion ownership reconciliation

    • Rewrites CompletionRecord.CompletedByUserId to a reserved lost placeholder user when the original completer does not have access to the destination space.
    • Creates/reuses the placeholder user centrally instead of leaving invalid cross-space user references in history.
  • Reserved placeholder protection

    • Reserves the login name lost in the shared login-name validator.
    • This automatically blocks both passkey registration and member invites from using the placeholder identity.
  • UI and copy

    • Adds localized strings for the move flow and error states.
    • Documents the new capability in the README feature list.
var moved = await choreMoveService.TryMoveAsync(choreId, destinationHouseholdId);
// - updates Chore.HouseholdId
// - preserves CompletionRecords
// - rewrites inaccessible completers to LoginNameValidator.LostPlaceholderLoginName
// - clears old-space labels before destination label selection

Copilot AI linked an issue Jul 24, 2026 that may be closed by this pull request
Copilot AI changed the title [WIP] Add functionality to move chores between spaces Add cross-space chore move flow with history-preserving user reconciliation Jul 24, 2026
Copilot AI requested a review from sassdawe July 24, 2026 14:31
@sassdawe

sassdawe commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Hey @copilot there is one change needed. The account placeholder we use for migrations needs a more appropriate name, and that name has to support multiple languages. Let's change it to "lost-during-move" and update the translation files as well.

Co-authored-by: sassdawe <10754765+sassdawe@users.noreply.github.com>

Copilot AI commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

Hey @copilot there is one change needed. The account placeholder we use for migrations needs a more appropriate name, and that name has to support multiple languages. Let's change it to "lost-during-m...

Updated the placeholder login to lost-during-move and refreshed the locale strings in b6b8aed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Move Chores between Spaces

2 participants