Πίνακας περιεχομένων
χρόνος ανάγνωσης : 12 minutes

Η βάση κώδικά σας αυξάνει. Οι εξαρτήσεις μεταξύ των modules πολλαπλασιάζονται. Η τεκμηρίωση της αρχιτεκτονικής γίνεται παρωχημένη ακόμα πριν γραφτεί. Και εάν η Gradle build σας μπορούσε να αυτοματικά δημιουργεί ενημερωμένα διαγράμματα από την πραγματική δομή του κώδικα; Αυτό είναι ακριβώς αυτό που κάνει το pipeline Graphify + PlantUML Gradle Plugin :`graphify . --no-viz`εξάγει το Knowledge Graph,`./gradlew generateKnowledgeGraphDiagram`τον μετατρέπει σε διαγράμματα PlantUML. μηδέν LLM, μηδέν χειροκίνητο, 100% καθορισμένος.

Το πρόβλημα: διάγραμματα που είναι πάντα πίσω από τον κώδικα

Κάθε έργο που υπερβαίνει τις μερικές χιλιές γραμμές γνωρίζει αυτό το σύνδρομο:

  1. Σχεδιάζουμε ένα αρχιτεκτονικό διάγραμμα στην έναρξη του έργου.

  2. Ο εξελίσσεται, οι εξαρτήσεις αλλάζουν

  3. Το διάγραμμα γίνεται ένα διακοσμητικό ψέμα

  4. Κανείς το ενημερώνει επειδή είναι βαρετό.

  5. Οι πρόσφατα φθάνοντες βασίζονται σε αυτό και κάνουν λάθη

@startuml
skinparam backgroundColor #FEFEFE
skinparam ActivityBackgroundColor #FDEDEC
skinparam ActivityDiamondBackgroundColor #FFF3CD

start

:Diagramme d'architecture créé\n(manuellement, à la main);

:Le code évolue\n(nouvelles classes, nouvelles dépendances);

:Diagramme obsolète\n(ne reflète plus le code);

if (Qui met à jour ?) then (Personne)
    :Documentation mensongère;
    note right: Οι νέοι προγραμματιστές\nβασίζονται σε αυτό... και κάνουν λάθη
