Use Case: Move Object Between Containers (UC-303)

Created: Mon 07 Jul 2025 (stub) Updated: Fri 26 Jun 2026 11:14:39 CEST — full rewrite; confirmed intent (Flytta redesign); old stub note removed Document Version: 1.0 Security Classification: Internal Technical Documentation Target Audience: iOS Developers, Product Author: Paul Wisén

Overview

A user moves one physical object to a new location and tells Plings where it is — and, by default, that it now belongs there too. The canonical surface is the Flytta action in the object detail view: the user taps Flytta, picks a destination (by scan or from a list), selects the spatial relation (in/on/positional), then on the graphical placement view chooses how to save:

  • Både hem och nuvarande (default, prominent) — writes both the home (NORMAL_IN) and the current location. Covers the common case: the object moved and this is its new rightful place.
  • Ny hemplats — changes home only (NORMAL_IN); leaves the current location untouched.
  • Bara nuvarande — records where it is right now without re-homing it (CURRENT relation only). The home is preserved, not overwritten.

An away-only reconcile shortcut (“Sätt ‹nuvarande plats› som hem”) is available from the detail view when the object is away from its home: it promotes the current location to home with zero extra scans.

Note on the old stub. The original one-line stub referenced “breadcrumb drop targets and moveObject mutation”, conflating this flow with the navigator drag (ADR-0044). They are different flows: the navigator drag is a home-map operation (reorganising the hierarchy by gesture); Flytta is a detail-view placement action (recording where one specific object is or belongs). The stub has been replaced with this document.

User story

As a user, I want to record that an object has moved to a new place — and, by default, that it now lives there — so that Plings reflects reality after I physically move something, without requiring a separate “change home” step in the common case.

Why it matters

  • Reality-tracking — the core value of Plings is knowing where things are and where they belong. A move is the most common event in an object’s life; recording it must be fast and accurate.
  • Default reduces friction — separating “where it is now” from “where it belongs” is a powerful capability, but only when the distinction matters. For the common case (you moved it and it lives there now), the default “Sätt både” records both in one action. The cognitive overhead of the dual model is exposed only when the user actively needs it.
  • Full relation capture — the spatial relation (in / on / positional) is captured at move time rather than defaulted. Re-scanning is expensive; collecting the right data once, fully, costs nothing extra and avoids a future correction scan.
  • Demoted home-only path is still reachable — objects lent, stored temporarily, or staged before final placement need “Bara nuvarande” or “Ny hemplats”; these are available but not the default so they do not create confusion in the common case.

Scope

  • v1 (live): detail-view Flytta action (one object) → destination picker (scan or list) → PlacementView with Spara-som choice (Både hem och nuvarande / Ny hemplats / Bara nuvarande) → optimistic local-first write; home edge is NORMAL_IN in v1 (full NORMAL_* taxonomy — NORMAL_ON etc. — deferred to the spatial-taxonomy spec).
  • Away-only reconcile shortcut: “Sätt ‹nuvarande plats› som hem” from the detail view, zero scans required.
  • Out of scope: bulk moves (UC-504 Samla); navigator drag (ADR-0044, a home-map gesture, not a placement flow); PART_OF / component relations (ADR-0040); spatial-taxonomy work (BREDVID, ATTACHED_TO, depth axis, diagonals — deferred).
  • Flow: Flytta — Plings-iOS/docs/flows/flytta.md
  • Decisions: ADR-0048 (Flytta one-action default-both), ADR-0005 (current/normal dual location), ADR-0044 (navigator drag is a home-map op, distinct from this flow), ADR-0043 (shared AVCaptureSession)
  • Adjacent use-cases: UC-504 Bulk Actions on Collection Members (Samla — same default-both semantics applied in bulk), UC-304 (hierarchical navigation)