···123123 return nil, fmt.Errorf("failed to create S3 service: %w", err)
124124 }
125125126126- // Bootstrap PDS with captain record, hold owner as first crew member, and profile
126126+ // Bootstrap events from existing repo records (one-time migration).
127127+ // Must run BEFORE the live event handler is wired, so it captures
128128+ // the full historical state without interference from new writes.
129129+ if err := s.broadcaster.BootstrapFromRepo(s.PDS); err != nil {
130130+ slog.Warn("Failed to bootstrap events from repo", "error", err)
131131+ }
132132+133133+ // Backfill records index from existing MST data (one-time on startup)
134134+ if err := s.PDS.BackfillRecordsIndex(ctx); err != nil {
135135+ slog.Warn("Failed to backfill records index", "error", err)
136136+ }
137137+138138+ // Wire up repo event handler with records indexing + broadcaster.
139139+ // Must be BEFORE Bootstrap so that record creates/updates during
140140+ // bootstrap (captain, crew, profile) emit to the firehose.
141141+ indexingHandler := s.PDS.CreateRecordsIndexEventHandler(s.broadcaster.SetRepoEventHandler())
142142+ s.PDS.RepomgrRef().SetEventHandler(indexingHandler, true)
143143+144144+ // Bootstrap PDS with captain record, hold owner as first crew member, and profile.
145145+ // Now that the event handler is wired, any changes here emit to the firehose.
127146 if err := s.PDS.Bootstrap(ctx, s3Service, pds.BootstrapConfig{
128147 OwnerDID: cfg.Registration.OwnerDID,
129148 Public: cfg.Server.Public,
···147166 }
148167 }
149168 }
150150-151151- // Bootstrap events from existing repo records (one-time migration)
152152- if err := s.broadcaster.BootstrapFromRepo(s.PDS); err != nil {
153153- slog.Warn("Failed to bootstrap events from repo", "error", err)
154154- }
155155-156156- // Backfill records index from existing MST data (one-time on startup)
157157- if err := s.PDS.BackfillRecordsIndex(ctx); err != nil {
158158- slog.Warn("Failed to backfill records index", "error", err)
159159- }
160160-161161- // Wire up repo event handler with records indexing + broadcaster
162162- indexingHandler := s.PDS.CreateRecordsIndexEventHandler(s.broadcaster.SetRepoEventHandler())
163163- s.PDS.RepomgrRef().SetEventHandler(indexingHandler, true)
164169165170 slog.Info("Embedded PDS initialized successfully with firehose and records index enabled")
166171 } else {