else (Quelqu'un)
    :Mise à jour manuelle\n(2-3 heures de travail);
    note right: Ήδη ξεπερασμένο\nστο επόμενο PR
endif

stop

@enduml

Η ερώτηση δεν είναι χρειάζεται διάγραμμα ; — όλοι γνωρίζουν ότι ναι. Η ερώτηση είναι :ποιος τα διατηρεί ενημερωμένα;

Η απάντηση: κανένας. Εκτός αν είναι αυτόματο.

Η λύση: ένας καθορισμένος pipeline Knowledge Graph → PlantUML

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

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

actor Développeur
component "Graphify\n(pip install graphifyy)" as Graphify
collections "graphify-out/graph.json\n(Γράφημα Γνώσης)" as KGJSON
component "PlantUML Gradle Plugin\n(generateKnowledgeGraphDiagram)" as Plugin
component "KnowledgeGraphParser" as Parser
component "KnowledgeGraphRenderer" as Renderer
component "PlantumlService\n(επαλήθευση + απόδοση PNG)" as PS
collections "diagrams/knowledge-graph/\n(.puml + .png)" as Output

Développeur --> Graphify : graphify . --no-viz
Graphify --> KGJSON : extrait la structure\ndu code source
Développeur --> Plugin : ./gradlew generateKnowledgeGraphDiagram
Plugin --> Parser : parse(graph.json)
Parser --> Plugin : KnowledgeGraph\n(noeuds + arêtes + communautés)
Plugin --> Renderer : render(graph, filters)
Renderer --> Plugin : code PlantUML\ndéterministe
Plugin --> PS : validateSyntax + generateImage
PS --> Output : .puml + .png

note bottom of Plugin
Ντετερμινιστική ροή (Pipeline)
Καμία κλήση LLM
Αναπαραγώγιμο αποτέλεσμα
end note

@enduml

Δύο εντολές. Αυτό είναι όλο.

# Étape 1 : extraire le Knowledge Graph
graphify . --no-viz

# Étape 2 : générer les diagrammes PlantUML
./gradlew generateKnowledgeGraphDiagram

Το αποτέλεσμα; Αρχεία`.puml` et .png`σε`diagrams/knowledge-graph/, υποβάλλονται στο Git, πάντα ενημερωμένοι με τον κώδικα.

Βήμα 1: Εγκατάσταση του Graphify και εξαγωγή του Knowledge Graph

Εγκατάσταση

Το Graphify είναι ένα εργαλείο Python που αναλύει τη βάση κώδικά σας και κατασκευάζει ένα δομημένο γράφο γνώσης :

# Méthode recommandée
uv tool install graphifyy && graphify install --platform opencode

# Alternative avec pip
pip install graphifyy && graphify install --platform opencode

Ρυθμίστε τις εξαιρέσεις

Δημιουργήστε ένα αρχείο`.graphifyignore`στη ρίζα του έργου για να εξαιρέσει τα αρχεία που δεν ανήκουν στην επιχειρηματική λογική :

# Secrets — JAMAIS dans le graphe
*-context.yml
*.env

# Fichiers générés
build/
.gradle/

# Tests fonctionnels
src/functionalTest/

Εξαγωγή του Knowledge Graph

graphify . --no-viz

Το flag`--no-viz`παραλείπει την παραγωγή HTML (αχρειωστο σε έναν pipeline Gradle). Το αποτέλεσμα είναι ένα αρχείο.`graphify-out/graph.json`περιέχει :

  • κόμβοι: κλάσεις, συναρτήσεις, αρχεία — με τον τύπο τους και την κοινότητα

  • ακμές: σχέσεις μεταξύ κόμβων (EXTRACTED από τον κώδικα, INFERRED από το LLM)

  • κοινότητες: αυτοματοποιημένα ομαδοποιήματα συνδεδεμένων κόμβων

Παράδειγμα δομής`graph.json`
{
  "nodes": [
    {"id": "0", "label": "LlmService", "file_type": "code", "community": 0},
    {"id": "1", "label": "ApiKeyPool", "file_type": "code", "community": 0},
    {"id": "2", "label": "PlantumlService", "file_type": "code", "community": 1}
  ],
  "links": [
    {"source": "1", "target": "0", "relation": "uses", "confidence": "EXTRACTED", "weight": 0.9},
    {"source": "0", "target": "2", "relation": "calls", "confidence": "INFERRED", "weight": 0.7}
  ]
}

Ο πηγαίος κώδικας (.kt, .java) αναλύεται τοπικά από το tree-sitter,χωρίς κλήση LLM. Μόνο τα αρχεία τεκμηρίωσης (.adoc, .md) απαιτούν μια κλήση LLM για σεμαντική εξαγωγή. Έτσι`--update`Η μεταγλώττιση κώδικα Kotlin είναι σχεδόν άμεσα.

Βήμα 2 : Το πρόσθετο Gradle μετατρέπει το Knowledge Graph σε PlantUML

αρχιτεκτονική του pipeline

Το πρόσθετο`com.cheroliv.plantuml`ενσωματώνει μια εργασία`generateKnowledgeGraphDiagram`qui μετατρέπει`graph.json`σε διαγράμματα PlantUML με τρόποπλήρως δεтерμινinistικός:

@startuml
skinparam backgroundColor #FEFEFE

participant "Gradle" as G
participant "GenerateKnowledgeGraphDiagramTask" as Task
participant "KnowledgeGraphParser" as Parser
participant "KnowledgeGraphRenderer" as Renderer
participant "PlantumlService" as PS

collections "graphify-out/graph.json" as JSON

G -> Task : execute
Task -> JSON : read
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph\n(noeuds + arêtes + communautés)
Task -> Renderer : render(graph, filters)
Renderer --> Task : code PlantUML\n(déterministe)
Task -> PS : validateSyntax(plantumlCode)
alt syntaxe valide
    Task -> PS : generateImage → .png
else syntaxe invalide
    Task -> Task : save .puml avec warning
end

@enduml
@startuml
skinparam backgroundColor #FEFEFE

participant "Gradle" as G
participant "GenerateKnowledgeGraphDiagramTask" as Task
participant "KnowledgeGraphParser" as Parser
participant "KnowledgeGraphRenderer" as Renderer
participant "PlantumlService" as PS

collections "graphify-out/graph.json" as JSON

G -> Task : execute
Task -> JSON : read
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph\n(noeuds + arêtes + communautés)
Task -> Renderer : render(graph, filters)
Renderer --> Task : code PlantUML\n(déterministe)
Task -> PS : validateSyntax(plantumlCode)
alt syntaxe valide
    Task -> PS : generateImage → .png
else syntaxe invalide
    Task -> Task : save .puml avec warning
end

@enduml

τα εσωτερικά εξαρτήματα

συστατικό Ρόλος

KnowledgeGraphParser

αναλύστε`graph.json`— υποστηρίζει 3 μορφές : graphify εγγενής (nodes+links), legacy (communities), flat. Λύει τα αριθμητικά IDs σε ετικέτες.

KnowledgeGraphRenderer

Μετατρέπει determinιστίκα ένα`KnowledgeGraph`σε κώδικα PlantUML. Ομάδες ανά τύπο, κοινότητες σε πακέτα, αυτόματη λεγέντα.

GenerateKnowledgeGraphDiagramTask

Gradle εργασία που οργανώνει: parse → render → validate → PNG. Ρυθμίσιμη μέσω ιδιοτήτων Gradle.

kgmodels.kt

Μοντέλα δεδομένων:`KnowledgeGraph`, KnowledgeGraphNode, KnowledgeGraphEdge, KnowledgeGraphCommunity, EdgeType.

PlantumlService

Συντακτικός έλεγχος + αποδόμηση PNG (επαναχρησιμοποιούμενος από όλες τις εργασίες του προσθέτου).

Κανόνες απόδοσης

Ο renderer εφαρμόζει οπτικές καθορισμένες συνήθειες :

Τύπος άκμης Σημείωση PlantUML σημαινόμενο

Οι κοινότητες αποδίδονται ως πακέτα PlantUML με αυτόματη χρωματική παλέτα.

Βήμα 3 : Καθημερινή χρήση

Πλήρες διάγραμμα

# Générer le diagramme du Knowledge Graph complet
./gradlew generateKnowledgeGraphDiagram

Έξοδος:`diagrams/knowledge-graph/knowledge-graph-full.puml` + .png

Φιλτράρισμα ανά κοινότητα

# Une seule communauté
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.community=community_0

# Limiter le nombre de noeuds (lisibilité)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.community=community_0 \
  -Pplantuml.kg.maxNodes=15

Φιλτράριση κατά τύπο ακμής

# Uniquement les relations certaines (EXTRACTED)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.edgeTypes=EXTRACTED

# Relations certaines + inférées
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.edgeTypes=EXTRACTED,INFERRED

Φίλτρο ανά τύπο κόμβου και εμπιστοσύνης

# Uniquement les classes de code
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.nodeTypes=code

# Seuil de confiance minimum (pour les INFERRED)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.minConfidence=0.7

προσαρμοσμένος φάκελος εξόδου

./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.outputDir=docs/architecture

Πλήρης αναφορά ιδιοτήτων

Ιδιοκτησία έλλειμμα Περιγραφή

plantuml.kg.community

(όλες)

Φιλτράρετε τις κοινότητες ανάνομα (υποονοματογραφική αντιστοίχιση)

plantuml.kg.edgeTypes

(όλοι)

Τύποι ακμών χωρισμένοι με κόμματα :`EXTRACTED`, INFERRED, AMBIGUOUS

plantuml.kg.minConfidence

0.0

Ελάχιστο όριο εμπιστοσύνης για τις άκρες

plantuml.kg.maxNodes

(απεριόριστο)

Μέγιστος αριθμός κόμβων προς εμφάνιση

plantuml.kg.nodeTypes

(όλοι)

Τύποι κόμβων διαχωρισμένοι με κόμματα (π.χ.class, code)

plantuml.kg.outputDir

diagrams/knowledge-graph

Φάκελος εξόδου για τα αρχεία`.puml` et .png

Το πλήρες pipeline σε ένα workflow Gradle

@startuml
skinparam backgroundColor #FEFEFE
skinparam ActivityBackgroundColor #E8F4FD
skinparam ActivityDiamondBackgroundColor #FFF3CD
skinparam ActivityBorderColor #2C3E50

start

partition "ΕΞΑΓΩΓΗ" {
    :graphify . --no-viz;
    note right: Ανάλυσε τον πηγαίο κώδικα\ntree-sitter (τοπικά, χωρίς LLM)

    :graphify-out/graph.json;
    note right: Κόμβοι + ακμές\n+ κοινότητες
}

partition "ΠΑΡΑΓΩΓΗ" {
    :./gradlew generateKnowledgeGraphDiagram;
    note right: Ντετερμινιστική σωλήνωση (Pipeline)\nparse → render → validate → PNG

    if (Filtres actifs ?) then (Oui)
        :Appliquer filtres\n(community, edgeTypes,\nmaxNodes, nodeTypes);
    else (Non)
        :Diagramme complet;
    endif

    :diagrams/knowledge-graph/\nknowledge-graph-full.puml\nknowledge-graph-full.png;
}

partition "ΕΝΟΠΟΙΗΣΗ" {
    :git add diagrams/knowledge-graph/;
    :git commit;
    note right: Εκδοχόμενα διαγράμματα\nπάντα ενημερωμένα με τον κώδικα
}

stop

@enduml
@startuml
skinparam backgroundColor #FEFEFE
skinparam ActivityBackgroundColor #E8F4FD
skinparam ActivityDiamondBackgroundColor #FFF3CD
skinparam ActivityBorderColor #2C3E50

start

partition "Εξαγωγή" {
    :graphify . --no-viz;
    note right: Analyse le code source\ntree-sitter (local, pas de LLM)

    :graphify-out/graph.json;
    note right: Noeuds + arêtes\n+ communautés
}

partition "ΓΕΝΝΗΣΗ" {
    :./gradlew generateKnowledgeGraphDiagram;
    note right: Pipeline déterministe\nparse → render → validate → PNG

    if (Filtres actifs ?) then (Oui)
        :Appliquer filtres\n(community, edgeTypes,\nmaxNodes, nodeTypes);
    else (Non)
        :Diagramme complet;
    endif

    :diagrams/knowledge-graph/\nknowledge-graph-full.puml\nknowledge-graph-full.png;
}

partition "ΕΝΤΕΓΡΩΣΗ" {
    :git add diagrams/knowledge-graph/;
    :git commit;
    note right: Diagrammes versionnés\ntoujours à jour avec le code
}

stop

@enduml

Ενσωμάτωση στον κύκλο ανάπτυξης

@startuml
skinparam backgroundColor #FEFEFE

state "Ανάπτυξη" as dev
state "Εξαγωγή\ngraphify . --no-viz" as extract
state "Δημιουργία\n./gradlew generateKnowledgeGraphDiagram" as generate
state "Commit\nδιαγράμματα με έλεγχο εκδόσεων" as commit

[*] --> dev
dev --> extract : Code modifié
extract --> generate : graph.json à jour
generate --> commit : .puml + .png générés
commit --> dev : Diagrammes dans le repo

note right of extract
Σχεδόν στιγμιαία σε κώδικα Kotlin
(tree-sitter, όχι LLM)
end note

note right of generate
Ντετερμινιστικό
Χωρίς LLM
Αναπαραγώγιμο αποτέλεσμα
end note

@enduml
@startuml
skinparam backgroundColor #FEFEFE

state "Ανάπτυξη" as dev
state "Εξαγωγή\ngraphify . --no-viz" as extract
state "Δημιουργία\n./gradlew generateKnowledgeGraphDiagram" as generate
state "Commit\nδιαγράμματα με έκδοση" as commit

[*] --> dev
dev --> extract : Code modifié
extract --> generate : graph.json à jour
generate --> commit : .puml + .png générés
commit --> dev : Diagrammes dans le repo

note right of extract
  Quasi instantané sur du code Kotlin
  (tree-sitter, pas de LLM)
end note

note right of generate
  Déterministe
  Pas de LLM
  Résultat reproductible
end note

@enduml

πρακτική ενημέρωση

Όταν ο κώδικας αλλάζει, δεν ξαναχτίζουμε όλο τον γράφο από το μηδέν:

# Mise à jour incrémentale (fichiers modifiés uniquement)
graphify . --update

# Puis régénérer les diagrammes
./gradlew generateKnowledgeGraphDiagram

--update`εξάγει ξανά μόνο τα τροποποιημένα αρχεία (ανιχνευμένα με SHA256 σε`graphify-out/cache/). Στον κώδικα Kotlin, είναι σχεδόν άμεσα επειδή το tree-sitter λειτουργεί τοπικά χωρίς κλήση LLM.

