> Η μετάφραση παρέχεται για διευκόλυνση. Κανονιστικό είναι το αγγλικό πρωτότυπο. # Μηνύματα MUFP - μηχανική του πρωτοκόλλου και συνδέσεις **Προδιαγραφή του Μετα-Σύμπαντος** **Αναγνωριστικό εγγράφου:** MU-V2-FED-011 **Τίτλος:** Μηνύματα MUFP, μηχανή καταστάσεων και συνδέσεις **Κατηγορία εγγράφου:** κανονιστικό **Έκδοση:** 2.0 (προσχέδιο) **Κατάσταση:** προσχέδιο εργασίας **Κανονιστικές αναφορές:** [MUFP](../03-federation/MUFP.md), [Federation-Lifecycle](../03-federation/Federation-Lifecycle.md), [Federation-Contracts](../03-federation/Federation-Contracts.md), [Trust-Model](../03-federation/Trust-Model.md), [MMAS-Interchange](../02-architecture/MMAS-Interchange.md), RFC 2119, RFC 8259 **Πληροφοριακές αναφορές:** [Identity-Binding](../03-federation/Identity-Binding.md), [Consent-and-Disclosure](../03-federation/Consent-and-Disclosure.md), [Synchronization](../03-federation/Synchronization.md) **Πνευματικά δικαιώματα:** © Orkestron.AI **Άδεια:** Apache-2.0 --- # 1. Σκοπός Το [MUFP](../03-federation/MUFP.md) ορίζει *γιατί* και *με ποια σειρά* σχηματίζουν ομοσπονδία τα κυρίαρχα σύμπαντα. Το έγγραφο αυτό κάνει το MUFP **υλοποιήσιμο**: ορίζει τα συγκεκριμένα **μηνύματα**, τη **μηχανή καταστάσεων**, την **ταξινομία σφαλμάτων**, τη **διαπραγμάτευση εκδόσεων**, την **ανάκληση** και μία συγκεκριμένη **σύνδεση HTTP/JSON**. Ένας προγραμματιστής ΠΡΕΠΕΙ να μπορεί να υλοποιήσει ένα ελάχιστο, διαλειτουργικό σημείο πρόσβασης MUFP μόνο από το έγγραφο αυτό και το σχήμα των μηνυμάτων. --- # 2. Πεδίο εφαρμογής Το έγγραφο αυτό προδιαγράφει το πρωτόκολλο όπως ταξιδεύει στο καλώδιο για την κανονική ακολουθία ομοσπονδίας. Δεν επαναπροσδιορίζει τη *σημασιολογία* της εμπιστοσύνης, των συμβολαίων, της ταυτότητας ή της αποκάλυψης - αυτές παραμένουν στα δικά τους έγγραφα· εδώ γίνονται μηνύματα. Κάθε μήνυμα είναι στιγμιότυπο του **φακέλου MUFP** και επικυρώνεται έναντι του [`schemas/mufp-envelope.schema.json`](../schemas/mufp-envelope.schema.json). --- # 3. Επισκόπηση του πρωτοκόλλου Το πρωτόκολλο υλοποιεί την κανονική ακολουθία ομοσπονδίας του [MUFP §6](../03-federation/MUFP.md): ```text Discovery → Capability Negotiation → Trust Establishment → Semantic Contract → Schema Discovery → Projection Exchange → Synchronization → Continuous Federation ``` Η γνώση (μια προβολή) ανταλλάσσεται για πρώτη φορά μόνο στην **ανταλλαγή προβολών** - στο έκτο βήμα. Ό,τι προηγείται διαπραγματεύεται *νόημα, εμπιστοσύνη, κανόνες και σκοπό*. --- # 4. Ο φάκελος MUFP Κάθε μήνυμα - αίτημα, απάντηση ή σφάλμα - είναι ένας ενιαίος **φάκελος** JSON: ```json { "mufp": { "version": "1.0" }, "messageId": "urn:mu:msg:9f1c...", "inReplyTo": "urn:mu:msg:7a02...", "type": "Hello", "from": "urn:mu:universe:acme", "to": "urn:mu:universe:gov-tax", "federationId": "urn:mu:fed:acme-govtax-001", "sentAt": "2026-06-27T10:00:00Z", "body": { }, "signature": { "alg": "ed25519", "value": "base64..." } } ``` - Το `messageId` ΟΦΕΙΛΕΙ να είναι μοναδικό ανά αποστολέα· οι παραλήπτες ΟΦΕΙΛΟΥΝ να χειρίζονται ταυτοδύναμα την επαναπαράδοση του ίδιου `messageId`. - Το `inReplyTo` ΟΦΕΙΛΕΙ να υπάρχει σε κάθε απάντηση και ΟΦΕΙΛΕΙ να παραπέμπει στο αίτημα. - Το `federationId` ΟΦΕΙΛΕΙ να υπάρχει από τη στιγμή που έχει συντελεστεί η θεμελίωση. - Η `signature` είναι ΠΡΟΑΙΡΕΤΙΚΗ στην έκδοση αυτή και ορίζεται από το επερχόμενο μοντέλο ασφάλειας· όταν υπάρχει, είναι αποσπασμένη υπογραφή επί της [κανονικής μορφής](../02-architecture/MMAS-Interchange.md) του φακέλου με το πεδίο `signature` αφαιρεμένο. --- # 5. Μηχανή καταστάσεων Μια ομοσπονδία ανάμεσα σε δύο μέρη προχωρά μέσα από τις ακόλουθες καταστάσεις. Ο πίνακας δίνει, για κάθε κατάσταση, το μήνυμα που την προωθεί και την κατάσταση που προκύπτει. | Κατάσταση | Έναυσμα (αίτημα / απάντηση) | Επόμενη κατάσταση | |-------|------------------------------|-----------| | `INIT` | `Hello` → `HelloAck` | `DISCOVERED` | | `DISCOVERED` | `CapabilityOffer` → `CapabilityAccept` | `NEGOTIATED` | | `NEGOTIATED` | `TrustRequest` → `TrustResponse` (αποδεκτή) | `TRUSTED` | | `TRUSTED` | `ContractProposal` → `ContractAccept` | `CONTRACTED` | | `CONTRACTED` | `SchemaRequest` → `SchemaResponse` | `SCHEMA_SHARED` | | `SCHEMA_SHARED` | `ProjectionRequest` → `ProjectionResponse` | `ACTIVE` | | `ACTIVE` | `ProjectionRequest`, `SyncEvent`/`SyncAck`, `IdentityBindingProposal`/`Accept` | `ACTIVE` | | `ACTIVE` | `Suspend` | `SUSPENDED` | | `SUSPENDED` | `Resume` | `ACTIVE` | | *(οποιαδήποτε)* | `Terminate` | `TERMINATED` | | *(οποιαδήποτε)* | `Revoke` | υποβιβάζεται στην κατάσταση πριν από το ανακληθέν στοιχείο, ή σε `TERMINATED` | | *(οποιαδήποτε)* | `Error` | αμετάβλητη, εκτός αν το σφάλμα είναι μοιραίο (βλ. §7) | Το μέρος που απαντά ΟΦΕΙΛΕΙ να απορρίπτει κάθε μήνυμα που δεν είναι νόμιμο στην τρέχουσα κατάσταση, με `Error` κωδικού `MUFP-E-STATE` (βλ. §7). Το πρωτόκολλο ΔΕΝ ΠΡΕΠΕΙ να παρακάμπτει στάδια: για παράδειγμα, ένα `ProjectionRequest` που λαμβάνεται πριν από την `CONTRACTED` ΟΦΕΙΛΕΙ να απορρίπτεται. --- # 6. Κατάλογος μηνυμάτων Κάθε `type` μηνύματος φέρει ένα `body`. Απαριθμούνται τα υποχρεωτικά πεδία του σώματος· οι πλήρεις μορφές βρίσκονται στα `$defs` του σχήματος του φακέλου. | Στάδιο | Μήνυμα | Σώμα (βασικά πεδία) | |-------|---------|-------------------| | Ανακάλυψη | `Hello` | `supportedVersions` (εύρη MUC/MMAS/MUFP), `purpose` | | | `HelloAck` | `supportedVersions`, `capabilities` | | Δυνατότητες | `CapabilityOffer` | `muc`, `mmas`, `mufp` (επιλεγμένα), `federationProfile?`, `projectionProfiles?` | | | `CapabilityAccept` | `agreed` (επιλυμένες εκδόσεις/προφίλ), `callbackUrl?` | | Εμπιστοσύνη | `TrustRequest` | `evidence[]` (τεκμήρια εμπιστοσύνης), `requestedPurpose` | | | `TrustResponse` | `decision` (`accept`/`deny`), `trustVector` (ανά διάσταση), `reason?` | | Συμβόλαιο | `ContractProposal` | `contract` (ένα [συμβόλαιο ομοσπονδίας](../03-federation/Federation-Contracts.md) σε MUIF) | | | `ContractAccept` | `contractId`, `contractFingerprint` | | | `ContractReject` | `contractId`, `reason`, `counter?` | | Σχήμα | `SchemaRequest` | `namespaces[]` / `csns[]`, `knownFingerprints?` | | | `SchemaResponse` | `schemas[]` (MUIF), `fingerprints[]` | | Προβολή | `ProjectionRequest` | `subject` (ταυτότητα), `purpose`, `contractId`, `profile?` | | | `ProjectionResponse` | `projection` (προβολή MUIF), `contractId` | | Συγχρονισμός | `SyncEvent` | `event` ([γεγονός](../04-core-concepts/Event.md) MUIF), `streamId` | | | `SyncAck` | `streamId`, `upTo` (αναγνωριστικό γεγονότος) | | Ταυτότητα | `IdentityBindingProposal` | `binding` (κανονική ↔ τοπική), `evidence?` | | | `IdentityBindingAccept` | `bindingId` | | Κύκλος ζωής | `Suspend` / `Resume` / `Terminate` | `reason?`, `effectiveAt?` | | Ανάκληση | `Revoke` | `target` (`trust`/`contract`/`identityBinding`), `targetId`, `reason` | | Σφάλμα | `Error` | `code`, `requirement?`, `message`, `retriable` | Όλα τα φορτία MUIF (`contract`, `schemas`, `projection`, `event`, `binding`) ΟΦΕΙΛΟΥΝ να είναι έγκυρα κατά το [MMAS-Interchange](../02-architecture/MMAS-Interchange.md) και ΟΦΕΙΛΟΥΝ να φέρουν το σημασιολογικό αποτύπωμα που απαιτείται για την επαλήθευση. --- # 7. Ταξινομία σφαλμάτων Τα σφάλματα είναι φάκελοι `Error` σε επίπεδο πρωτοκόλλου (η απόκριση HTTP παραμένει `200`· βλ. §10). Καθένα έχει σταθερό `code`: | Κωδικός | Σημασία | Επαναλήψιμο | |------|---------|-----------| | `MUFP-E-VERSION-UNSUPPORTED` | Δεν υπάρχει κοινή έκδοση MUC/MMAS/MUFP | όχι | | `MUFP-E-CAPABILITY-MISMATCH` | Το απαιτούμενο προφίλ ή δυνατότητα δεν είναι διαθέσιμα | όχι | | `MUFP-E-TRUST-DENIED` | Δεν έχει θεμελιωθεί εμπιστοσύνη για τον ζητούμενο σκοπό | ίσως | | `MUFP-E-CONTRACT-REJECTED` | Το προτεινόμενο συμβόλαιο δεν είναι αποδεκτό | ίσως | | `MUFP-E-SCHEMA-UNAVAILABLE` | Το ζητούμενο σχήμα ή χώρος ονομάτων δεν εκτίθεται | όχι | | `MUFP-E-DISCLOSURE-DENIED` | Η προβολή απορρίφθηκε (σκοπός, συμβόλαιο, ελάχιστη γνώση) | όχι | | `MUFP-E-FINGERPRINT-MISMATCH` | Το αποτύπωμα ενός φορτίου δεν επαληθεύεται | όχι | | `MUFP-E-IDENTITY-UNRESOLVED` | Η ταυτότητα του υποκειμένου δεν είναι δεσμευμένη ή γνωστή | ίσως | | `MUFP-E-REVOKED` | Η εμπιστοσύνη, το συμβόλαιο ή η δέσμευση έχουν ανακληθεί | όχι | | `MUFP-E-STATE` | Μήνυμα μη νόμιμο στην τρέχουσα κατάσταση | όχι | | `MUFP-E-RATE-LIMITED` | Υπερβολικά πολλά αιτήματα | ναι | | `MUFP-E-INTERNAL` | Εσωτερική αστοχία του μέρους που απαντά | ναι | Το `MUFP-E-DISCLOSURE-DENIED` επιβάλλει τα `MUC-R21`, `MUC-R22`, `MUC-R23`· το `MUFP-E-FINGERPRINT-MISMATCH` επιβάλλει το `MUIF-R12`. Ένα `Error` ΜΠΟΡΕΙ να επικαλείται την απαίτηση `requirement` που επιβάλλει (ένα αναγνωριστικό από το ευρετήριο απαιτήσεων). --- # 8. Διαπραγμάτευση εκδόσεων Το `Hello` φέρει τα εύρη εκδόσεων που υποστηρίζει ο εκκινητής για MUC, MMAS και MUFP. Το μέρος που απαντά ΟΦΕΙΛΕΙ να επιλέξει, για καθένα, την υψηλότερη έκδοση που υποστηρίζει και το ίδιο, και να επιστρέψει το επιλυμένο σύνολο στο `HelloAck`/`CapabilityAccept`. Αν κάποιος απαιτούμενος άξονας δεν έχει κοινή έκδοση, το μέρος που απαντά ΟΦΕΙΛΕΙ να επιστρέψει `MUFP-E-VERSION-UNSUPPORTED` και η ομοσπονδία ΔΕΝ ΠΡΕΠΕΙ να προχωρήσει. --- # 9. Συμφωνία ταυτότητας και ανάκληση Μια [δέσμευση ταυτότητας](../03-federation/Identity-Binding.md) προτείνεται με `IdentityBindingProposal` και επιβεβαιώνεται με `IdentityBindingAccept`, παράγοντας μια εκδοσιοποιημένη, ιχνηλατήσιμη συμφωνία ταυτότητας. Οποιοδήποτε από τα μέρη ΜΠΟΡΕΙ αργότερα να στείλει `Revoke` με `target: "identityBinding"`. Μετά την ανάκληση, οι αναφορές στη δεσμευμένη ταυτότητα ΟΦΕΙΛΟΥΝ να αποτυγχάνουν με `MUFP-E-REVOKED` έως ότου συναφθεί νέα δέσμευση. Η εμπιστοσύνη και τα συμβόλαια ανακαλούνται με τον ίδιο τρόπο (`target: "trust"` / `"contract"`), υποβιβάζοντας ανάλογα τη μηχανή καταστάσεων. Η ανάκληση ΟΦΕΙΛΕΙ να καταγράφεται ως [γεγονός](../04-core-concepts/Event.md)· η ιστορία ΟΦΕΙΛΕΙ να διατηρείται (η δέσμευση δεν σβήνεται, τερματίζεται). --- # 10. Σύνδεση HTTP/JSON Αυτή είναι μία συγκεκριμένη σύνδεση, ΑΠΑΙΤΟΥΜΕΝΗ για τη διαλειτουργικότητα. Άλλες συνδέσεις (gRPC, μηνυματοδοσία) ΜΠΟΡΕΙ να οριστούν αργότερα. - **Σημείο πρόσβασης:** `POST {baseUrl}/mufp` - **Content-Type:** `application/mufp+json` - **Σώμα αιτήματος:** ακριβώς ένας φάκελος. - **Σώμα απόκρισης:** ακριβώς ένας φάκελος. Ένα `Error` *επιπέδου πρωτοκόλλου* επιστρέφεται με HTTP `200` (το σφάλμα είναι σημασιολογικό, όχι μεταφοράς). - **Οι κωδικοί κατάστασης HTTP** επιφυλάσσονται για αστοχίες μεταφοράς ή ταυτοποίησης: `400` κακοσχηματισμένος φάκελος, `401`/`403` ταυτοποίηση μεταφοράς, `429` όριο ρυθμού στη μεταφορά, `5xx` αστοχία διακομιστή. Οι εκβάσεις του πρωτοκόλλου ταξιδεύουν πάντοτε μέσα στον φάκελο. - **Συγχρονισμός:** αν το `CapabilityAccept` έδωσε `callbackUrl`, ο παραγωγός ΟΦΕΙΛΕΙ να παραδίδει τους φακέλους `SyncEvent` με `POST` σε αυτή τη διεύθυνση· διαφορετικά ο καταναλωτής ΜΠΟΡΕΙ να δημοσκοπεί στέλνοντας δικό του αίτημα `SyncEvent` με κενό `upTo`. Κάθε `SyncEvent` ΟΦΕΙΛΕΙ να επιβεβαιώνεται με `SyncAck`. - **Ταυτοδυναμία:** οι παραλήπτες ΟΦΕΙΛΟΥΝ να απαλείφουν διπλότυπα βάσει `messageId`. --- # 11. Επεξεργασμένο απόσπασμα (ενδεικτικό) Μια ελάχιστη επιτυχής ανταλλαγή (τα σώματα παραλείπονται). Η πλήρης, από άκρο σε άκρο ομοσπονδία δύο πραγματικών μετα-μοντέλων βρίσκεται στο [`examples/federation-handshake`](../examples/federation-handshake/). ```text acme → gov-tax : Hello (supportedVersions, purpose="tax-filing") gov-tax → acme : HelloAck (capabilities) acme → gov-tax : CapabilityOffer (muc=2.0, mmas=A4, mufp=1.0) gov-tax → acme : CapabilityAccept (agreed, callbackUrl) acme → gov-tax : TrustRequest (evidence) gov-tax → acme : TrustResponse (accept, trustVector) acme → gov-tax : ContractProposal (FederationContract MUIF) gov-tax → acme : ContractAccept (contractId, fingerprint) acme → gov-tax : SchemaRequest (namespaces=[person]) gov-tax → acme : SchemaResponse (schemas, fingerprints) acme → gov-tax : ProjectionRequest(subject=person:Person, purpose, contractId) gov-tax → acme : ProjectionResponse(projection) ← first data, step 6 acme → gov-tax : SyncAck (streamId, upTo) ``` --- # 12. Συμμόρφωση - ελάχιστο σημείο πρόσβασης Ένα **ελάχιστο σημείο πρόσβασης MUFP** (η βάση για το επίπεδο 1 του MUFP) ΟΦΕΙΛΕΙ: - να δέχεται και να εκπέμπει έγκυρους φακέλους μέσω της σύνδεσης HTTP/JSON· - να υλοποιεί τη μηχανή καταστάσεων της §5 και να απορρίπτει μηνύματα εκτός κατάστασης με `MUFP-E-STATE`· - να εκτελεί διαπραγμάτευση εκδόσεων (§8)· - να επαληθεύει το σημασιολογικό αποτύπωμα κάθε φορτίου MUIF (`MUIF-R12`), αποτυγχάνοντας με `MUFP-E-FINGERPRINT-MISMATCH`· - να επιβάλλει ότι καμία προβολή δεν επιστρέφεται χωρίς αποδεκτό συμβόλαιο και δηλωμένο σκοπό (`MUC-R21`, `MUC-R25`), αποτυγχάνοντας με `MUFP-E-DISCLOSURE-DENIED`. Τα ανώτερα επίπεδα MUFP προσθέτουν συγχρονισμό, δέσμευση ταυτότητας, χειρισμό συγκρούσεων και υπογεγραμμένους φακέλους. --- # 13. Ζητήματα ασφάλειας Η έκδοση αυτή ορίζει τη μηχανική του πρωτοκόλλου· το πλήρες μοντέλο απειλών και οι απαιτούμενες προστασίες (υπογραφή φακέλων, άμυνα έναντι επαναλήψεων, διάδοση ανακλήσεων, αποτροπή διαρροών κατά την αποκάλυψη) προδιαγράφονται από το επερχόμενο **μοντέλο ασφάλειας** (οδικός χάρτης WS5) και οριοθετούνται από το [Trust-Model](../03-federation/Trust-Model.md). Έως τότε, οι υλοποιήσεις ΠΡΕΠΕΙ να εκτελούν τη σύνδεση πάνω από ταυτοποιημένο TLS και ΠΡΕΠΕΙ να θεωρούν τους ανυπόγραφους φακέλους μη επαληθευμένους. --- # 14. Αρχιτεκτονικές αναλλοίωτες - Η γνώση (μια προβολή) ΔΕΝ ΠΡΕΠΕΙ να ανταλλάσσεται πριν από την κατάσταση `CONTRACTED` και έναν δηλωμένο σκοπό. - Το πρωτόκολλο ΔΕΝ ΠΡΕΠΕΙ να παρακάμπτει στάδια της κανονικής ακολουθίας. - Κάθε φορτίο MUIF ΟΦΕΙΛΕΙ να επαληθεύεται ως προς το αποτύπωμά του κατά τη λήψη. - Η ανάκληση ΟΦΕΙΛΕΙ να είναι δυνατή ανά πάσα στιγμή και ΟΦΕΙΛΕΙ να καταγράφεται ως ιστορία. - Οι εκβάσεις του πρωτοκόλλου ΟΦΕΙΛΟΥΝ να ταξιδεύουν στον φάκελο, όχι στους κωδικούς κατάστασης της μεταφοράς. --- # Μελλοντικές κατευθύνσεις - **Υπογεγραμμένοι φάκελοι** και προστασία από επαναλήψεις (μαζί με το μοντέλο ασφάλειας). - Πρόσθετες **συνδέσεις** (gRPC, ουρές μηνυμάτων, libp2p). - Ένα **πλαίσιο δοκιμών συμμόρφωσης** που οδηγεί ένα σημείο πρόσβασης μέσα από τη μηχανή καταστάσεων (τροφοδοτεί το Semantic Test Kit, οδικός χάρτης WS6). - **Μητρώο δυνατοτήτων και προφίλ**, ώστε οι δυνατότητες να ανακαλύπτονται και να μην είναι σταθερά γραμμένες στον κώδικα. --- # Τελική δήλωση > Πρωτόκολλο είναι μια υπόσχεση που έγινε ακριβής. Τα μηνύματα MUFP μετατρέπουν τη > "σημασιολογική διπλωματία" σε φακέλους, καταστάσεις και σφάλματα - ώστε δύο κυρίαρχα > σύμπαντα να μπορούν να χτιστούν από διαφορετικές ομάδες, σε διαφορετικές γλώσσες, και > παρ' όλα αυτά να καταλαβαίνονται στο καλώδιο.