ΤΕΥΧΟΣ 040  ·  15 ΝΟΕΜΒΡΙΟΥ 2026 RSS
CodeCity
ΣΧΕΔΙΑΣΜΟΣ № 0021

Project Wallace: αεροφωτογράφιση της σχεδιαστικής συνέπειας

Το Project Wallace είναι εργαλείο γραμμής εντολών που διαβάζει ένα αρχείο CSS και μετράει το σύστημα πίσω από αυτό: πόσα χρώματα, πόσα μεγέθη, πόσα z-index, ποια custom property δηλώθηκε και δεν χρησιμοποιήθηκε ποτέ, πώς κατανέμεται η ειδικότητα. Δεν έχει κανόνες και δεν μαλώνει γραμμή προς γραμμή. Δίνει συνολικά νούμερα, σαν αεροφωτογράφιση.

Project Wallace: αεροφωτογράφιση της σχεδιαστικής συνέπειας

Τι κάνει

Παραδίδεις ένα site, και δύο χρόνια αργότερα ανοίγεις το ίδιο αρχείο CSS για να προσθέσεις ένα κουμπί. Μέσα βρίσκεις σαράντα αποχρώσεις του γκρι, δεκαπέντε μεγέθη γραμματοσειράς, το ίδιο λευκό γραμμένο με τέσσερις τρόπους, και δύο τιμές z-index να πολεμούν για την ίδια θέση. Δεν είναι λάθος γραμμές. Είναι απουσία συστήματος, και κανένας linter δεν θα σου το πει, γιατί κοιτάζει μία γραμμή τη φορά.

Εκεί μπαίνει το Project Wallace. Μετράει πόσα: μοναδικά χρώματα, μεγέθη γραμματοσειράς, τιμές z-index, μονάδες, custom properties που δηλώθηκαν και ξεχάστηκαν, κατανομή ειδικότητας των επιλογέων, πλήθος !important. Δεν σου λέει «η γραμμή 412 είναι λάθος». Λέει πόσο. Δύο χρώματα σε ένα site είναι σύστημα· είκοσι τέσσερα είναι απόφαση που δεν πάρθηκε ποτέ. Ο linter ρωτάει αν η γραμμή είναι σωστή· το Wallace ρωτάει πόσο σύστημα έχει το αρχείο. Γι’ αυτό δεν είναι ο δέκατος linter.

Δύο πακέτα το κάνουν: η γραμμή εντολών wallace-cli 4.0.4 και η μηχανή @projectwallace/css-analyzer 9.9.4, και τα δύο με άδεια MIT, δημοσιευμένα στις 13 Οκτωβρίου 2026.

Τα δημόσια νούμερα, με την πηγή τους. Τον μήνα 23 Σεπτεμβρίου με 22 Οκτωβρίου 2026 η μηχανή κατέβηκε 68.090 λήψεις και η γραμμή εντολών 32.628 λήψεις (api.npmjs.org). Στο ίδιο διάστημα το css-code-quality είχε 31.631 λήψεις και το css-design-tokens 2.075 λήψεις. Το αποθετήριο projectwallace/css-analyzer έχει 366 αστέρια, 15 forks, άνοιξε το 2017, τελευταία αλλαγή στις 21 Οκτωβρίου 2026· το αποθετήριο της γραμμής εντολών έχει 645 αστέρια.

Τι δεν κάνει

Θα χρειαστείς και κάτι άλλο: έναν άνθρωπο να επιβλέπει και να κρίνει τα αποτελέσματα, γιατί το εργαλείο μετράει και δεν αναλαμβάνει ρόλο επιβλέποντα. Μην του ζητήσεις να λειτουργήσει ως επιβλέπων· είναι εργαλείο μετρητή, όχι επιβλέποντα. Μην του ζητήσεις να σου πει «η γραμμή 412 είναι λάθος». Δεν εντοπίζει παραβάσεις κανόνων, δεν προτείνει διορθώσεις και δεν δίνει γραμμή προς γραμμή οδηγίες. Δεν είναι refactoring tool· μετρά σύνολα, δεν κάνει rewrite ούτε αυτοματοποιημένα fixes. Επίσης δεν έχει νόημα για ένα απλό αρχείο με πέντε κανόνες· εκεί το «πόσο σύστημα» δεν υπάρχει.