Το dogfooding : το plugin τεκμηριώνει τον εαυτό του

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package "Κανονικός Pipeline\n(χρήστης → διαγράμματα)" as normal {
    [Fichier .prompt] as prompt
    [LlmService\n+ ApiKeyPool] as llm1
    [ProcessPlantumlPromptsTask] as task1
    [Diagramme PNG] as out1

    prompt --> task1
    task1 --> llm1
    llm1 --> out1
}

package "Pipeline Γράφου Γνώσης (Knowledge Graph)\n(ντετερμινιστικός, χωρίς LLM)" as kg {
    [graphify-out/graph.json] as kgjson
    [KnowledgeGraphParser] as parser
    [KnowledgeGraphRenderer] as renderer
    [PlantumlService] as ps
    [Diagramme PNG\n(documentation du plugin)] as out2

    kgjson --> parser
    parser --> renderer
    renderer --> ps
    ps --> out2
}

package "Pipeline Dogfooding\n(LLM → τεκμηρίωση πρόσθετου/plugin)" as dogfood {
    [GraphifyPromptAdapter] as gpa
    [Fichiers .prompt\nauto-générés] as auto_prompt
    [LlmService\n+ ApiKeyPool] as llm2
    [ProcessPlantumlPromptsTask] as task2
    [Diagramme PNG\n(documentation LLM)] as out3

    kgjson --> gpa
    gpa --> auto_prompt
    auto_prompt --> task2
    task2 --> llm2
    llm2 --> out3
}

