Account merge ledger: fix the first Soul pass (suspension carried into a memberless survivor, merged status terminal, standing at the desk door, linked accounts and write time, journalled grace intake, survivor weight on moved votes, one-hop alias, State token and database guards for overlapping merges, live-Postgres tests)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Heimdall 2026-11-14 03:37:48 +00:00
commit f402eb13cc
23 changed files with 1273 additions and 97 deletions

View file

@ -856,7 +856,10 @@ app.MapPost("/auth/heimdall/complete", async (
held.Value.Value,
form?["code"].ToString(),
form?["pendingLinkId"].ToString(),
httpContext.User.FindFirstValue(BifrostClaimTypes.HeimdallAccountId),
// A folded or frozen account links nothing: the actor accessor's standing decides, not the raw claim.
(await httpContext.RequestServices.GetRequiredService<ICurrentBifrostActorAccessor>().GetAsync(cancellationToken)).Merge is null
? httpContext.User.FindFirstValue(BifrostClaimTypes.HeimdallAccountId)
: null,
cancellationToken);
if (step.Next is not null)
{