Bron: docs/overdracht.md op GitHub
Overdracht – Commons Mineventory¶
Stand: versie 0.40.7, 13 november 2026. Voor wie (mens of Claude-sessie) het werk overneemt. Lees daarna, in deze volgorde: CLAUDE.md, het functioneel ontwerp, de backlog en de changelog.
Waar het staat¶
- Naam: sinds 0.31.0 heet de app Commons Mineventory (eerst Commons Cutter), met een eigen logo (een afbeelding met gevonden objecten en een lijst) en de tagline Detect objects in a Commons image. Find, cut out and describe them with AI. Sinds 0.31.1 staat in de repo overal de technische naam
commons-mineventory(URL's, npm-pakket, Toolforge-tool, map). Het Python-package heet bewust nogcutter/en de CSS-klassen beginnen nog metcc-(backlog 12f). - De map is hernoemd van
D:\KB-OPEN\github-repos\commons-cutternaarD:\KB-OPEN\github-repos\commons-mineventory(Olaf, 5-11-2026, na 0.31.2);.venvis opnieuw gemaakt en de tests zijn groen. De repo staat openbaar op GitHub, ook met CLAUDE.md, deze overdracht en de backlog (besluit Olaf). - Fase 1 (lokaal, zonder kosten) is klaar en sinds 0.9.0 op aanwijzing van Olaf verfijnd. Olaf draait de app zelf in live-modus, met zijn eigen sleutel voor de Meta Model API.
- Fase 2 (OAuth, upload naar een testwiki, beheerpaneel) is nog niet begonnen. Uploaden en inloggen zijn knoppen zonder werking.
- Nieuw sinds 0.32.2 (5 en 6-11-2026, op aanwijzing van Olaf); details in de CHANGELOG:
- Wachten zichtbaar: een skelet en melding bij het openen van een bestand; wisselen via Bekeken binnen de app.
- Schuiven: Detailniveau van de zoektermen (van hoofdonderwerp tot veel details) en Minimale zekerheid (verbergt minder zekere vondsten, van de laagste tot de hoogste zekerheid op de afbeelding).
- Groeperen (FO 7.4,
POST/DELETE …/groepen): van veel kleine objecten één object met één kader en samengevoegde maskers; bevestigingsvensters met de objecten en een eigen naam; Groep opheffen zet de leden terug. Bij het beschrijven van een groep gaat een AI-prompt mee die meebeweegt met de ruimte rond de uitsnede, met de eerdere beschrijvingen van de leden als context, en een schakelaar Alleen deze objecten. - Afbeelding aanvullen met AI (FO 7.7,
cutter/aanvulling.py, Muse Imagemuse-image-1.0, $0,01 per beeld): gaten in een uitsnede laten invullen; eigen tabblad AI-aangevuld met doorzichtige achtergrond, de echte prompt, de resolutie en een schakelaar Toon wat de AI invulde. Verzonnen, geen bron, nooit als uitsnede naar Commons. Live geprobeerd door Olaf (de kat met de rode halsband). - In de vergroter zijn uitsnede en aangevulde versie te zoomen zoals in de hoofdviewer (
ZoomImage.vue, dezelfde viewer-module). - Meldingen op hun plek: de prullenbakmelding in Gevonden objecten (uitsneden), Niets gevonden met links naar Zoeken en Aanwijzen of tekenen; in Gevonden objecten (uitsneden) scrolt alleen de lijst.
- Nieuw sinds 0.32.12 (6 tot 8-11-2026, op aanwijzing van Olaf); details in de CHANGELOG:
- Uit Commons bovenaan Beschrijven en vinden: captions, regio's en Beeldt af, zonder regio als chips; een klik zoekt het item met SAM en koppelt het gevonden object aan dat Q-item (backlog 26). Opnieuw lezen van Commons.
- Venster Gestructureerde gegevens van deze afbeelding (FO 9.7,
OriginalData.vue,cutter/origineel.py): beeldt af en captions voor het origineel als concept, met P18-miniaturen via de eigen server, versleepbaar. Schrijven naar Commons pas in fase 2 (OAuth). Botsregels met de upload van uitsneden: FO 9.7, backlog 15e. Olaf koos ImageNote boven P2096 (FO 9.8, backlog 15d; vragenformulier nog open). - Objectenlijst: zoekveld (NL en EN, met (i)), label nog niet beschreven, uitklappers Bulkacties (vier tabbladen Beschrijven, Ontdubbelen, Groeperen, Prullenbak, elk ook per soort) en Bewaren en exporteren.
- Beschrijven in bulk opent een eigen venster (
BulkDescribeDialog.vue, FO 7.4): tabel met per object lengte, ruimte, aanwijzing en prompt; Alle objecten of één object aanpassen; begint op Commons-caption en 0% ruimte; voorbeeld wat de AI ziet; de prompt (GET …/beschrijving/prompt). - Eigen AI-prompt per object in Wat staat hierop? (FO 6.2): potlood, bewaren, terug naar de prompt van de app, eerdere prompts. Bij een groep zit de groepszin erin.
- Aanwijzing uit de detectie in de prompt (FO 6.2): eigen naam, Commons-label of SAM-zoekterm met zekerheid. Nog te toetsen door Olaf (backlog 12i).
- Lengte bij Wat staat hierop? en de beschrijving van de hele afbeelding, met de schakelaar Commons-caption (hooguit 250 tekens) en het Commons-logo uit Codex (
CommonsLogo.vue). - Nieuw in 0.33.9 (8-11-2026, middag); details in de CHANGELOG:
- Viewer: elke kleur betekent één ding: kader = status, vulling masker = soort (de schakelaar per soort / per status is weer weg, besluit Olaf), rand masker = wit met donkere rand. Per soort een kleur (
class-colors.js) met stippen in de lijst en links Alleen tonen per soort. - Pagina Objecten: facetten in een eigen component (
ObjectFacets.vue,facets.js), ook op het tabblad Prullenbak; versleepbare rand; miniatuur per bestand met een zoombare voorbeeldweergave (ZoomImage) en de maskeromtrekken van de objecten; facet AI-aangevuld; het oog opent de vergroter op de pagina zelf (in de prullenbak alleen-lezen: alleen Uitsnede); bevestigingen met miniaturen; bij een opgeslagen uitsnede Bestand openen, Downloaden en lokaal Tonen in map (cutter/lokaal.py,POST …/uitsnede/mapvenster, alleen debug + loopback). - Prompt: een eigen naam gaat altijd mee als aanwijzing, ook bij een groep, getekend kader of klik.
- API: de verouderde paden van vóór 0.29.0 zijn weg (12e). Alles in het Engels staat als 12j in de backlog (niet urgent).
- Link Prullenbak in de kop.
- 0.33.10: een (i) bij Kleur maskers en de Kleurenlegenda die alle kleuren uitlegt.
- 0.33.11: Alleen tonen met een vinkje per soort en Alle · Geen · Omkeren (aangevinkt = zichtbaar).
- 0.33.12: geen schakelaar Kleur maskers meer (masker = soort, kader = status); vinkjes in de kleur van de soort met aantallen; de Kleurenlegenda standaard open met vinkjes per status (
frameKey,setStatusFilter), één (i); fix: na uitvinken van een object in focus bleef alles vervaagd (_syncPointedAt). - 0.33.13: de Kleurenlegenda bevat beide regels (Alleen deze kaders tonen, Alleen deze maskers tonen), met de (i) in de kop; een klik op de (i) klapt de legenda ook open.
- 0.33.14: fix: Maskers, Kaders of Namen wisten de filters. Let op: geen
:classop het element van de viewer (ViewerPane.vue); Vue herschrijft dan de hele class-lijst en wist wat de viewer zelf zet. - 0.33.15: Vinkjes selecteren: voor Alle · Geen · Omkeren in de objectenlijst, met tooltips.
- 0.33.16: een groep heeft de soort van zijn leden, een regio uit Commons zijn Engelse naam als soort (
classKeyinclass-colors.js). Daarna: een eigen naam bepaalt de kleur (classKey); bij de vinkjes telt een object onder zijn eigen naam én zijn zoekterm (sinds 0.39.2 alleen onder één: de eigen naam, anders de zoekterm), en een groep ook onder de soorten van zijn leden (classKeys). - 0.34.0: Changelog en Verbruik met facetten en zoeken (
ListFacets.vue); exporteren als JSON, CSV en Excel op die pagina's en op Objecten (ExportLinks.vue,GET …/export,export.table_csventable_xlsx);GET /api/v1/changelog. - 0.35.0: zoeken op Objecten; sorteerbare kolommen (
SortableTable.vue) op Verbruik, een tabelweergave op Changelog en een lijstweergave op Objecten (ObjectsTable.vue,ViewSwitch.vue). Valkuil: een lege slot inSortableTabletoont de waarde van de kolom, dus een cel metv-ifheeft altijd een element nodig. - 0.36.0: lijstpagina's en de afbeeldingspagina houden hun keuze in het adres (
readAddress/writeAddressinfacets.js); afbeelding opnieuw beginnen (↻ bij Bekeken,GET/DELETE …/bestand/{mid}/werk, met De AI opnieuw vragen); ontdubbelen ook in groepen; Ook gevonden als met × en Ongedaan maken; soorten tellen eigen naam, zoekterm en samengevoegde woorden; meldingen bij hun knop (wherebijnotify); kop voor elke kolom; logo's (P154) viaGET /api/v1/wikidata/{q}/logo; CSS van sjablonen weg uit tekst van Commons. Valkuil (weer): eenwatchvóór deconstdie hij leest, stopte de viewer; en in Python-scripts die code schrijven worden\1,\ben\nin gewone strings stuurtekens of regeleinden: gebruik raw strings en zoek na afloop naar stuurtekens. - 0.37.0: Bewaarde antwoorden of SAM opnieuw bij lokaliseren (
"vers": true), Naar Commons als eigen uitklapblok, CropTool, Waar gebruikt en Geschiedenis in de bestandskop; Vite volgtuitvoer/niet meer (op Windows bleven verwijderde mappen anders vastzitten) en een map in gebruik geeft 409files_in_use. - 0.38.1: de AI-zoektermen in twee blokken (Staat al op Commons, alleen lezen, en Nieuw); Van Commons > Beeldt af zonder potlood (zoekt op het Engelse label); Nieuw item toevoegen? met drie links; tip bij Zoeken over hernoemen; een nieuwe beschrijving van de hele afbeelding is standaard een Commons-caption (hooguit 250 tekens,
PAGE_DEFAULT_DESCRIPTION_LEVEL). - 0.39.0: de beschrijving van de hele afbeelding komt in één AI-aanroep in alle vier de lengtes (
beschrijvingenin het overzicht); de schuif wisselt gratis (PATCH … {beschrijvingsniveau}); elke lengte houdt zijn eigen aanpassingen en AI-origineel; een versie in Eerdere beschrijvingen bevat alle vier; Naar Commons gebruikt de caption-lengte. - 0.39.1: geen potloodjes meer bij de AI-zoektermen (eigen woorden vergeten; een regel met links naar Zoeken en Aanwijzen of tekenen); knoppen bij Staat al op Commons met de naam op Commons, gedimd; Terugzetten uit de prullenbak in zoekmeldingen; beschrijving per taal in een vak met vaste hoogte, wachtbalk onder de knop; een onleesbaar AI-antwoord geeft 502
unreadable_answeren wordt niet bewaard. - 0.38.0: hernoemen naar het woord van een Beeldt af-item koppelt het object aan dat item (
"item"bij de object-PATCH); Naar Commons met opsommingen en uitgeschakeld zolang er niets toe te voegen is; elk uitklapblok begint met een korte uitleg; sub-opsommingen in de (i) (regels met-); nieuwe schermafbeeldingen en rondleiding. - 0.39.2: Alleen deze maskers tonen geeft elk object precies één vinkje (eigen naam, anders de zoekterm; geen woorden van Ook gevonden als meer,
classKeysinclass-colors.js); zoeken in de objecten slaat de AI-zoekterm en het AI-label over bij een object met een eigen naam (lijst, pagina Objecten,qbij de export); de knop heet Alle objecten opnieuw lokaliseren zodra de termen gezocht zijn. - 0.40.0: een AI-hint bij Aanwijzen en Tekenen (FO 7.3): SAM neemt een woord óf een punt/rechthoek, dus de hint is een woordzoektocht waarvan de app alleen de vondst onder de klik houdt (
_point_with_hint, via het bewaarde antwoord van_run_term) of die in de rechthoek met 10% marge, als eigen uitsnede naar SAM gestuurd (_hint_in_box, betaald). Niet live getest: Olaf test de vormen op zijn server. De knoppen van de beschrijving van de hele afbeelding staan in het meervoud. - 0.40.1: een slotje rechts in de titel van de vijf uitklappers van het detectiepaneel (
SectionLock.vue,setOpen/locksinDetectionPanel.vue, opgeslagen alscc-uitklap-vast): op slot vouwt niets de uitklapper meer in of uit, ook de links van de app niet; de titelbalk neemt dan geen klikken aan (pointer-events: none), anders knipperde hij. Het ⓘ-venster legt het uit. Verder: wiskruisjes (clearable) op alle korte zoek- en hintvelden; hintvelden grijs zolang hun schakelaar uit staat; éénResultMessage.vuevoor de melding onder een knop; kleuren van meldingen volgens Codex (rood alleen bij een fout, geel om op te letten of ongedaan te maken, groen als het lukte, grijs alleen voor vaste uitleg; FO 10.4); opgeruimd: groepsnaam in het zoekveld, oude zoekwoorden, ongebruikte vertalingen. - 0.40.7: in de uitleg van AI-suggesties zijn beschrijving, tekst en zoektermen links naar hun deel (
linkPieces/showPartinDetectionPanel.vue, het woord tussen [haken] in de vertaling,data-deelop de uitklapper); de zin Deze suggesties horen bij de afbeelding … is weg; Verbruik > Over deze modellen legt uit dat model (per bestand) en denkwerk de prijs bepalen. - 0.40.6: robuustheid: foutafhandeling in backend en frontend nagelopen, met tests (
tests/test_robuustheid.py, een fuzz-script over alle routes: 0 crashes). Backend:cutter/opslag.py(write_atomic,read_json,read_store; een onleesbaar bestand wordt<naam>.kapot-<hash>), nieuwe foutcodes (corrupt_file,bad_image,bad_mask,already_on_page,internal_error,store_busy,disk_full,too_largeboven 5 MB),Verbruik.reservationook voor SAM. Frontend:api.js(time-out, herhaling alleen voor GET,newestOnly,errorText),safety.js(vangnet),text.js(cleanText,searchWords,bulletList). Verder: bezig-balk pas na bevestigen en bij de knop (askingInventory/askingDetectin CutterApp; in het paneel hoort de eerste bezig-periode na een klik bij die klik,CLICK_WAITS_MS); detailschuif alleen in het kostenvenster (PageDescribeDialog.vuemetpart: allesensteer: falsede eerste keer); bedragen per bestand (setPricesuit de inventaris-GET, Contributor-model); leesbare labels (labels()incommons.pyvraagt zo nodigmul|de|fr|es|it|la,label_taalinsdc.py, ⚠ enaskWordnaarLocateDialog); uitleg AI-suggesties in de verleden tijd (madeLines); gele melding bij een beschadigd objectenbestand (beschadigdin de pagina-GET,warnDamagedin CutterApp, onthouden incc-kapot-gezien); Naar Commons: lijst in het venster (OriginalData.vue). - 0.40.5: elk venster versleepbaar en te vergroten (
movableDialogsinmovable.js, gestart inmount.js; een MutationObserver vindt elke.cdx-dialog; de vergroter en.cc-origineelregelen het zelf, met onthouden plek). - 0.40.4: alle bulkmeldingen op één vaste plek boven de tabbladen, één soort (de uitkomst van beschrijven en ontdubbelen loopt via
notify(…, {where: "bulk"}), NoticeList kan eenlisttonen). - 0.40.3: zoekwoorden voor SAM aan te passen bij het lokaliseren (
LocateDialog.vue,alsin POST detecties); Ook gevonden als in de prompt (also_foundinbeschrijving.py); vinkjes in alle bulkvensters (pickinconfirm.js); Detailniveau bij opnieuw in het venster; meldingen met Ongedaan maken overal (frontend/undo.js,UndoMessage.vue), nooit vanzelf weg, één per plek, bulkmeldingen onder de tabbladen; opruimronde 2:TickLinks.vue,OriginalRow.vue,VersionEntry.vue,useStoredList(storage.js),sectionPropsin DetectionPanel, backenddetectie/meta_api.py(MetaClient),editing/editing_store(contextmanagers op de objectopslag; let op: eenreturnbinnen zo'n blok schrijft toch),_detect_paid,_add_one,_intersection, api-helpers. - 0.40.2: de objectenlijst is in hoogte te slepen (lijn eronder,
cc-hoogte-objecten); eigen prompt voor beschrijving en zoektermen van de afbeelding (PageDescribeDialog.vuemetpart,page_prompt_preview/save_page_promptmet deel inbeschrijving.py,PAGE_PROMPT_KEYS, gedeeldeapply_own_prompt; vlag per deel indelen.{deel}.prompt_eigen); AI-bijsturing in dat venster (aanwijzing en denkniveau,CHOSEN_EFFORTSinbeschrijving.py,kosten_per_redenerenin het plan); subtabbladen Beschrijving en Beeldt af (P180) in Wat staat hierop?; verwijdervragen tonen wat weggaat (askRemoval,quoteinconfirm.js); tijden tot op de seconde (formatStamp); bevestigingsvensters: eerst de hoofdactie in één zin, dan objecten, dannote(nieuw inaskConfirm) met de toelichting; groeperen en ontgroeperen tonen een wachtmelding over de afbeelding (waitingvanViewerPane,withMaskWait/loadMasksinCutterApp.vue) tot de nieuwe maskers binnen zijn; een groep telt bij de maskervinkjes als één object (classKeys: alleen zijn eigen soort; een naamloze groep van gemengde soorten houdt die van zijn leden); dubbele code opgeruimd (ronde 1):frontend/storage.js(readStored/writeStored/removeStored) voor alle localStorage,KindLinks.vue,priceLabelini18n.js,kindsOf/commonsFileUrlinstate.js,movableDialoginmovable.js, knoppen inVersionCarousel; backendopruimen.sharded/cached_bytes,export.encode/export.rect,sdc.QID,detectie.basis.INTERNAL_LABELS. Ronde 2 (middel risico: vinkjesblokken, kop van de uitklappers, één Meta-API-client, lock-patroon in de opslag) staat nog open. - Tests: 404 in Python (
pytest), 105 in de frontend (npm test). Alle groen bij 0.40.7. Fuzz-script (niet in de repo): 0 crashes. - Open bij de overdracht: Olaf moet de Testlijst robuustheid nog doorlopen (backlog 18b, formulier https://claude.ai/artifact/2nLhnDSTH9cV43yTLXMcLh); wat daaruit komt wordt een eigen item. Robuustheid op Toolforge en met meerdere gebruikers: backlog 18a.
De interface in het kort¶
Van links naar rechts, in de volgorde van het werk (sinds 0.29.0):
| Kolom | Wat | Bestanden |
|---|---|---|
| Bekeken | geopende afbeeldingen met miniatuur; daaronder Opzij gezet (inklapbaar, slepen of prullenbakje; pijl omhoog zet terug) | ViewedPanel.vue, HistoryList.vue, state.js |
| Beeld | de viewer (gewone JS, niet herschrijven in Vue) met zoom, Maskers/Kaders/Namen; daaronder de Kleurenlegenda (standaard open, de (i) in de kop) met Alleen deze kaders tonen en Alleen deze maskers tonen: vinkjes met aantallen en Alle · Geen · Omkeren. Kader = status, masker = soort, rand van het masker = wit | ViewerPane.vue, viewer/viewer.js, class-colors.js |
| Beschrijven en vinden | AI-suggesties (beschrijving en zoektermen, elk apart opnieuw of weg; beschrijving met de hand aan te passen, met versies), Uit Commons, Zoeken, Aanwijzen of tekenen, CropTool | DetectionPanel.vue, PageDescription.vue |
| Gevonden objecten (uitsneden) | Minimale zekerheid; de objecten met een zoekveld en Alle · Geen · Omkeren (genummerd: man 1, man 2; beschreven of nog niet beschreven); daaronder de uitklappers Bulkacties (vier tabbladen) en Bewaren en exporteren (Selectie opslaan, zip, Naar Commons, Bewaartermijnen), standaard dicht | ObjectList.vue, CutterApp.vue, BulkDescribeDialog.vue |
- Elke kolom schuift in tot een strook (
ColumnHeader.vue,ColumnStrip.vue) en heeft een kop met uitleg en een (i). - De vergroter (
Magnifier.vue) heeft Vorige/Volgende (ook ← →), slaat een niet-opgeslagen bijschrift vanzelf op, en blijft open na Naar de prullenbak. Tabbladen: Uitsnede, AI-aangevuld (als er een is), Wat staat hierop? en Commons-concept. Ook op de pagina Objecten (het oog); een object uit de prullenbak is daar alleen te bekijken (inTrash: alleen Uitsnede). Bevestigingen met een lijst objecten of een tekstveld gaan viaaskConfirmValue()inconfirm.js. - Object en uitsnede: een object is gevonden gegevens, een uitsnede het opgeslagen beeldbestand. Zie Begrippen in het functioneel ontwerp.
Afspraken die je niet uit de code haalt¶
- Uitleg en AI-resultaat zien er anders uit: uitleg is klein en grijs (
cc-uitleg), wat de AI zei staat in een kader (cc-ai-resultaat), een uitkomst (gevonden, niets gevonden) als Codex-melding onder de knop die erom vroeg. - Knoppen met kosten dragen het bedrag; elke betaalde actie vraagt eerst om bevestiging. Een knop zonder iets te doen is uitgeschakeld (niet verborgen).
- Tweetalig: alle tekst in
frontend/i18n/nl.jsonenen.json, dezelfde sleutels en invulplekken. Foutmeldingen: in het Nederlands de eigen melding van de server, in het Engels de vertaling van de code (error.<code>); een nieuwe foutcode krijgt dus altijd een vertaling. Tekst die de server meestuurt (rechtenredenen, controle vooraf, niet-ondersteunde bestanden) gaat als code met detail mee, niet als Nederlandse zin. - REST: zelfstandige naamwoorden, meervoud voor lijsten (
…/objecten/{id}), geen werkwoorden in paden; een GET kost nooit geld en verandert niets. De oude paden van vóór 0.29.0 zijn sinds 0.33.9 weg (backlog 12e). OpenAPI (cutter/openapi.py) endocs/api.mdlopen gelijk met de routes; een test controleert dat. - Eén ding per knop en per vinkje (besluiten Olaf, 12-11-2026): de AI-zoektermen hebben geen potlood meer (een term is wat de AI zei; verbeteren doe je met Zoeken, Aanwijzen of tekenen of door het object rechts weg te halen); een knop bij Staat al op Commons toont de naam op Commons; een eigen naam van een object vervangt de AI-zoekterm in het maskerfilter én in het zoeken. Dit draaide eerdere wensen terug (naam én zoekterm, 9-11-2026; woorden van Ook gevonden als bij de maskers); bouw ze niet terug zonder Olaf.
- Gegevens van Olaf: test op zijn server nooit een betaalde knop (Zoeken, Aanwijzen, Beschrijf, Opnieuw, Transparante PNG maken). Wat je wél test, zet je terug (ongedaan maken, versie terugzetten, testversies verwijderen).
Na het hernoemen van de map¶
Gedaan op 5-11-2026: stap 1, 3 en 4 (de code staat sinds 0.31.3 op GitHub); stap 2 doet Olaf. Voor de geschiedenis:
Een Claude-sessie hoort bij het mappad; begin na het hernoemen een nieuwe sessie in de nieuwe map (het Claude-geheugen van de oude map was leeg, er gaat niets verloren). Daarna, in deze volgorde:
- Python-omgeving opnieuw maken:
.venvbevat vaste paden naar de oude map. Verwijder.venv, maak hem opnieuw (py -3.14 -m venv .venv) en installeer (.venv\Scripts\pip install -r requirements.txt).node_moduleswerkt gewoon door. .envbijwerken (Olaf; Claude leest.envnooit):BRONCODE_URLen de URL inCOMMONS_USER_AGENTnaarhttps://github.com/KBNLwikimedia/commons-mineventory. De User-Agent zonder spatie in de naam:CommonsMineventory/0.1 (…).- Controleren:
git -c safe.directory=D:/KB-OPEN/github-repos/commons-mineventory status,pytest,npm test, en de app starten (flask --app app run --debugennpm run dev). - GitHub (Olaf, maakt de repo openbaar):
gh repo create KBNLwikimedia/commons-mineventory --public --source . --push. Op 5-11-2026 was die naam nog vrij. - Daarna backlog 12f afvinken. De Toolforge-naam wordt pas bij de deploy (17) nagekeken.
Werkwijze en valkuilen¶
- Betaalde stromen testen zonder kosten: start een tweede server in dummy-modus met eigen mappen, en ruim die daarna op:
DETECTIE_MODUS=dummy CACHE_DIR=<tijdelijk>/cache UITVOER_DIR=<tijdelijk>/uitvoer VITE_DEV=uit flask --app app run --port 5055
De dummy vindt altijd iets; "niets gevonden" is daar niet na te bootsen.
- Teksten verversen: Olaf draait npm run dev; Vite werkt de code live bij, maar de vertalingen zitten in de pagina en komen pas mee na herladen. Een stijlbestand met hetzelfde versienummer kan in de browsercache blijven (Ctrl+F5).
- Geen :class op het element van de viewer (ViewerPane.vue): Vue herschrijft dan bij elke wijziging de hele class-lijst en wist wat de viewer daar zelf zet (filters, vervagen, kruisdraad). De schakelaars zetten hun class met classList.toggle.
- Vite en Codex: op Olafs dev-server laadt de CSS van Codex ná app.css, in de build ervoor. Een regel die Codex moet overschrijven, moet daarom specifieker zijn; gelijke specificiteit werkt alleen in de build. Test uiterlijk dus ook op zijn server.
- watch en const: een watch of immediate leest zijn bron meteen; staat die bron verderop in <script setup>, dan start de component niet (de viewer bleef zo eens leeg, zonder melding in de console).
- Bestanden wijzigen: grote of meervoudige wijzigingen gingen het betrouwbaarst met een klein Python-script (.venv/Scripts/python -I script.py); heredocs in de shell braken op aanhalingstekens.
- Git: altijd git -c safe.directory=D:/KB-OPEN/github-repos/commons-mineventory …; niet pushen zonder opdracht.
- Commit-routine: versie ophogen in cutter/__init__.py en package.json (dan npm install --package-lock-only), README "Fase 1 is klaar (versie …)" en CLAUDE.md "Klaar (stand …)", de Unreleased-sectie van CHANGELOG.md een versie en datum geven, pytest, npm test en npm run build draaien, en de commit afsluiten met de Co-Authored-By-regel.
- GET /objecten kent geen q: zoeken op de server zit alleen in de export (/objecten/export?formaat=json&q=…, antwoord in rijen); de pagina Objecten zoekt in de browser (objectText in facets.js). Houd die drie (lijst naast het beeld in CutterApp.vue, facets.js, _matching in api.py) gelijk.
- De dummy kent geen Beeldt af-overeenkomsten: de nagebootste zoektermen (coat of arms, portrait, …) passen niet bij de items van Olafs testbestand; het blok Staat al op Commons is in dummy-modus dus niet te zien.
- Grote antwoorden over loopback worden op Olafs machine soms afgekapt (ERR_CONNECTION_RESET); dat ligt niet aan de app.
- Projectsite (GitHub Pages): documentatie en uitleg, niet de app (die komt op Toolforge). Bronnen in site/ (index.html, docs.css, build.py); de Action .github/workflows/pages.yml bouwt bij een push naar main die site/, docs/, BACKLOG.md of CHANGELOG.md raakt. Een nieuw document voeg je toe aan DOCS in site/build.py; nieuwe schermafbeeldingen aan docs/screenshots/ en aan SLIDES in site/index.html (met bijschrift in beide talen). Op Windows kan de indexer _site/ vergrendelen; bouw dan naar een andere map (python site/build.py <map>).
Wat openstaat¶
- Olaf:
.envbijwerken (BRONCODE_URL, de URL inCOMMONS_USER_AGENT) en de lege oude mapcommons-cutterverwijderen. Daarmee is backlog 12f af, op de Toolforge-naam na. - Een terminal starten: Flask staat alleen in
.venv. Zet de omgeving aan met.venv\Scripts\Activate.ps1, of start met.venv\Scripts\flask --app app run --debug. - Volgende bouw: het dashboard met collecties (backlog 15a, FO 17), nu al, vóór OAuth, onder de gebruiker
lokaal, zonder voorscan door AI. Volgorde in FO 17.9, stap 1 tot en met 4; Olafs besluiten in FO 17.10. - Starttegoed (backlog 15c, FO 8.6): besloten (FO 8.6.6), te bouwen na OAuth en de database.
- Morgen eerst (Olaf, 9-11-2026): de vergelijking of de detectie-aanwijzing in de prompt helpt (backlog 12i). Betaald, dus Olaf doet het zelf op zijn server; de checklijst staat in vergelijking-detectie-aanwijzing.md. Daarna houden, bijstellen of weghalen.
- Wacht op Olaf: het herontwerp van het tabblad Wat staat hierop? met vier subtabbladen (backlog 12h, ontwerp-wat-is-dit.md). De eigen prompt is er al (8-11-2026); hij staat nu nog als rij boven AI-modifiers. Olaf vindt het tabblad nog rommelig; pas herindelen na zijn akkoord.
- Wacht op Olaf: het vragenformulier over ImageNote (FO 9.8, backlog 15d).
- Later, nice-to-have: het canvas om uitsneden te combineren tot nieuwe werken (FO 18, backlog 25); ontworpen, niet gepland.
- Later, nice-to-have: een 3D-model van een uitsnede met SAM 3D Objects via Runware (FO 7.8, backlog 19c); ontworpen, niet gepland.
- Venster gestructureerde gegevens (backlog 15b, FO 9.7): gebouwd als concept (0.33.5–0.33.7); open: het mini-beeld met kaders in de kop van het venster, en het schrijven naar Commons (fase 2, na OAuth).
- Valkuil: in scripts die tekst in bestanden zetten, nooit
\u0000of andere stuurtekens als scheidingsteken gebruiken (er kwamen eens echte nul-tekens inMagnifier.vue); gebruik iets als@@naam@@. En een lossecatzonder invoer in een Bash-aanroep blijft wachten. - Niet urgent: alles in het Engels, paden, parameters en JSON (backlog 12j, besluit Olaf).
- Bij de deploy (backlog 17, FO 12.1):
uitvoer/op de Build Service vraagt--mount=allen$TOOL_DATA_DIR. Tonen in map is daar uit; Bestand openen en Downloaden werken wel. Tonen in map is nog niet echt geprobeerd (alleen getest met een stand-in): Olaf probeert het op zijn eigen server. - Klein: backlog 12b (oude paginaoverzichten zonder Engels; nagaan welke SDC-velden Commons-bots zelf zetten).
- Fase 2: OAuth (13) met werk per gebruiker (13a, FO 8.5: eigen uitvoermap per gebruiker, gedeelde cache), upload via de stash op een testwiki (14), beheerpaneel (15), categorie als invoer (15a). Pas daarna kan per gebruiker gescheiden worden (12c).