note "Ίδιο LlmService, ίδιο ApiKeyPool,\nίδιο PlantumlService\n— ΜΗΔΕΝ διπλοεγγραφή" as N

@enduml
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package "Κανονικό pipeline\n(χρήστης → διαγράμματα)" as normal {
    [Fichier .prompt] as prompt
    [LlmService\n+ ApiKeyPool] as llm1
    [ProcessPlantumlPromptsTask] as task1
    [Diagramme PNG] as out1

    prompt --> task1
    task1 --> llm1
    llm1 --> out1
}

package "Pipeline Knowledge Graph\n(determinist, χωρίς LLM)" as kg {
    [graphify-out/graph.json] as kgjson
    [KnowledgeGraphParser] as parser
    [KnowledgeGraphRenderer] as renderer
    [PlantumlService] as ps
    [Diagramme PNG\n(documentation du plugin)] as out2

    kgjson --> parser
    parser --> renderer
    renderer --> ps
    ps --> out2
}

package "Pipeline Dogfooding\n(LLM → τεκμηρίωση του πρόσθετου)" as dogfood {
    [GraphifyPromptAdapter] as gpa
    [Fichiers .prompt\nauto-générés] as auto_prompt
    [LlmService\n+ ApiKeyPool] as llm2
    [ProcessPlantumlPromptsTask] as task2
    [Diagramme PNG\n(documentation LLM)] as out3

    kgjson --> gpa
    gpa --> auto_prompt
    auto_prompt --> task2
    task2 --> llm2
    llm2 --> out3
}