Δοκιμάσαμε την ενσωμάτωση σε CI. Μην το περιμένεις να σπάει build. Το Wallace δεν επιστρέφει κωδικό εξόδου αποτυχίας, άρα δεν λειτουργεί ως φύλακας σε σωλήνα παρά μόνο ως αναφορά. Δεν είναι server, δεν σηκώνει MCP κανόνες ή agent sessions. Αν θέλεις αυτόματο μπλοκάρισμα ή επιτηρούμενα alerts, πρέπει να γράψεις wrapper που διαβάζει τα νούμερα και αποφασίζει.

Δοκιμάσαμε και την παγίδα των χρωμάτων. Μην το ζητάς να «δει» τι βλέπει το μάτι. Μετρά διαφορετικές σημάνσεις ως διαφορετικά χρώματα, ακόμα και αν ο χρήστης βλέπει το ίδιο λευκό. Τέλος, υπάρχει ρίσκο bus‑factor και μικτή αδειοδότηση: ένας κεντρικός parser και ένα πακέτο με EUPL-1.2. Αν υπολογίζεις μακροχρόνια εξάρτηση ή νομικά έγγραφα, λάβε το υπ’ όψιν σου.

Για ποιον είναι

Για όποιον πρέπει να υποστηρίξει το CSS του με νούμερα αντί για γνώμη. Ένα στούντιο που αναλαμβάνει ένα παλιό site θέλει να ξέρει σε τι μπαίνει πριν δώσει προσφορά, και μία εντολή του λέει πόσα χρώματα κουβαλάει το project. Κάποιος που συντηρεί design system θέλει να το ζυγίζει κάθε τρίμηνο. Ένας σχεδιαστής θέλει να δείξει στον προγραμματιστή ότι το χρώμα που ζήτησε είναι ένα, όχι τρία.

Και οι βοηθοί κώδικα, που απαντούν έτσι με νούμερα σε ερωτήσεις που αλλιώς απαντιούνται με γούστο.

Δεν είναι για σένα αν ψάχνεις παραβάσεις κανόνων, γιατί αυτό το κάνει ένας linter CSS και το κάνει καλύτερα. Δεν είναι για ένα αρχείο με πέντε κανόνες. Και δεν σου δίνει κωδικό εξόδου που σπάει το build, όπως εξηγώ παρακάτω.

Εγκατάσταση

Χωρίς εγκατάσταση, με npx

Μπαίνεις στον φάκελο που έχει το CSS σου και τρέχεις:

npx wallace-cli@4.0.4 styles.css

Το npx το κατεβάζει και το τρέχει. Κανένα κλειδί, κανένας λογαριασμός, κανένα αρχείο ρύθμισης, καμία τηλεμετρία.

Μόνιμη εγκατάσταση στο project

Από τη ρίζα του project:

npm i -D wallace-cli

Και μετά καλείς το τοπικό αντίγραφο:

./node_modules/.bin/wallace styles.css

Το -D το κρατά στις εξαρτήσεις ανάπτυξης, οπότε δεν ταξιδεύει στο site που βλέπουν οι επισκέπτες. Στη δοκιμή μας η εγκατάσταση τριών πακέτων πήρε 1 δευτερόλεπτο, με Node 26.7.0.

Χρήση σε κάθε LLM

Πρώτα το σημαντικό: το Project Wallace δεν είναι MCP server. Δεν το δηλώνεις πουθενά. Δεν σηκώνει διακομιστή. Δεν στέλνει σχήματα εργαλείων σε κάθε συνεδρία. Είναι πακέτο npm που το καλείς με npx, άρα ο φόρος πλαισίου του είναι μηδέν. Ψάξαμε το npm και το GitHub για παραλλαγή MCP του εργαλείου: δεν υπάρχει.

