Blog ·
Als de titel niet de kop kan zijn
Een regel die zegt dat de titel van een artikel zijn kop is botst met een grens van zestig tekens. Vijf talen hadden het bestaande patroon nodig.
Door Provibr
Een van onze artikelen draagt in zijn titel een woord dat ertoe doet: kwetsbaarheid. Het is een stuk over een scanner die nul bytes verstuurt, en zonder dat woord beschrijft de titel iets anders.
In vijf van de negen talen was het woord verdwenen. Niet uit de tekst, maar uit de titel en daarmee uit het browsertabblad, het zoekresultaat en het sociale voorbeeld. De opdracht was om het in alle negen terug te zetten.
Dat bleek onmogelijk in de vorm waarin het opgeschreven stond, en het interessante deel is waarom.
Twee regels die niet allebei kunnen gelden
De opdracht was: de titel, de sociale titel en de kop zijn één tekst. Zeg op alle drie de plekken hetzelfde. Dat is een goede regel, en het is de regel die we opschreven nadat een lezer een link vond die het ene beloofde en een pagina die iets anders beweerde.
De andere regel is een lengteband. De gerenderde paginatitel moet tussen de twintig en zestig tekens liggen, achtervoegsel meegerekend, want dat is wat erin past voordat een zoekresultaat hem afkapt. Die band is geen voorkeur; het hele corpus van 850 gegenereerde bestanden zat erbinnen, met niets erbuiten.
Zet het ontbrekende woord terug en de volledige kop is 68 tekens in het Nederlands en het Italiaans, 70 in het Portugees, 71 in het Spaans en het Frans, en 75 in het Roemeens. Het Engels en het Duits komen op precies 60 uit, en dat is een toeval dat het opmerken waard is: de twee talen waar de eerlijke kop toevallig past zijn ook de twee waar de regel eruitziet alsof hij werkt.
Een van de twee regels moest dus wijken, en geen van beide is optioneel. De kop moet het onderwerp benoemen en de titel moet passen.
Het patroon stond al in huis
De oplossing is hier niet voor bedacht. Van de 850 gegenereerde artikelen hadden er 197 al een titel die van de kop verschilt. Het is heel gewoon dat een artikel dat doet: de kop is een zin en de titel is een etiket.
Het Frans deed het op precies dit artikel al. De titel leest als een etiket met een dubbele punt, de kop als een vraag die de tekst beantwoordt. Niemand had dat als een beslissing vastgelegd; het was gewoon wat iemand schreef toen de zin niet paste.
De reparatie is dus dat vijf titels de vorm overnemen die bijna een kwart van het corpus en een van de negen talen al gebruikte, en dat de koppen de volle zin dragen. Het woord staat in de titel, in de sociale titel en in de kop, en het hoeft in alle drie niet dezelfde tekst te zijn om dezelfde bewering te zijn.
De regel overleeft, maar hij moet opnieuw geformuleerd worden: wat moet gelden is dat een lezer die via een link binnenkomt de pagina herkent. Byte-gelijkheid was een handige manier om dat af te dwingen in de talen waar het toevallig kon.
Waarom de bestaande bewaking dit niet kon vinden
We hadden net een bewaking gebouwd voor precies deze familie van problemen: een linktekst die een artikel anders noemt dan de eigen titel van dat artikel. Ze stond hier groen, en ze stond groen om een structurele reden en niet door geluk.
Dit is een titeldefect. De titels waren een woord kwijtgeraakt, en de linkteksten die ernaar wezen waren tijdens de ronde die de bewaking bouwde ingekort om te passen. Beide kanten waren het eens. Een vergelijking tussen twee dingen die samen gewijzigd zijn kan niet zien dat ze allebei fout zijn.
Wat het wel vond was versiebeheer. De commit die de linkteksten repareerde liet zien dat er drie ingekort werden, in het Nederlands, het Italiaans en het Portugees. Het verslag noemde er maar twee. Een diff lezen in plaats van een samenvatting is wat een taak van twee punten in de werkelijke vorm van het probleem veranderde.
Een bewaking die achter ons opruimde
Er zit aan het eind hiervan een kleine reeks die het opschrijven waard is, want het is de bewaking die zich beter gedraagt dan de mensen die haar gebruiken.
Nadat de titels gewijzigd waren, ging de linknaambewaking één keer af, op een Nederlandse link naar een ander artikel. Dat zag eruit als nevenschade en er is een uitzondering voor vastgelegd, met een reden.
Daarna zijn de titels opnieuw bijgesteld om ze binnen de lengteband te krijgen, en de bevinding verdween. De uitzondering was nu dood: een regel in een allowlist die niets matcht.
In die bewaking zit een test die als enige taak heeft te falen als een uitzondering nooit geraakt wordt. Hij faalde, en de regel ging eruit. De uiteindelijke diff tegen de map van de bewaking is leeg, en dat is de sterkste uitspraak die er is: de reparatie vroeg helemaal geen wijziging aan de regels.
Een allowlist die alleen maar groeit is een document van alles waar ooit iemand het bij heeft laten zitten. Een allowlist die zijn eigen dode regels verwijdert is een lijst die je over een jaar nog kunt lezen.
Kleine dingen die er terloops geleerd zijn
Een dubbele punt in een titel is een vorm en geen beslissing die gemeten is. Ze leest als een etiket in plaats van als een zin, ze laat zich goed inkorten, en het Frans had haar al gekozen. Dat staat opgeschreven als een keuze op vorm, want doen alsof ze uit een meting kwam zou oneerlijk zijn over welke delen hiervan gemeten waren en welke smaak.
Een lengteband is een beperking per taal, ook als hij globaal lijkt. Dezelfde zin is in de ene taal acht tekens langer en in de andere vijftien, en elke regel die als "overal dezelfde tekst" geformuleerd is breekt het eerst in de taal die het breedsprakigst is. Dat is hier meestal het Roemeens.
En een opdracht die als een instructie van twee regels geschreven is kan een conflict bevatten dat pas verschijnt als je aan beide helften probeert te voldoen. De juiste reactie is niet om te voldoen aan de helft die makkelijker te controleren is.
Wat we zouden opschrijven
- Als twee regels botsen is geen van beide fout. Zoek uit welke de garantie is en welke de handige manier was om hem af te dwingen.
- Byte-gelijkheid is een benadering van herkenbaarheid. Benoem wat je werkelijk wilt.
- Zoek het patroon in het corpus voordat je er een bedenkt. Het onze stond al in 197 van de 850 bestanden.
- Eén taal die het al doet is bewijs, ook als niemand het als een beslissing heeft opgeschreven.
- Een bewaking kan geen defect zien waar beide kanten samen gewijzigd zijn. Overeenstemming is geen correctheid.
- Lees de commit en niet de samenvatting. De diff had drie regels waar het verslag er twee had.
- Een test die faalt op een dode regel in een allowlist ruimt achter je op. De onze haalde een uitzondering weg die we net hadden toegevoegd.
- Een lege diff tegen je regels is het sterkste resultaat van een reparatie. Het betekent dat de regels klopten.
- Lengtegrenzen gelden per taal. Dezelfde zin is ergens vijftien tekens langer.
- Zeg welke beslissingen gemeten zijn en welke vorm waren. Ze door elkaar halen kost de gemeten beslissingen hun geloofwaardigheid.
Voor de duidelijkheid over wat dit is: de contentbuild leverde 850 artikelen op zonder waarschuwingen waar hij er eerder vijf gaf, de contentcontrole was 851 van de 851 gegenereerde bestanden byte-identiek, de websuite 4594 groen, de typecontrole schoon, de linter zonder fouten, de byteveeg over de 25 aangeraakte bestanden op elke telling ongewijzigd, de diff precies 174 regels erin en 174 eruit, de layoutveeg 27 van de 27 op 390 pixels over het artikel in negen talen, de blogindex 54 van de 54 en zes Oekraïense artikelen 18 van de 18 tegen een productiebuild. Onbewezen: er is nog steeds één lezer per taal, en de keuze voor de vorm met de dubbele punt is een beslissing over vorm en geen meting.
Uit het platformwerk aan Provibr. Waar de regel over titels en links vandaan kwam staat in drie fouten die geen script kon zien, en hoe de bewaking die haar afdwingt een inkorting van een vervanging onderscheidt staat in twee namen voor hetzelfde artikel.