Fremde Gruppen-CCs in der Kette bleiben voll bedienbar

Der Eintrag am Fuss einer Kette - der Gruppen-CC, aus dem sich jemand
herausredesignt hat - liess sich weder ziehen noch bearbeiten. Das war meine
Entscheidung mit der Begruendung, es sei der Platz eines anderen. Beim
Nacherfassen ist das zu eng: Dort steht erst am Ende fest, welches Redesign
wohin fuehrte, und bis dahin muss sich auch einordnen lassen, was einem nicht
gehoert.

Er ist jetzt ein Kettenglied wie jedes andere - ziehen, bearbeiten,
Bezahlart, Verweise, Herausloesen - und traegt nur zusaetzlich das
Kennzeichen "war dabei" mit Zeitraum und Besitzer. Wer ihn an den Anfang
seiner Kette zieht, macht aus seiner Beitrittsbuchung den Kauf und aus dem
Herausredesignen ein Redesign; sein Platz bleibt dabei einer.

Dass nur Beteiligte etwas einreihen duerfen, gilt unveraendert.
This commit is contained in:
2026-09-21 19:16:07 +02:00
parent 1b643cb758
commit 46e339fdc4
4 changed files with 89 additions and 57 deletions
+26 -1
View File
@@ -758,7 +758,7 @@ describe('Eine Kette mit Vorgeschichte ausserhalb', () => {
ctx,
);
return { dargon, eigenes: eigenes.character, weiter: weiter.character };
return { dargon, fremd: fremd.character, eigenes: eigenes.character, weiter: weiter.character };
}
it('zählt drei Plätze und drei verbrauchte Pakete', async () => {
@@ -796,6 +796,31 @@ describe('Eine Kette mit Vorgeschichte ausserhalb', () => {
assert.equal(buchung?.kind, 'REDESIGN_PAID', 'es bleibt ein Redesign');
});
it('lässt auch den fremden Gruppen-CC selbst einreihen', async () => {
// Beim Nacherfassen muss sich einordnen lassen, was einem nicht gehört:
// Erst am Ende steht fest, welches Redesign wohin führte.
const { dargon, fremd, eigenes } = await ausgestiegen();
await characters.moveInChain(
fremd.id,
{ lineageId: eigenes.lineageId, afterId: null, forPlayerId: dargon },
ctx,
);
const glieder = await kette(dargon, eigenes.lineageId);
assert.deepEqual(
glieder.map((g) => g.name),
['Fremde Gruppe', 'Eigener Strang', 'Und weiter'],
'der Gruppen-CC steht jetzt am Anfang der Kette',
);
verkettungStimmt(glieder);
// Sein Platz bleibt einer: die Beitrittsbuchung wird zum Kauf, das
// Herausredesignen zum Redesign - nicht beides zum Kauf.
const stand = await credits.getBalances(dargon);
assert.equal(stand.CC, 0, 'drei Pakete, drei Plätze');
});
it('behält den Verweis auf die Herkunft', async () => {
const { dargon, eigenes, weiter } = await ausgestiegen();