Η χρήση του από βοηθό γίνεται από το κέλυφος. Οι τρεις εντολές παρακάτω τρέχουν και τις τρέξαμε· το πώς συμπεριφέρεται ο κάθε βοηθός απέναντί τους είναι δική μου εκτίμηση, γιατί δεν οδήγησα συνεδρία πράκτορα σε κανέναν από αυτούς.

Claude Code, και κάθε βοηθός με κέλυφος

Του δίνεις άδεια να τρέξει την εντολή, και η μέτρηση γίνεται ένα βήμα:

npx wallace-cli@4.0.4 styles.css

Η απάντηση είναι κείμενο που το διαβάζει και άνθρωπος και μοντέλο. Χρήσιμο όταν η ερώτηση είναι «σε τι κατάσταση είναι αυτό το CSS;».

Codex CLI

Ίδια λογική, με δομημένη έξοδο, γιατί εδώ το μοντέλο θέλει να συγκρίνει νούμερα:

npx wallace-cli@4.0.4 --json styles.css > report.json

Μένει ένα αρχείο που το κρατάς ή το συγκρίνεις με το επόμενο τρίμηνο.

Cursor, σωλήνας και CI

Ο πράκτορας έχει τερματικό και οι εντολές είναι οι ίδιες. Στον σωλήνα το CSS δεν χρειάζεται καν να είναι αρχείο:

cat styles.css | npx wallace-cli@4.0.4

Στο CI πρόσεξε το επόμενο. Το εργαλείο δεν έχει κωδικό εξόδου για αποτυχία, άρα δεν σταματά μόνο του ένα build. Το βάζεις για να διαβάσεις νούμερα, όχι για να φυλάει.

Πού κερδίζει, πού χάνει

Κερδίζει γιατί μετράει ό,τι δεν μετράει κανείς: δεν κοιτάζει γραμμές, κοιτάζει σύνολα. Μία αεροφωτογράφιση δεν κρίνει κτίρια, δείχνει τον οικισμό.

Κερδίζει στην ταχύτητα, μισό δευτερόλεπτο για ολόκληρο stylesheet, σε μηχάνημα χωρίς κάρτα γραφικών. Κερδίζει στο μηδέν config. Και κερδίζει στο ότι το έργο, ενώ το συντηρεί ένας μόνο άνθρωπος, βγάζει έκδοση κάθε δύο βδομάδες: 23 εκδόσεις μέσα στο 2026, νούμερο που μετρήθηκε από την έρευνά μας.

Χάνει σε τρία σημεία, με σειρά σοβαρότητας.

Πρώτο, κανένας κωδικός εξόδου. Δική μας μέτρηση: το wallace --version δεν τυπώνει έκδοση, τυπώνει το βοήθημα. Οι επιλογές του είναι τρεις συνολικά: --json, --help και μία διαδρομή αρχείου, ή δεδομένα από την πρότυπη είσοδο. Δεν υπάρχει τρόπος να πει «κάτι πήγε στραβά» που να τον καταλάβει ένα script. Δεν είναι φύλακας, είναι μετρητής.

Δεύτερο, δεν βλέπει αντιληπτική διαφορά χρωμάτων. Το βρήκαμε με παγίδα που στήσαμε μόνοι μας, όχι διαβάζοντας τεκμηρίωση: το ίδιο λευκό γραμμένο με τέσσερις σημάνσεις μετράει ως τέσσερα πράγματα, ενώ το μάτι βλέπει ένα.

Τρίτο, το bus factor. Ένας άνθρωπος, μία εξάρτηση, ο δικός του parser του CSS. Ρίσκο που το ξέρεις από πριν: αν κάτι συμβεί στον συντηρητή, το εργαλείο δεν έχει δεύτερο τιμόνι.

