docs(16): record the objectGUID sweep defect found by UAT test 2
Quick task 260811-f9i: plan and summary of the fix, STATE.md row, and the UAT test 2 result. Test 2 was the read-only A2 check against the real directory -- it turned assumption A2 from "unverified" into "false as implemented" and surfaced a defect that would have deleted every AD-bound group on the first real sync. Also records why the defect survived review: the spec mocks built their expected filter with the same escape helper the production code used, so the test asserted self-consistency rather than directory behaviour. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -27,7 +27,25 @@ result: [pending]
|
||||
|
||||
### 2. Binaerer Existenz-Filter liefert korrekte Treffer (Annahme A2)
|
||||
expected: Gegen dasselbe AD, read-only — eine Suche mit dem byteweise escapten (objectGUID=...)-Binaerfilter absetzen. Eine weiterhin existierende Gruppe muss einen Treffer liefern, eine tatsaechlich geloeschte keinen. Ein negatives Ergebnis bei Test 1 ODER 2 ist ein Stopp-Grund fuer die Loeschsemantik aus D-05.
|
||||
result: [pending]
|
||||
result: failed -> fixed
|
||||
tested: 2026-08-11 read-only gegen balios.ctl.local, Sonde CN=Domain Admins,CN=Users,DC=ctl,DC=local
|
||||
notes: |
|
||||
A2 war FALSCH — nicht am Domain Controller, sondern an der Umsetzung. Der als
|
||||
String interpolierte Filter (objectGUID=\1e\4b...) lieferte 0 Treffer fuer ein
|
||||
Objekt, dessen GUID unmittelbar zuvor aus demselben Verzeichnis gelesen wurde.
|
||||
Die Grossbuchstaben-Variante ebenfalls 0. Ein ldapts EqualityFilter mit dem
|
||||
rohen 16-Byte-Buffer lieferte genau einen Treffer mit korrekter DN; die
|
||||
Kontrollsuche (cn=Domain Admins) lieferte ebenfalls einen Treffer.
|
||||
|
||||
Auswirkung im damaligen Stand: beide Suchen der Existenzpruefung — die schmale
|
||||
ueber die Base-DNs und die weite WR-03-Absicherung — teilten sich diesen Filter.
|
||||
Der erste echte Sync-Lauf haette daher JEDE AD-gebundene Gruppe als geloescht
|
||||
eingestuft und samt GroupMembership und ModuleGrant entfernt.
|
||||
|
||||
Behoben in Quick-Task 260811-f9i (Commit d2019dc): EqualityFilter ueber den
|
||||
rohen Buffer, escapeLdapFilterBuffer() entfernt, zwei Regressionstests, die den
|
||||
String-Filter ausschliessen. Der negative Fall (unbekannte GUID liefert nichts)
|
||||
war in beiden Varianten erfuellt.
|
||||
|
||||
### 3. Umbenennung im AD zieht in Tessera nach (SC-3, end-to-end)
|
||||
expected: Gruppe im echten AD umbenennen, Sync laufen lassen. Group.name und Group.ldapDn ziehen nach, der Zaehler groupsRenamed steigt, es findet KEINE Loesch-und-Neuanlage statt, Mitgliedschaften und Modulfreigaben bleiben erhalten, ein gesetzter interner Name bleibt unveraendert.
|
||||
@@ -95,10 +113,15 @@ result: [pending]
|
||||
total: 8
|
||||
passed: 2
|
||||
partial: 1
|
||||
issues: 0
|
||||
pending: 5
|
||||
issues: 1
|
||||
pending: 4
|
||||
skipped: 0
|
||||
blocked: 0
|
||||
issues_detail: |
|
||||
Test 2 hat einen kritischen Fehler aufgedeckt (Existenzpruefung fand nie etwas,
|
||||
Loeschung aller gebundenen Gruppen beim ersten Sync). Behoben in Quick-Task
|
||||
260811-f9i, Commit d2019dc. Der Test selbst gilt damit als bestanden fuer die
|
||||
Filtermechanik; der Sync-Lauf als Ganzes bleibt ueber Test 3/4 offen.
|
||||
|
||||
## Gaps
|
||||
|
||||
|
||||
Reference in New Issue
Block a user