Ignore:
Timestamp:
08/09/2026 08:20:24 AM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
0677bac
Parents:
b2adc20
Message:

De post is de uitgave: losse tracks worden een collectie (shaer-38y)

Losse tracks gingen tot nu toe los de deur uit -- Audio-objecten die een lezer
nergens kon plaatsen. Ze horen bij elkaar omdat ze in dezelfde post staan, en
dat is wat /ap/users/<slug>/posts/<id>/tracks nu zegt. De post wijst er langs
dezelfde weg naartoe als naar een playlist: een Link-tag in de Note, want zonder
die link bestaat de collectie wel maar vindt niemand hem.

PUNT 1, DE VOLGORDE. De tracks staan in de volgorde van de POST en niet die van
de tabel. Zoals iemand ze heeft neergezet is de volgorde waarin ze bedoeld zijn.

PUNT 3, DE METADATA. Een playlist heeft een titel en soms een hoes; een post
heeft een titel, een tekst, een hoes, tags en een datum. Voor audio-gebaseerde
inhoud is de post de uitgave -- dat is waar iemand hem heeft uitgebracht en waar
het verhaal erbij staat. Zowel de collectie van losse tracks als een
playlist-collectie leent nu van de post die haar uitbrengt.

De posttekst wordt content en niet summary: in AS2 is summary de korte
samenvatting en content het lijf. Artiest en jaar blijven dus in summary staan,
want dat IS een samenvatting en de posttekst is dat niet. De eigen naam van de
playlist gaat niet verloren maar verhuist naar alsoKnownAs.

WIE LEENT ER UIT: alleen een post die er EEN muzikale eenheid van maakt. Staan
er twee collecties in, dan is de post niet meer de drager van een identiteit en
houdt de playlist de zijne. Dezelfde regel als in de afleiding, hier alleen
toegepast.

Een test die eerder vastlegde dat losse tracks GEEN Link-tag kregen is
omgedraaid, met de reden erbij: dat klopte zolang alleen een playlist een
collectie had.

Punt 2 van de bead (type afleiden) stond al in postMusicType.

Co-Authored-By: Claude Opus 5 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/ap-playlist-discovery.test.js

    rb2adc20 ra5d14c7  
    108108});
    109109
    110 test('een post zonder playlist heeft geen Link-tags', () => {
     110test('losse tracks in een post krijgen sinds shaer-38y wel een Link-tag', () => {
     111  // Dit testte eerder dat er GEEN Link-tag was. Dat klopte zolang alleen een
     112  // playlist een collectie had; nu zijn losse tracks in een post ook een
     113  // uitgave, met een eigen collectie. Zonder deze link bestaat die wel maar
     114  // vindt niemand hem -- dus de verwachting is omgedraaid, niet het gedrag
     115  // stukgegaan.
    111116  const site = db.prepare("SELECT * FROM sites WHERE id = 's1'").get();
    112117  const note = AP.buildNote('https://test.example', site, { id: 'p3', slug: 'p3', title: 'Los', content: 'Gewoon tekst met [[track:t1]]', status: 'published' });
     118  const links = (note.tag || []).filter((t) => t.type === 'Link');
     119  assert.equal(links.length, 1);
     120  assert.equal(links[0].href, 'https://test.example/ap/users/band/posts/p3/tracks');
     121});
     122
     123test('en een post met alleen tekst nog steeds geen enkele Link-tag', () => {
     124  const site = db.prepare("SELECT * FROM sites WHERE id = 's1'").get();
     125  const note = AP.buildNote('https://test.example', site, { id: 'p4', slug: 'p4', title: 'Niets', content: 'Gewoon tekst', status: 'published' });
     126  assert.equal((note.tag || []).filter((t) => t.type === 'Link').length, 0);
     127});
     128
     129test('een post met alleen een DICHTE track ook niet -- geen lege uitgave', () => {
     130  const site = db.prepare("SELECT * FROM sites WHERE id = 's1'").get();
     131  const note = AP.buildNote('https://test.example', site, { id: 'p5', slug: 'p5', title: 'Dicht', content: 'Alleen [[track:t2]]', status: 'published' });
    113132  assert.equal((note.tag || []).filter((t) => t.type === 'Link').length, 0);
    114133});
Note: See TracChangeset for help on using the changeset viewer.