note "Το ίδιο LlmService, το ίδιο ApiKeyPool,\nΤο ίδιο PlantumlService\n— Μηδενική διπλοποίηση" as N

@enduml

Συνδεδεμένες εργασίες Gradle:

Εργασια LLM ? Περιγραφή

generateKnowledgeGraphDiagram

Όχι

Μετατρέψε`graph.json`στο PlantUML (δετερμινίστικός)

generateDiagramDocs

Ναι

Δημιούργησε μερικά`.prompt`από τον γράφο, τα επεξεργάζεται μέσω LLM (dogfooding)

# Documentation déterministe (rapide, pas de LLM)
./gradlew generateKnowledgeGraphDiagram

# Documentation LLM (plus riche, consomme des tokens)
./gradlew generateDiagramDocs

Γιατί είναι ορισμένο (και γιατί έχει σημασία)

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

rectangle "Ντετερμινιστική Διαδρομή (Pipeline)\n(generateKnowledgeGraphDiagram)" as det {
    [graph.json] as json
    [KnowledgeGraphParser] as parser
    [KnowledgeGraphRenderer] as renderer
    [PlantUML code] as puml

    json --> parser : parse
    parser --> renderer : KnowledgeGraph
    renderer --> puml : render (fonction pure)
}

rectangle "Διαδρομή (Pipeline) LLM\n(processPlantumlPrompts)" as llm {
    [.prompt] as prompt
    [LlmService] as llmSvc
    [ChatModel] as model
    [PlantUML code] as puml2

    prompt --> llmSvc
    llmSvc --> model : API call
    model --> puml2 : réponse non-déterministe
}