Και η άδεια. Τα τρία βασικά πακέτα, τα css-analyzer, wallace-cli και css-code-quality, είναι MIT: κάνεις ό,τι θέλεις, ακόμα και κλειστό προϊόν. Το @projectwallace/css-design-tokens όμως είναι EUPL-1.2, ευρωπαϊκή άδεια με αδύναμο copyleft: το τροποποιείς και το διανείμεις, οι αλλαγές σου μένουν ανοιχτές. Ένα πακέτο, άλλη άδεια.

Δοκιμή

Ό,τι ακολουθεί τρέξαμε σε Windows 11, σε Dell Inspiron 3576, χωρίς κάρτα γραφικών, με Node 26.7.0.

Έγραψα ένα CSS με το χέρι και μέτρησα πρώτα εγώ: 11 κανόνες, 11 επιλογείς, 19 δηλώσεις, δύο !important, δύο @media, τέσσερις δηλώσεις z-index με τέσσερις διαφορετικές τιμές, μέγιστη ειδικότητα 1/3/0, και μία custom property δηλωμένη και ποτέ χρησιμοποιημένη.

npx wallace-cli@4.0.4 styles.css

Η απάντηση ήταν 11/11/19, ακριβώς. Βρήκε και τα δύο !important, και τα δύο @media, τις 4 δηλώσεις z-index με 4 μοναδικές τιμές, ειδικότητα 1/3/0, και ακριβώς τη μία ξεχασμένη custom property. Χρόνος: 0,373 δευτερόλεπτα για 406 bytes.

