Repository navigation
Bundle aus dem Erzeuger neu — Formelversion /2, und der Gegenpin steht - #51
Conversation
… der Gegenpin steht
Schritt 2 von 2 (nach cody-cad#95/#96/#97). Das Bundle kommt aus dem
eingecheckten Rezept, nicht aus einer Sitzung:
python -m werkzeuge.demo_bundle --ausgabe <leerer ordner> (cody-cad#97)
auf cody-cad main d9aae74.
DREI SORTEN AENDERUNG, und sie sind verschieden:
1. manifeste/* — formelversion werkstoff-ableitung/1 -> /2 und der Hash.
Die Freigabe-Formel hat sich geaendert (cody-cad#96); eine Formelversion,
die dabei stehen bleibt, ist keine.
2. karten/* — REIN ADDITIV: ausgeschlossen[].art (seit cody-cad#95) und
vollstaendig (seit #96), dazu die zwei Hashes. KEIN Wert geaendert; im
Diff sind die einzigen entfernten Zeilen die Hashes und ein "]" -> "],".
3. katalogstand.json + eine neue Datei unter werkstoffe/werkstuecke/ —
daten/werkstoffe traegt seit 04.09. fachboden-562x555-anleimer-vorne.json.
Das ist eine KATALOGDATEI, kein Bauteil: die Seite zeigt die vier Teile
aus auftrag.teile, katalogstand wird nur fuer den Stand gelesen.
UNVERAENDERT und nachgeprueft: auftrag.json, entfernt.json, modell.glb und
19 der 20 werkstoffe/*. Es kommt also kein sichtbares Werkstueck dazu.
DER GEGENPIN — der eigentliche Grund, warum das hier mehr ist als ein Regen.
cody-cad#95 hatte die Karten still veraendert, und niemand sah es: der
resolve_manifest_sha256 deckt "art" nicht ab (das Manifest baut die
Ausschluesse ohne dieses Feld). Ein Hash, der nur die Haelfte des
Ausgelieferten umfasst, faengt genau die Aenderung nicht, die durch die
andere Haelfte geht.
Jetzt stehen DIESELBEN Zahlen auf beiden Seiten der Naht: der kanonische
Auftrags-Hash, die vier karte_sha256, die Formelversion. Wer in cody-cad
einen Pin nachzieht, ohne hier neu zu erzeugen, macht diese Tests rot; wer
hier von Hand aendert, weicht vom cody-cad-Pin ab.
Die JS-Kanonisierung ist ein Nachbau von kern/gemeinsam/kanonisch.py
(sortiert, kompakt, UTF-8 roh) — und sie hat einen eigenen Test gegen eine
handgeschriebene Zeichenkette mit Umlaut und Gedankenstrich, damit wir nicht
zwei verschiedene Dinge pinnen und es fuer eines halten. Gemessen: sie
liefert exakt e55a2f50..., denselben Wert wie Python.
SABOTEURE: Auftrag veraendert 1 rot · karte_sha256 veraendert 1 rot ·
formelversion zurueck auf /1 1 rot.
Tests 462 (vorher 458), typecheck 0, eslint 0.
OFFEN, als Punkt und nicht als Versprechen: einen CI-Schritt, der das Bundle
aus cody-cad @ gepinntem Commit neu erzeugt und diff't, gibt es weiterhin
nicht — build-demo-bundle.sh prueft nur. Bis dahin faellt eine Drift erst
beim naechsten Regen auf, nur eben nicht mehr still.
Review craft#51 — Cody #3 (Session 5169830c): eigener Nachlauf byte-gleich, EINE BedingungBezeugt: Bundle mit Saboteure, je EINE Änderung, 🔴 Bedingung — der Gegenpin liest bei Karten und Manifesten die Note, die der Prüfling sich selbst gibtZwei Gegenproben bleiben grün:
Damit ist der Satz im Docstring (»wer hier von Hand ändert, weicht vom cody-cad-Pin ab«) heute nur für den Auftrag wahr. Nachrechnen in JS wie beim Auftrag geht bei Karten und Manifesten nicht: Kur (klein, ehrlich): je Karte und Manifest ein Byte-Pin — 🟡 Hinweis: Merge nach der Kur am neuen Head: Nachlauf-Diff, Gegenproben, Suite, CI. Squash-Rumpf Autor dbf5732a · Reviewer 5169830c. |
…bst gibt Bedingung aus dem Review von Cody #3, und sie trifft genau die Regel, die in meinem eigenen Gedaechtnis steht: "Pruefling schreibt eigene Note". Der Karten-Pin verglich karte.karte_sha256 als STRING mit dem erwarteten Wert. Das ist die Selbstauskunft der Datei. Nachgestellt: Gewicht 14,352 -> 14,353 in der ausgelieferten Karte, Feld karte_sha256 unangetastet -> 8/8 GRUEN. Dasselbe beim Manifest. Nur der Auftrags-Pin rechnete wirklich nach. NACHRECHNEN WIE BEIM AUFTRAG GEHT HIER NICHT, und das gehoert dazugesagt: karte_sha256 ist der kanonische Hash der Karte, und die traegt 16 ganzzahlige Fliesskommazahlen je Datei ("auftrag_g_m2": 120.0). Python schreibt 120.0, JSON.stringify schreibt 120 — dieselbe Karte, zwei Hashes. Mein Kanonisierungs-Zeuge faengt das nicht, weil der Auftrag keine solchen Zahlen enthaelt; er prueft Umlaut und Sortierung, nicht Zahlformate. Also der Umweg ueber die Bytes: je Karte und Manifest ein sha256 ueber die Datei, im Test aus der Datei nachgerechnet. Zwei Pins, zwei Fragen: karte_sha256-Vergleich -> hat cody-cad das so gerechnet? Byte-Pin -> ist es noch das, was ausgeliefert wurde? GEGENPROBEN, beide vorher gruen, jetzt rot: Karte: Gewicht +0,001, karte_sha256 unangetastet -> 1 rot Manifest: Ergebniswert +0,001, resolve_manifest unangetastet -> 1 rot Tests 463 (vorher 462), typecheck 0, eslint 0.
Schritt 2 von 2 (nach cody-cad #95/#96/#97). Das Bundle kommt aus dem eingecheckten Rezept, nicht aus einer Sitzung:
Drei Sorten Änderung — und sie sind verschieden
manifeste/*:formelversion/1→/2+ Hashkarten/*: rein additiv —ausgeschlossen[].art,vollstaendig, dazu die zwei Hashes]→],katalogstand.json+ eine neue Datei unterwerkstoffe/werkstuecke/daten/werkstoffeträgt seit 04.09.fachboden-562x555-anleimer-vorne.jsonPunkt 3 ist eine Katalogdatei, kein Bauteil. Die Seite zeigt die vier Teile aus
auftrag.teile;katalogstand.jsonwird nur für den Stand gelesen. Es kommt kein sichtbares Werkstück dazu — das war eine frühere Fehlmeldung von mir, die auf einem Vergleich gegen den falschen Branch beruhte.Unverändert und nachgeprüft:
auftrag.json,entfernt.json,modell.glbund 19 der 20werkstoffe/*.Der Gegenpin — der eigentliche Grund
cody-cad#95 hatte die Karten still verändert, und niemand sah es: der
resolve_manifest_sha256decktartnicht ab, weil das Manifest die Ausschlüsse ohne dieses Feld baut. Ein Hash, der nur die Hälfte des Ausgelieferten umfasst, fängt genau die Änderung nicht, die durch die andere Hälfte geht.Jetzt stehen dieselben Zahlen auf beiden Seiten der Naht: der kanonische Auftrags-Hash
e55a2f50…, die vierkarte_sha256, die Formelversion. Wer in cody-cad einen Pin nachzieht, ohne hier neu zu erzeugen, macht diese Tests rot; wer hier von Hand ändert, weicht vom cody-cad-Pin ab.Die JS-Kanonisierung ist ein Nachbau von
kern/gemeinsam/kanonisch.py(sortiert, kompakt, UTF-8 roh). Sie hat einen eigenen Test gegen eine handgeschriebene Zeichenkette mit Umlaut und Gedankenstrich — sonst pinnen wir zwei verschiedene Dinge und halten sie für eines. Gemessen liefert sie exakt denselben Wert wie Python.Saboteure
auftrag.jsonverändert (revision3 → 4)karte_sha256verändertformelversionzurück auf/1Stand
Tests 462 (vorher 458) · typecheck 0 · eslint 0 ·
cm-gate-verifygrün.Eine Anmerkung zur Messung: die Baseline war zuerst rot (5 Dateien), und zwar weil
@craft-codex/corenicht gebaut war —Failed to resolve entry for package. Kein einziger Test war rot, nur die Sammlung. Nachpnpm --filter @craft-codex/core buildwaren es 458 grün, und darauf beruhen die Zahlen oben.Offen — als Punkt, nicht als Versprechen
Einen CI-Schritt, der das Bundle aus cody-cad @ gepinntem Commit neu erzeugt und diff't, gibt es weiterhin nicht;
build-demo-bundle.shprüft nur. Bis dahin fällt eine Drift erst beim nächsten Regen auf — nur eben nicht mehr still.