note bottom of det
Ίδια είσοδος → ίδια έξοδος
Χωρίς καθυστέρηση δικτύου
Χωρίς κόστος tokens
Επαναπαραγώγιμο σε CI
end note

note bottom of llm
Ίδια είσοδος → μεταβλητή έξοδος
Καθυστέρηση δικτύου (1-5s)
Κόστος σε tokens
Απαιτεί κλειδί API
end note

@enduml
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

rectangle "Pipeline deterministiko\n(generateKnowledgeGraphDiagram)" as det {
    [graph.json] as json
    [KnowledgeGraphParser] as parser
    [KnowledgeGraphRenderer] as renderer
    [PlantUML code] as puml

    json --> parser : parse
    parser --> renderer : KnowledgeGraph
    renderer --> puml : render (fonction pure)
}

rectangle "Σωλήνας ΜΓΜ\n(επεξεργασίαPlantumlπροτάσεις)" as llm {
    [.prompt] as prompt
    [LlmService] as llmSvc
    [ChatModel] as model
    [PlantUML code] as puml2

    prompt --> llmSvc
    llmSvc --> model : API call
    model --> puml2 : réponse non-déterministe
}

note bottom of det
  Même entrée → même sortie
  Pas de latence réseau
  Pas de coût en tokens
  Reproductible en CI
end note

note bottom of llm
  Même entrée → sortie variable
  Latence réseau (1-5s)
  Coût en tokens
  Nécessite une clave API
end note

@enduml

Ταυτοπρακτικά οφέλη :

πλεονέκτημα επίπτωση

αναπαραγωγιμότητα

ακόμη`graph.json`→ ίδιο διάγραμμα. Ακριβώς. Κάθε φορά.

μηδενικό κόστος

Δεν υπάρχει κλήση LLM = δεν υπάρχουν tokens = δεν υπάρχει τιμολόγιο API.

μηδενική καθυστέρηση

Η ανάλυση + απόδοση παίρνει ~100ms, όχι 1-5 δευτερόλεπτα.

Συμβατό CI

Δεν απαιτείται κλειδί API. Δεν υπάρχει τεστ ακαμάτως λόγω μεταβλητής απάντησης LLM.

υποverseible

Le .puml`γεννημένο είναι μερικό κείμενο. Μπορούμε το`diff, ο αναθεωρητής στη PR, να το βάλουμε υπό έλεγχο έκδοσης στο Git.

διαγράμματα του pipeline του εαυτού

@startuml
skinparam backgroundColor #FEFEFE

participant "Προγραμματιστής" as Dev
participant "Gradle" as G
participant "GenerateKnowledgeGraphDiagramTask" as Task
participant "KnowledgeGraphParser" as Parser
participant "KnowledgeGraphRenderer" as Renderer
participant "PlantumlService" as PS
collections "graphify-out/graph.json" as JSON
collections "diagrams/knowledge-graph/" as Out

Dev -> G : ./gradlew generateKnowledgeGraphDiagram
G -> Task : execute
Task -> JSON : read
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph

alt filtres actifs
    Task -> Task : appliquer filtres\n(community, edgeTypes, maxNodes…)
end

Task -> Renderer : render(graph, filters)
Renderer --> Task : code PlantUML

Task -> PS : validateSyntax()
alt valide
    Task -> PS : generateImage()
    PS --> Out : .puml + .png
else invalide
    Task -> Out : .puml (avec warning)
end

@enduml
@startuml
skinparam backgroundColor #FEFEFE

participant "Προγραμματιστής" as Dev
participant "Gradle" as G
participant "GenerateKnowledgeGraphDiagramTask" as Task
participant "KnowledgeGraphParser" as Parser
participant "KnowledgeGraphRenderer" as Renderer
participant "PlantumlService" as PS
collections "graphify-out/graph.json" as JSON
collections "diagrams/knowledge-graph/" as Out

Dev -> G : ./gradlew generateKnowledgeGraphDiagram
G -> Task : execute
Task -> JSON : read
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph

alt filtres actifs
    Task -> Task : appliquer filtres\n(community, edgeTypes, maxNodes…)
end

Task -> Renderer : render(graph, filters)
Renderer --> Task : code PlantUML

Task -> PS : validateSyntax()
alt valide
    Task -> PS : generateImage()
    PS --> Out : .puml + .png
else invalide
    Task -> Out : .puml (avec warning)
end

