---
id: ADR-MBR-STR-016
title: Defer Ancestry Rebuilding During Bulk Loads
product_area: membership
module: structure
revision: 1
status: proposed
design_intent: proposed
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
decision: >-
  Bulk unit items write parent periods under the tree lock without rebuilding ancestry or publishing
  structural events, leaving closing rebuild and reconciliation to the producer.
constrains:
  - WF-MBR-STR-008
  - SVC-MBR-STR-structure
  - DOM-MBR-STR-001
origin: >-
  services-membership:docs/migrations/structure/README.md#Routes, permissions, metadata, data operations,
  lifecycle, well-known objects (a load of five hundred units would rebuild five hundred times)
alternatives:
  - option: Run ordinary placement and rebuilding for every imported unit.
    why_not: That repeats whole-workspace work for each item and changes the current bulk cost profile.
  - option: Make the data-job engine automatically guarantee closing rebuild.
    why_not: >-
      No examined completion wiring provides this guarantee; it is a design option requiring further
      implementation.
consequences:
  - Derived ancestry and visibility can be stale while loaded parent references are already committed.
  - >-
    An abandoned load remains inconsistent until rebuilding succeeds; reconciliation reports without
    repairing.
  - Loaded writes retain versions but emit no structural business event.
supersedes: []
evidence:
  - >-
    services-membership at 5994c270: modules/structure/services/tree/tree-loads.ts; modules/data-
    jobs/services/operations/structure-data-operations.ts
---

# Defer Ancestry Rebuilding During Bulk Loads

## Context

Initial imports may load hundreds of units. The local item path avoids repeated whole-tree rebuilding but creates a deliberate consistency interval.

## Decision

This record describes the existing producer-controlled completion step. Limiting loads to a workspace with excluded live traffic is a proposed operating requirement, not an enforcement proven by the item handler.

## Alternatives Considered

Run ordinary placement and rebuilding for every imported unit. That repeats whole-workspace work for each item and changes the current bulk cost profile. Make the data-job engine automatically guarantee closing rebuild. No examined completion wiring provides this guarantee; it is a design option requiring further implementation.

## Consequences

Derived ancestry and visibility can be stale while loaded parent references are already committed. An abandoned load remains inconsistent until rebuilding succeeds; reconciliation reports without repairing. Loaded writes retain versions but emit no structural business event.