Μετά η παγίδα, η πιο χρήσιμη μέτρηση του άρθρου. Έβαλα το ίδιο λευκό σε τέσσερις σημάνσεις (#ffffff, #fff, rgb(255 255 255), hsl(0 0% 100%)) και το μαύρο σε δύο (black, #000). Το εργαλείο ανέφερε επτά μοναδικά χρώματα· το μάτι βλέπει τρία. Άρα μετράει σημάνσεις, όχι χρώματα. Όποιος το διαβάσει ως απόκλιση κυνηγά φαντάσματα: θα ψάξει ένα χρώμα που δεν υπάρχει, και μπορεί να προσπεράσει μία πραγματική απόκλιση που είναι ορατή αλλά «ίδια» στη μέτρηση.

Και η λεπτομέρεια στο συνοδευτικό πακέτο. Το @projectwallace/css-design-tokens μαζεύει πράγματι τα #ffffff, #fff και rgb() σε ένα token, αλλά μια τιμή γραμμένη σε hsl σπάει σε δεύτερο: τρία tokens για δύο χρώματα. Ούτε αυτό είναι γραμμένο στην τεκμηρίωση· το βρήκαμε δοκιμάζοντας.

Δεν τρέξαμε συνεδρία πράκτορα μέσα σε κάποιον από αυτούς· ό,τι δοκιμάστηκε, δοκιμάστηκε στο κέλυφος.

Τι κοστίζει

Το εργαλείο. Μηδέν χρήμα, μηδέν λογαριασμός: το wallace-cli και ο αναλυτής του είναι MIT, κατεβαίνουν με ένα npx και δεν ζητούν κλειδί, κάρτα ή σύνδεση. Δουλεύουν τοπικά, χωρίς κάρτα γραφικών. Η εγκατάσταση μέτρησε 3 πακέτα σε 1 δευτερόλεπτο και 1,3 MB· η πλήρης οικογένεια, μαζί με τα css-code-quality και css-design-tokens, 8 πακέτα και 1,3 MB. Μία προσοχή που δεν τη βρίσκεις εύκολα: το css-design-tokens δεν είναι MIT αλλά EUPL-1.2, άδεια με αδύναμο copyleft ευρωπαϊκής προέλευσης — σε κλειστό προϊόν θέλει απόφαση πριν μπει σε build.

Το πλαίσιο. Μηδέν. Δεν υπάρχει MCP server για το Project Wallace: το ψάξαμε στο npm και στο GitHub, κανένα αποθετήριο. Χωρίς διακομιστή δεν υπάρχει λίστα εργαλείων να σταλεί σε κάθε συμβεδρία. Για σύγκριση, ένας συνηθισμένος MCP server με έξι εργαλεία φορτώνει περίπου 2.690 χαρακτήρες σχήματος, δηλαδή ~672 tokens σε κάθε συμβεδρία, και ο επίσημος MCP server του GitHub δηλώνει γύρω στα 55.000. Εδώ πληρώνεις μόνο το κείμενο που θα γράψεις.

Η δουλειά. Η ανάλυση δεν περνά από μοντέλο: 0,37 δευτερόλεπτα CPU για 406 bytes, μηδέν tokens. Το κόστος αρχίζει όταν τα νούμερα φτάσουν σε κουβέντα με μοντέλο — και εκεί δεν πληρώνεις τις ερωτήσεις, πληρώνεις ό,τι σέρνεις μαζί σε κάθε συνεδρία. Στη δική μας στοίβαξη, από τα 1,07 δισεκατομμύρια tokens που καταγράφηκαν, τα 1,007 ήταν ανάγνωση κρυφής μνήμης: 94%. Ο εκτιμητής μας χρέωσε τη δουλειά 30,16 $, το ταμείο του παρόχου έχει καεί κατά 39,07 $· η διαφορά δεν είναι σφάλμα, είναι εικόνες και όραση που ο εκτιμητής δεν βλέπει. Το «7 μοναδικά χρώματα» του πίνακα δεν κόστισε τίποτα, και είναι το πιο χρήσιμο νούμερο της ημέρας.

Ετυμηγορία

Score: 8.0/10.

Το Project Wallace είναι όργανο μέτρησης, όχι ο δέκατος linter. Σου λέει πόσα χρώματα, πόσα μεγέθη, πόσα z-index και ποια custom property ξέχασες, χωρίς αρχείο ρύθμισης και χωρίς κλειδί. Κάθε νούμερο της δοκιμής βγήκε σωστό: 11/11/19, δύο !important, δύο @media, τέσσερα z-index, ειδικότητα 1/3/0, 0,373 δευτερόλεπτα.

Τους δύο βαθμούς τους χάνει εκεί που δεν διορθώνονται με ρύθμιση. Δεν έχει κωδικό εξόδου, άρα δεν φυλάει το build: την έξοδο τη διαβάζεις εσύ. Και μετράει χρώματα κατά σήμανση, όχι κατά το τι βλέπει το μάτι, οπότε τρία ορατά χρώματα γίνονται επτά στον πίνακα — κάτι που το ξέρεις από εμάς, όχι από την τεκμηρίωση. Πρόσθεσε τον έναν άνθρωπο και τον δικό του parser, και ο βαθμός εξηγείται.

Τρέξε το σήμερα στο χειρότερο αρχείο σου και κράτα το --json για να δεις σε τρεις μήνες τι πρόσθεσες.

Δείτε επίσης

Τρία ακόμη από την ίδια κατηγορία:

Πηγές: αποθετήριο https://github.com/projectwallace/css-analyzer · γραμμή εντολών https://www.npmjs.com/package/wallace-cli · μηχανή μέτρησης https://www.npmjs.com/package/@projectwallace/css-analyzer

Εγκατάσταση

3 ΒΗΜΑΤΑ
  1. npx wallace-cli@4.0.4 styles.css
  2. npm i -D wallace-cli
  3. npx wallace-cli@4.0.4 --json styles.css > report.json
Project Wallace: αεροφωτογράφιση της σχεδιαστικής συνέπειας · ΑΠΟΤΕΛΕΣΜΑ 8,0/10
ΠΗΓΗ
github.com/projectwallace/css-analyzer