@enduml

Ενσωμάτωση στην διαχείριση του έργου

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package "EAGER\n(πάντα φορτωμένο)" as eager {
    [PROMPT_REPRISE.adoc\n(contexte session)] as pr
    [INDEX.adoc\n(vue d'ensemble)] as idx
    [GRAPH_REPORT.adoc\n(~50 lignes)] as gr
}

package "LAZY — Στρατηγική\n(κατόπιν permintaan)" as lazy_strat {
    [Méthodologies] as meth
    [Archives sessions] as sessions
}

package "LAZY — Graphify\n(στοχευμένα ερωτήματα)" as lazy_graph {
    [graph.json] as gj
    [Queries\n(query/path/explain)] as queries
}

package "Pipeline PlantUML\n(αυτόματα παραγόμενο)" as puml {
    [generateKnowledgeGraphDiagram] as kgTask
    [generateDiagramDocs] as ddTask
    [Diagrammes PNG] as diagrams
}

Agent --> eager : Lit en début de session
Agent ..> lazy_strat : Charge si type détecté
Agent ..> lazy_graph : Query si besoin structurel
kgTask --> diagrams : Déterministe
ddTask --> diagrams : Via LLM

note right of gr
Σύνοψη του Knowledge Graph
God nodes + κοινότητες
Αντικαθιστά το ECOSYSTEM_OVERVIEW
(225 γραμμές → 50 γραμμές)
end note

@enduml
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package "EAGER\n(πάντα φορτισμένο)" as eager {
    [PROMPT_REPRISE.adoc\n(contexte session)] as pr
    [INDEX.adoc\n(vue d'ensemble)] as idx
    [GRAPH_REPORT.adoc\n(~50 lignes)] as gr
}

package "LAZY — Στρατηγική\n(επί ζήτησης)" as lazy_strat {
    [Méthodologies] as meth
    [Archives sessions] as sessions
}

package "LAZY — Graphify\n(ερωτήματα στόχευσης)" as lazy_graph {
    [graph.json] as gj
    [Queries\n(query/path/explain)] as queries
}

package "Pipeline PlantUML\n(αυτό-παραγμένο)" as puml {
    [generateKnowledgeGraphDiagram] as kgTask
    [generateDiagramDocs] as ddTask
    [Diagrammes PNG] as diagrams
}

Agent --> eager : Lit en début de session
Agent ..> lazy_strat : Charge si type détecté
Agent ..> lazy_graph : Query si besoin structurel
kgTask --> diagrams : Déterministe
ddTask --> diagrams : Via LLM

note right of gr
  Condensé du Knowledge Graph
  God nodes + communautés
  Remplace ECOSYSTEM_OVERVIEW
  (225 lignes → 50 lignes)
end note

@enduml

Ο γάμος των δύο συστημάτων είναι συμπληρωματικός:

  • Η στρατηγική διαχειρίζεται το πότε και το πώς— διακυβέρνηση, ροή εργασίας, αρχειοθέτηση

  • Το Graphify διαχειρίζεται το ΤΙ και το ΠΟΥ— δομή κώδικα, σχέσεις, στοχευμένες ερωτήσεις

_ Η στρατηγική συνεδρίας διαχειρίζεται τοόταν et le πώς(κυβέρνηση, ροή εργασίας, όρια), Graphify διαχειρίζεται τοτι et le που(δομή του κώδικα, σχέσεις, στόχευμένες ερωτήσεις). Η διαδικασία PlantUML διαχειρίζεται τοΜΕ ΤΙ(διαγράμματα deterministika, με έκδοση, πάντα ενημερωμένα). _

Ρύθμιση: λίστα ἔλεγχου 5 λεπτών

(No output, as no French text was provided for translation) Βήμα Παραγγελία

1

Εγκατάσταση Graphify

uv tool install graphifyy

2

Ρυθμίστε τις εξαιρέσεις

Δημιουργώ`.graphifyignore`

3

Εξαγάγετε το Knowledge Graph

graphify . --no-viz

4

Δημιουργήστε τα διαγράμματα

./gradlew generateKnowledgeGraphDiagram

5

Καταχωρήστε τα αποτελέσματα

git add diagrams/knowledge-graph/

# Script complet en 5 commandes
uv tool install graphifyy
cat > .graphifyignore << 'EOF'
*-context.yml
*.env
build/
.gradle/
EOF
graphify . --no-viz
./gradlew generateKnowledgeGraphDiagram
git add graphify-out/GRAPH_REPORT.adoc graphify-out/graph.json diagrams/knowledge-graph/

Παγίδες και μειώσεις

πάγος Περιγραφή Μείωση

Γράφημα πολύ πυκνό

Ένα μεγάλο έργο παράγει εκατοντάδες μη αναγνώσιους κόμβους

Χρησιμοποιεί`-Pplantuml.kg.maxNodes=30`και φιλτράρετε κατά κοινότητα

Υπερογκές εξαιρέσεις

Παρα πολλά αρχεία στον`.graphifyignore`μειώνει την τιμή του γράφου

Ξεκινήστε αποκλείοντας μόνο τα credentials και το build

Κατεύθυνση των βελών

Οι άκρες INFERRED μπορούν να έχουν αβσασή κατεύθυνση

Φιλτράρετε κατά`-Pplantuml.kg.edgeTypes=EXTRACTED`για τις βεβαίες σχέσεις μόνο

παλαιός γράφος

Ο κώδικας αλλάζει αλλά ο γράφος δεν επαναχτ=ΐ)ζ=stratos

Χρησιμοποιήστε`graphify . --update`δια τακτικά ή το git hook`graphify hook install`

Ενημερωμένο κόστος

Οι εποχετικές ενημερώσεις είναι σχεδόν δωρεάν (tree-sitter local)

Μόνο τα έγράφα (.adoc) καταναλώνουν tokens LLM

@startuml
skinparam backgroundColor #FEFEFE

rectangle "ΠΡΙΝ" as avant {
    card "Διαγράμματα σχεδιασμένα με το χέρι\nΠάντα ξεπερασμένα\nΚανείς δεν τα ενημερώνει" as av1 #FDEDEC
}

rectangle "ΜΕΤΑ" as apres {
    card "Αυτόματα δημιουργημένα διαγράμματα\nΠάντα ενημερωμένα με τον κώδικα\nΜε έλεγχο εκδόσεων στο Git\nΝτετερμινιστικά και αναπαραγώγιμα" as ap1 #E8F8E8
}

avant --> apres : graphify . --no-viz\n+ ./gradlew generateKnowledgeGraphDiagram

@enduml
@startuml
skinparam backgroundColor #FEFEFE

rectangle "πριν" as avant {
    card "χεριγραφημένα διαγράμματα\nπάντα παρωχημένα\nΚανείς δεν τα ενημερώνει" as av1 #FDEDEC
}

rectangle "ΜΕΤΑ" as apres {
    card "Αυτοματοποιημένα διαγράμματα\nΠάντα ενημερωμένο με τον κώδικα\nΈκδοση στο Git\nΔетерμοντιστικά και αναπαραγώγιμα" as ap1 #E8F8E8
}

avant --> apres : graphify . --no-viz\n+ ./gradlew generateKnowledgeGraphDiagram

@enduml

Τα πραγματικά όφελη:

Κέρδος Λεπτομέρεια

Η τεκμηρίωση είναι πάντα ενημερωμένη

Τα διαγράμματα αντικατοπτρίζουν τον τρέχοντα κώδικα, όχι ένα χειροκίνητο στιγμιότυπο

Μηδενική προσπάθεια συντήρησης

Τα διαγράμματα ανακτιούνται σε κάθε build

μείωση του τεχνικού χρέους

Δεν χρειάζεται πλέον να διατηρείτε τα διαγράμματα χειροκίνητα

Οπτικό πλαίσιο για τους νέους

Ένας νέος προγραμματιστής κατανοεί την αρχιτεκτονική βλέποντας τα διαγράμματα.

Fine-tuning πιθανό

Τα ζεύγη (υπογράφημα → διάγραμμα) είναι παραδείγματα εκπαίδευσης τεχνητής νοημοσύνης

αυτόματη επικύρωση

`PlantumlService.validateSyntax()`ελέγζει κάθε παραγόμενο διάγραμμα

Γρήγορη ενσωμάτωση

5 διαγράμματα = ολοκληρωμένη θέα της αρχιτεκτονικής

_ Οποιος έχει ένα _pourquoi μπορεί να αντέχει όλους τους comment. __

Το pourquoi : διαγράμματα πάντα ενημερωμένα. Το comment : δύο εντολές σε ένα pipeline Gradle.

Σύνδεσμοι

Σχετικά άρθρα