addrbookFor publishers
← The evidence ledger

Evidence row 568897

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 17d292b2-5108-401b-949e-65f658da4e8a
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
c229b0d3bb1fff6fe733ecb83ae7ea3d1cbae5107b0a20c1cb6b9d4b60dd5d9b
Leaf
0xeba9ffc5507f75eace06d4507172a8c0f65bff84983b516b05296cf399a8da58

What was observed

{
  "count": 20,
  "tools": [
    {
      "description": "Une matrice lisible par machine des producteurs Lens réellement installés, des contrôles replay/projection, des profils, des limites et des tests de contrat qui les confirment. declared_only désigne un schéma sans témoin exécutable.",
      "inputSchema": {
        "additionalProperties": false,
        "type": "object"
      },
      "name": "law_answer_capabilities"
    },
    {
      "description": "Quelle est la solidité d'une conclusion : la carte du litige selon le profil d'argumentation §274 (DECISION-0039). La réponse tombe en quatre classes : SKEPTICALLY_ACCEPTED — la conclusion est invulnérable (elle survit dans l'extension grounded) ; CREDULOUSLY_ACCEPTED — seulement défendable (il existe une position pour et une contre) ; REJECTED — elle ne survit nulle part ; NO_ARGUMENT — il n'y a aucun argument. Elle construit TOUS les arguments à partir des faits et des règles de l'acte (y compris les chaînes qui n'ont pas tiré dans l'inférence ordinaire), les attaques rebut/undermine/undercut et les défaites par priorité. Les noms de prédicats viennent de law_packages. Sur les grands actes, un refus par plafond est possible — restreignez les faits ou augmentez limits.maxArguments.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "args": {
            "description": "les arguments du prédicat",
            "type": "array"
          },
          "facts": {
            "description": "faits de l'affaire : [{predicate, args, negated?, provenance?}]. provenance est le même objet que pour law_ask : origin, document, citation, extractor. confidence est lu par l'EvidencePolicy du paquet, pas par le moteur",
            "type": "array"
          },
          "legalTime": {
            "description": "la date du droit (YYYY-MM-DD)",
            "type": "string"
          },
          "limits": {
            "description": "les plafonds du profil §274 : maxArguments (64), maxExtensions (8), maxUndecided (16)",
            "type": "object"
          },
          "package": {
            "description": "restreindre la question à un paquet de droit",
            "type": "string"
          },
          "predicate": {
            "description": "la conclusion dont on mesure la solidité",
            "type": "string"
          }
        },
        "required": [
          "predicate"
        ],
        "type": "object"
      },
      "name": "law_argue"
    },
    {
      "description": "Poser une question au droit formalisé. Quand la réponse est « non établi », elle porte whyNot — le rapport why_not §185 du moteur : les règles candidates et l'état de chaque conjonct (satisfait / non satisfait / indéterminé) ; les faits manquants y sont visibles et n'ont pas à être inventés. AVANT LE PREMIER appel, obtenez les noms de prédicats par law_search (une question dans vos propres mots → adresses) ou law_packages (les signatures d'un acte connu) — un nom inventé sera rejeté. Si l'outil a renvoyé une erreur ou « non établi », C'EST LA RÉPONSE : transmettez-la à l'utilisateur et ne la substituez pas par des connaissances générales sur le droit d'un autre pays. Mais « je n'ai trouvé aucun acte convenable » N'EST PAS une réponse tant que law_search n'a pas été interrogé : le silence du catalogue est une propriété de la recherche par titre, non une conclusion sur le corpus. kind='truth' — si un fait est établi (la réponse suit le §62 : établi / réfuté / contradiction / non établi) ; kind='collect' — énumérer les enregistrements ; kind='deadline' — calculer un délai sur le calendrier officiel ; kind='positions' — quelles OBLIGATIONS sont nées des faits et quels sont leurs statuts (active / fulfilled / violated, §134–§138) ; kind='why_not' — le rapport why_not §185 sur le même but, quel que soit le statut de la réponse. La réponse porte les règles appliquées, les avertissements et la provenance avec empreintes ; truth/collect portent aussi un bloc signature (types des paramètres, clôture des types, constantes ; DECISION-0139) pour la présentation. Le serveur n'invente pas : là où une norme n'est pas formalisée, la réponse est « non établi » ou une erreur.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "after": {
            "description": "deadline : la date de l'événement",
            "type": "string"
          },
          "afterTime": {
            "description": "deadline : l'heure de dépôt",
            "type": "string"
          },
          "args": {
            "description": "les arguments du prédicat dans l'ordre de sa signature ; avec kind='collect', exactement l'un d'eux est la variable de sélection ?name (par exemple ['urn:x:water', 'urn:x:mix', '?value']), les autres sont des valeurs. Les valeurs suivent le type du paramètre : une entité — 'urn:…' ou un nom court ; Date — 'YYYY-MM-DD' ; Money — '<nombre> <devise>' ('43250 KZT') ; Quantity — '<nombre> <unité>' avec l'unité exactement telle que le paquet l'écrit ('25 calendar_year', '30 meter' ; law_packages montre les unités des constantes, les unités ne sont jamais converties — §49) ; une constante du paquet — son nom",
            "type": "array"
          },
          "calc": {
            "description": "kind='calc' : un arbre {op,left,right}, op ∈ add|sub|mul|div|le|lt|ge|gt|eq|ne (les synonymes divide/multiply/plus/minus et les signes sont acceptés) ; les feuilles sont 5 | '3932 KZT' | '2 mrp' | {lookup: 'mrp', args: [2026]} — une valeur légale du corpus ; les agrégats §59 sont {aggregate: 'sum', element: '?v', over: [{predicate, args with '?variables'}]} sur les faits donnés dans facts"
          },
          "cutoff": {
            "description": "deadline : l'heure de clôture des opérations",
            "type": "string"
          },
          "days": {
            "description": "deadline : la durée de la période",
            "type": "integer"
          },
          "deadlinePolicy": {
            "description": "la politique §86 de décompte des délais exprimés en jours : {start_count: 'same_day'|'next_day', include_end: true|false, roll: 'no_roll'|'next_working_day'|'previous_working_day'[, month_end: 'last_day_of_month' — pour les mois et les années seulement]}. Sans elle, une norme portant un délai répond par un avertissement DEADLINE_POLICY_* — la politique est fixée par le droit de la procédure et le serveur n'en suppose jamais une. L'instantané du calendrier officiel §85 pour les jours ouvrables est fourni par le serveur lui-même dès qu'un acte les compte.",
            "type": "object"
          },
          "evidence": {
            "description": "documents de l'affaire, section 74, nœuds evidence_item. Un document est référencé depuis provenance.evidence de plusieurs faits. payload.confidence est une donnée pour l'EvidencePolicy ; le moteur n'évalue pas le nombre",
            "type": "array"
          },
          "evidencePolicy": {
            "description": "StableId d'un nœud evidence_policy, section 78.2. Sans lui, les appels précédents gardent leur comportement. Le seuil de confidence est une règle de cette politique, pas un argument de l'appel",
            "type": "string"
          },
          "facts": {
            "description": "faits de l'affaire : [{predicate, args, negated?, package?, provenance?, judgment?}]. package résout un nom court ambigu. provenance est {origin?, evidence?: StableId, span?: {page?, quote?, offset?}, extractor?: {name, version?, confidence?}, observedAt?, recordedAt?}. origin vaut case_input par défaut (section 73 ; l'extraction n'ajoute pas de valeur d'origin) : l'extracteur est abaissé en arête was_generated_by, le document en was_derived_from. confidence est une chaîne décimale ; le seuil est lu par l'EvidencePolicy du paquet (field confidence), pas par le moteur. Un fait avec extracteur et sans evidence est accepté comme case_input et produit l'avertissement FACT_WITHOUT_EVIDENCE. Un appel sans provenance ne change pas. args suit la même notation que les args de la question",
            "type": "array"
          },
          "focused": {
            "description": "kind='truth' : poser la question en focused_truth (§181.3) — la même réponse que le truth complet, mais la preuve et les avertissements ne couvrent que le cône de la question ; la réponse porte evaluationKind et les empreintes de la coupe (focus) ; dans focus, le cône est réduit à coneHash et au nombre de prédicats, le manifeste complet du cône vient dans evaluation.focusManifest avec proof=true. Une coupe n'est pas un document d'audit : law_prepare_answer ne l'accepte pas pour publication",
            "type": "boolean"
          },
          "kind": {
            "description": "le type de question (truth par défaut)",
            "enum": [
              "truth",
              "collect",
              "deadline",
              "calc",
              "positions",
              "why_not"
            ]
          },
          "legalTime": {
            "description": "la date du droit (YYYY-MM-DD)",
            "type": "string"
          },
          "package": {
            "description": "restreindre la question à un paquet de droit",
            "type": "string"
          },
          "predicate": {
            "description": "ce qui est demandé, p. ex. 'duty_amount'",
            "type": "string"
          },
          "proof": {
            "description": "renvoyer dans la réponse le champ evaluation avec le graphe de preuve — une entrée toute prête pour law_explain (kind truth|collect ; par défaut un résumé sans le graphe)",
            "type": "boolean"
          },
          "responseMode": {
            "description": "full (défaut) — la réponse complète. compact est accepté par compatibilité : ce serveur ne construit pas de réponse courte et renvoie la même réponse complète dans les deux modes ; il n'y a ni référence fullAnswer ni instantané enregistré de la réponse.",
            "enum": [
              "full",
              "compact"
            ]
          },
          "selectedInterpretations": {
            "description": "lectures nommées §152 ; pour un groupe exactly_one, choisir exactement un StableId parmi law_packages/law_rules",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "supportEdges": {
            "description": "appuis, section 75, nœuds support_edge : from est l'id du document, to est le littéral du fait, relation est supports ou refutes. L'admission est décidée par l'EvidencePolicy du paquet, pas par l'hôte",
            "type": "array"
          },
          "unit": {
            "enum": [
              "calendar_day",
              "business_day"
            ]
          },
          "version": {
            "description": "la version exacte du paquet figée par le client (open('name@version')) ; si elle diffère de la composition du profil, l'hôte refuse au lieu de répondre avec une autre version",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "law_ask"
    },
    {
      "description": "Exécuter un producteur enregistré et obtenir producerControl/0.2 pour une préparation ultérieure vérifiable d'une Lens. Le producteur n'est choisi que dans le registre livré.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "producer": {
            "type": "string"
          },
          "request": {
            "type": "object"
          }
        },
        "required": [
          "producer",
          "request"
        ],
        "type": "object"
      },
      "name": "law_capture_answer"
    },
    {
      "description": "L'opération ask §168.4 (DECISION-0165, DECISION-0399) : exécuter une affaire enregistrée d'un paquet-affaire sur ses dépendances épinglées et renvoyer le document d'évaluation canonique avec une preuve et un manifeste. La question est du JSON selon query.schema.json (query), une chaîne evaluate (evaluate + queryId), un queryId enregistré sans query, ou card + args. Un refus de préparation est une erreur avec un code LDC-*, jamais une réponse vide.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "args": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "les paramètres de la carte : nom → expression textuelle du langage",
            "type": "object"
          },
          "card": {
            "description": "l'id d'une carte d'un catalogue installé DECISION-0190",
            "type": "string"
          },
          "case": {
            "description": "le nom de la déclaration d'affaire dans [[cases]] ; facultatif s'il n'y a qu'une affaire",
            "type": "string"
          },
          "evaluate": {
            "description": "la chaîne `evaluate <expression>;` §267.2 ; exige queryId",
            "type": "string"
          },
          "package": {
            "description": "le chemin du paquet-affaire (le répertoire qui contient law.toml) depuis la racine du dépôt",
            "type": "string"
          },
          "query": {
            "description": "la question en JSON selon query.schema.json ; queryId est un URN dans l'espace de noms du paquet, ou un nom court donné dans queryId",
            "type": "object"
          },
          "queryId": {
            "description": "sans query/evaluate — le choix d'un queries/*.json enregistré par nom court ou URN complet ; avec evaluate — l'id de la question exécutée",
            "type": "string"
          }
        },
        "required": [
          "package"
        ],
        "type": "object"
      },
      "name": "law_case_ask"
    },
    {
      "description": "L'axe des éditions (O-2) : ce qui a changé dans un acte entre deux dates du droit — l'état des éditions, le datage des normes et le diff sémantique §215 entre les projections D1. Le verdict NOT_DATED signifie « il n'y avait rien pour le dater », non « rien n'a changé ». L'issue d'une question particulière à une date vient de law_ask avec legalTime.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "dateA": {
            "description": "la date du droit « avant » (YYYY-MM-DD)",
            "type": "string"
          },
          "dateB": {
            "description": "la date du droit « après » (YYYY-MM-DD)",
            "type": "string"
          },
          "package": {
            "description": "l'acte du corpus",
            "type": "string"
          }
        },
        "required": [
          "package",
          "dateA",
          "dateB"
        ],
        "type": "object"
      },
      "name": "law_editions"
    },
    {
      "description": "Déplier la preuve d'une réponse law_ask en une chaîne « règle ← prémisses → conclusion ». L'entrée compacte : question (les arguments law_ask d'origine, truth/collect), resultHash et codeHash issus de la provenance de la réponse. Le serveur répète le calcul et compare les empreintes ; si quelque chose a changé, il refuse explicitement. Autrement, passer l'évaluation de law_ask(proof=true). answerResource=fullAnswer.uri explique un instantané compact stocké sans recalcul et sans que le client charge des pages ; par défaut seulement la chaîne proofRef. nodeId sélectionne un nœud et toutes ses prémisses (jusqu'à 24 Ko, sinon un refus explicite). proofHash se rapporte au graphe entier ; scope marque la partie sélectionnée.",
      "inputSchema": {
        "additionalProperties": false,
        "oneOf": [
          {
            "not": {
              "anyOf": [
                {
                  "required": [
                    "question"
                  ]
                },
                {
                  "required": [
                    "answerResource"
                  ]
                }
              ]
            },
            "required": [
              "evaluation"
            ]
          },
          {
            "not": {
              "anyOf": [
                {
                  "required": [
                    "evaluation"
                  ]
                },
                {
                  "required": [
                    "answerResource"
                  ]
                }
              ]
            },
            "required": [
              "question",
              "resultHash",
              "codeHash"
            ]
          },
          {
            "not": {
              "anyOf": [
                {
                  "required": [
                    "evaluation"
                  ]
                },
                {
                  "required": [
                    "question"
                  ]
                },
                {
                  "required": [
                    "resultHash"
                  ]
                },
                {
                  "required": [
                    "codeHash"
                  ]
                }
              ]
            },
            "required": [
              "answerResource"
            ]
          }
        ],
        "properties": {
          "answerResource": {
            "description": "le fullAnswer.uri d'une réponse stockée prise avec proof=true",
            "type": "string"
          },
          "codeHash": {
            "type": "string"
          },
          "evaluation": {
            "description": "le document d'évaluation issu de law_ask",
            "type": "object"
          },
          "nodeId": {
            "minLength": 1,
            "type": "string"
          },
          "question": {
            "description": "les arguments law_ask d'origine",
            "type": "object"
          },
          "resultHash": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "law_explain"
    },
    {
      "description": "Le catalogue du droit formalisé : actes, prédicats avec signatures, frontières de couverture. C'est d'ici que viennent les NOMS des prédicats — ils ne doivent jamais être inventés. Mais ne commencez PAS par le catalogue pour trouver le bon acte : l'aperçu est vaste, et le titre d'un acte coïncide rarement avec les mots d'une question (« Newton's laws of motion » ne contient pas le mot « physics »). Une question dans vos propres mots va d'abord à law_search, qui renvoie des adresses ; le catalogue sert à la signature exacte de ce que vous avez trouvé. Sans arguments — l'aperçu : une ligne par acte (clé, titre, ordre juridique, compteurs de règles, faits, signatures, normes, constantes) ; un acte entier — package=\"kz-gpk\" ; une recherche sur les signatures, étiquettes et constantes de tous les actes — query=\"substring\". Les trois modes sont PAGINÉS : limit et offset, le reste nommé dans le texte (`showing a–b of N; k more`) et dans structuredContent (total, truncated, next — un appel de continuation tout prêt). L'unité d'une page est nommée par pageUnit : l'aperçu et query paginent les ACTES (20 et 20 par défaut), package=… pagine les SIGNATURES d'un acte (20 par défaut, 300 au plus) — les grands codes en portent des milliers. package=… avec catalog=… pagine une liste séparée de l'acte : \"questions\" — le CATALOGUE DES QUESTIONS (DECISION-0190) : quelles demandes sont prévues (une question en mots, une forme, un prédicat ou des normes) et à quoi l'acte NE répond PAS, avec le type de motif ; une fiche est un modèle de demande, non une réponse, et tous les actes n'en ont pas ; \"norms\" — les NORMES de l'acte (modalité §107 et étiquette), \"constants\" — les CONSTANTES (noms des déclarations). \"task-guides\" — les PARCOURS DE TÂCHE (DECISION-0414) : l'ordre d'application d'un canon à un document — quoi recueillir, quelles cartes interroger et comment lire les réponses ; un parcours ne répond à rien. catalog=\"task-guides\" est admis aussi sans package — tous les parcours du profil ; guide=… — le détail d'un parcours ; le parcours lui-même — MCP Prompts sous le même nom. Le détail d'un acte imprime un aperçu de ces listes et nomme le compte et l'appel tout prêt du mode.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "catalog": {
            "description": "avec package : paginer le catalogue des questions, les normes, les constantes ou les parcours de tâche de l'acte au lieu de ses signatures ; \"task-guides\" aussi sans package : tous les parcours de tâche du profil",
            "enum": [
              "questions",
              "norms",
              "constants",
              "task-guides"
            ],
            "type": "string"
          },
          "guide": {
            "description": "avec catalog=\"task-guides\" : le détail d'un parcours — un nom <paquet>/<id> (comme dans prompts/list) ou un id avec package",
            "type": "string"
          },
          "limit": {
            "description": "combien par page : actes (aperçu 20, query 20), signatures d'un acte (20, 300 au plus) ou éléments d'une liste catalog (questions 20, normes 20, constantes 100, parcours de tâche 20)",
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "description": "à partir de quel élément de la page (0) ; l'unité est le pageUnit de la réponse",
            "minimum": 0,
            "type": "integer"
          },
          "package": {
            "description": "les signatures complètes de cet acte",
            "type": "string"
          },
          "query": {
            "description": "un filtre de sous-chaîne sur signatures, étiquettes et constantes (sans distinction de casse)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "law_packages"
    },
    {
      "description": "Passeport d'une publication exacte : objet, interface, frontières, contrôles et performance. La section reports conserve l'historique des mesures, y compris les échecs. Les enregistrements sont paginés par JSON Pointer ; next poursuit la réponse.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "contentHash": {
            "pattern": "^sha256:[0-9a-f]{64}$",
            "type": "string"
          },
          "limit": {
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "offset": {
            "minimum": 0,
            "type": "integer"
          },
          "sections": {
            "items": {
              "enum": [
                "description",
                "interface",
                "semantics",
                "sources",
                "composition",
                "dependencies",
                "checks",
                "evidence",
                "reports"
              ]
            },
            "minItems": 1,
            "type": "array",
            "uniqueItems": true
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "version",
          "contentHash"
        ],
        "type": "object"
      },
      "name": "law_passport"
    },
    {
      "description": "À la demande explicite de l'utilisateur, répéter entre 1 et 12 appels law_ask ou law_process_run antérieurs (le cours d'une affaire, DECISION-0160), comparer strictement leurs replayControl, et préparer un document figé non public pour 24 heures. Le client ne fournit jamais la réponse machine : le serveur ne l'obtient qu'en exécutant à nouveau. Un écart dans une entrée, dans le droit, dans une ressource, dans le code du serveur, dans la bibliothèque du moteur ou dans le résultat rejette le document entier.",
      "inputSchema": {
        "additionalProperties": false,
        "oneOf": [
          {
            "not": {
              "required": [
                "producerRuns"
              ]
            },
            "required": [
              "calculations"
            ]
          },
          {
            "not": {
              "required": [
                "calculations"
              ]
            },
            "required": [
              "producerRuns"
            ]
          }
        ],
        "properties": {
          "assistant": {
            "additionalProperties": false,
            "properties": {
              "explanations": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "calculationRefs": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "text": {
                      "maxLength": 12000,
                      "type": "string"
                    }
                  },
                  "required": [
                    "text",
                    "calculationRefs"
                  ],
                  "type": "object"
                },
                "maxItems": 48,
                "type": "array"
              },
              "summary": {
                "maxLength": 12000,
                "type": "string"
              }
            },
            "type": "object"
          },
          "calculations": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "id": {
                  "maxLength": 80,
                  "type": "string"
                },
                "label": {
                  "maxLength": 300,
                  "type": "string"
                },
                "replayControl": {
                  "type": "object"
                },
                "request": {
                  "type": "object"
                }
              },
              "required": [
                "request",
                "replayControl"
              ],
              "type": "object"
            },
            "maxItems": 12,
            "minItems": 1,
            "type": "array"
          },
          "documentVersion": {
            "description": "Version du document immuable ; 0.1 est conservée pour la compatibilité transitoire, 0.2 inclut tous les résultats natifs et le lecteur commun.",
            "enum": [
              "law.answers.document/0.1",
              "law.answers.document/0.2"
            ]
          },
          "language": {
            "enum": [
              "ru",
              "en"
            ]
          },
          "producerRuns": {
            "description": "Exécutions de producteurs enregistrés avec control/0.2 ; mutuellement exclusives avec calculations.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "control": {
                  "type": "object"
                },
                "executionContext": {
                  "type": "object"
                },
                "id": {
                  "maxLength": 80,
                  "type": "string"
                },
                "label": {
                  "maxLength": 300,
                  "type": "string"
                },
                "producer": {
                  "type": "string"
                },
                "request": {
                  "type": "object"
                },
                "text": {
                  "type": "string"
                }
              },
              "required": [
                "producer",
                "request",
                "control"
              ],
              "type": "object"
            },
            "maxItems": 12,
            "minItems": 1,
            "type": "array"
          },
          "question": {
            "maxLength": 8000,
            "type": "string"
          }
        },
        "required": [
          "question"
        ],
        "type": "object"
      },
      "name": "law_prepare_answer"
    },
    {
      "description": "De quelles étapes se compose la procédure établie par un acte, et si elle porte un défaut structurel (O-5, DECISION-0052). Les étapes, les transitions et la condition de chaque transition sont reconstruites à partir de la formalisation, non racontées : ce qui mène d'où vers où, et sous quelle condition. Le contrôle du graphe : étapes inaccessibles, transitions mortes, une transition qui n'entre dans aucune étape. Sans package — la liste des actes dont la procédure est formalisée. Une étape sans sortie est nommée mais N'EST PAS comptée comme défaut : si elle est terminale par dessein, la formalisation ne le montre pas.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "package": {
            "description": "l'acte ; sans lui — la liste des actes qui portent des procédures",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "law_process"
    },
    {
      "description": "Comment une affaire particulière se déroulera, étape par étape (O-5, DECISION-0052) : un journal {date, attempt?, facts?} est exécuté cadre par cadre, et le droit de chaque cadre est le droit de SA date. La réponse dit : quelles étapes ont été atteintes ; quelle transition tentée n'a produit AUCUN effet juridique (§164 — « l'acte a été accompli mais n'a pas eu lieu ») ; quelles obligations sont violées et quels délais courent ; ce qui est disponible ensuite et CE QUI MANQUE EXACTEMENT pour le reste. Les noms des transitions viennent de law_process. Étapes atteintes signifie « a-t-on déjà entré », non « où l'on est maintenant » : le noyau 0.1 ne calcule pas les points de l'état courant.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "instance": {
            "description": "ce qui traverse la procédure : le numéro du lot, de la demande, de l'affaire",
            "type": "string"
          },
          "legalTime": {
            "description": "la date de base (YYYY-MM-DD) ; la date d'un cadre est fixée par l'étape elle-même",
            "type": "string"
          },
          "package": {
            "description": "l'acte",
            "type": "string"
          },
          "probeTime": {
            "description": "l'instant d'une tentative hypothétique, pour déterminer les étapes disponibles sur le dernier cadre ; sans lui les étapes disponibles ne sont pas calculées — l'outil n'invente pas l'heure",
            "type": "string"
          },
          "procedure": {
            "description": "la procédure, s'il y en a plus d'une",
            "type": "string"
          },
          "steps": {
            "description": "le journal de l'affaire : [{date, attempt?, time?, decisionTime?, knowledgeTime?, facts: [{predicate, args}]}] ; sur une transition tentée, `time` est l'instant de l'événement (ISO 8601 avec un décalage), et par lui le porteur prend sa place dans l'historique §161.1 (DECISION-0156) ; les axes de décision et de connaissance d'un cadre viennent de l'entrée, sinon de l'affaire, sinon de minuit UTC de la date ; chaque cadre nomme les axes qu'il a utilisés et d'où ils viennent",
            "type": "array"
          }
        },
        "required": [
          "package",
          "instance",
          "steps"
        ],
        "type": "object"
      },
      "name": "law_process_run"
    },
    {
      "description": "Publier un document préparé. La répétition avec le même preparationId renvoie de façon idempotente la même URL et le même secret de révocation distinct.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "preparationId": {
            "type": "string"
          }
        },
        "required": [
          "preparationId"
        ],
        "type": "object"
      },
      "name": "law_publish_answer"
    },
    {
      "description": "Une requête LawQL déterministe sur le CLIR d'une formalisation : une question sur le modèle de l'acte lui-même, pas sur une affaire. Relations : nodes(id,kind,package,package_name,path), edges(from,to,role), anchors(node,anchor,act,locator,path), labels(node,lang,text,status), fields(node,field,value,value_kind), rules(id,strength,head_predicate,head_polarity,head_variables,body_variables,body_predicates), norms(id,modality,goal_kind,condition_predicates), positions(norm,kind,bearer_type), windows(norm,kind,deadline), imports(package,imported,semantic_hash), links(from,to,kind: imports|alias|subtype|produces|reads|anchored), literals(node,context,predicate,polarity), variables(node,context,name,type), interpretations(id,predicate,role). Fonctions : anchor, labels, short, contains, overlaps, starts_with, ends_with, position, derivation ; exists/not exists sur une variable liée ; égalité et appartenance seulement, sans arithmétique ni comparaisons d'ordre. Périmètre : corpus par package.name (par exemple kz.corpus.labour_code, pas un nom de fichier) ou un glob ; sans corpus, toute la tranche du profil ; un périmètre hors profil est vide (CORPUS_EMPTY). Exemples : `from r in rules where r.head_predicate == \"urn:…#eligible\" select r.id as producer, r.strength as strength, anchor(r.id) as anchors` — qui produit ; `from l in literals where l.predicate == \"urn:…#eligible\" select l.node as reader, l.context as context` — qui lit ; `query eligible over \"pkg\" { for x: Person; where applicant(x); select eligible(x); }` — inférence par le noyau. C'est une orchestration au-dessus du CLIR et du noyau ; aucune sémantique juridique nouvelle n'est implémentée ici. Au lieu du texte, une question du catalogue avec arguments : producers, readers, anchors-of, imports-of, links-of, type-step (les paramètres predicate/node/type sont des URN, pkg un package.name ou un glob). La réponse structurelle est une queryPage : resultHash du queryResult complet, snapshot (hachage de la liste des paquets du périmètre), rowCount, rows selon rowLimit (20, au plus 5000) et rowOffset, next avec le snapshot pour continuer ; full: true renvoie le queryResult complet quand le périmètre est un seul paquet. Chaque ligne porte sa provenance (nœuds CLIR) ; une réponse vide porte l'entonnoir explain (emptyAt nomme la clause) ; les erreurs portent des codes LDC-Qxxxx avec des indices ; un produit de sources trop large est refusé avant exécution (QUERY_TOO_BROAD), une continuation sur un autre instantané — SNAPSHOT_CHANGED.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "arguments": {
            "description": "les paramètres de la question : un objet « nom → chaîne » (predicate, node, type — des URN ; pkg — un package.name ou un glob)",
            "type": "object"
          },
          "case": {
            "description": "l'affaire pour query-over ; elle remplace la clause case",
            "type": "object"
          },
          "corpus": {
            "description": "le périmètre de l'instantané : un package.name (par exemple kz.corpus.labour_code) ou un glob sur package.name ; sans corpus, toute la tranche du profil",
            "type": "string"
          },
          "engine": {
            "default": "lawc",
            "description": "il y a un moteur — le noyau ; l'implémentation de référence est appelée par sa propre commande",
            "enum": [
              "lawc"
            ]
          },
          "full": {
            "description": "renvoyer le queryResult complet au lieu d'une page ; seulement quand le périmètre est un seul paquet",
            "type": "boolean"
          },
          "limit": {
            "description": "un plafond explicite des matérialisations eval() (il ne borne PAS les lignes — voir rowLimit)",
            "minimum": 1,
            "type": "integer"
          },
          "query": {
            "description": "inline LawQL",
            "type": "string"
          },
          "question": {
            "description": "le nom d'une question du catalogue corpus/ql/questions (producers, readers, anchors-of, imports-of, links-of, type-step) ou d'un lint ; à la place de query",
            "type": "string"
          },
          "rowLimit": {
            "description": "combien de lignes dans structuredContent (20 ; le budget peut le baisser)",
            "maximum": 5000,
            "minimum": 1,
            "type": "integer"
          },
          "rowOffset": {
            "description": "à partir de quelle ligne (0) ; la continuation vient de next avec snapshot ; requêtes structurelles seulement",
            "minimum": 0,
            "type": "integer"
          },
          "snapshot": {
            "description": "le hachage d'instantané de next.snapshot de la page précédente : une continuation sur un autre instantané est refusée (SNAPSHOT_CHANGED)",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "law_query"
    },
    {
      "description": "Un SIGNALEMENT d'écart entre la formalisation et la source : la réponse contredit le texte épinglé, une norme de la source n'est pas exprimée par une règle, une étiquette §218 diverge du texte, une adresse est introuvable. Un signalement est une hypothèse pour le triage par un formaliseur : il ne change PAS le droit, n'atteint jamais les réponses des autres outils, et « non dérivé » ne devient pas « dérivé » à cause de lui. Une adresse est requise et vérifiée contre le catalogue : package, fragment (un StableId issu de law_sources) et/ou predicate ; callId est le X-Law-Call-Id de la réponse que vous contestez. L'entrée va dans le journal du serveur.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "callId": {
            "description": "le X-Law-Call-Id de la réponse que vous contestez",
            "maxLength": 128,
            "type": "string"
          },
          "category": {
            "description": "le type d'écart : norme non exprimée / issue contre le texte / étiquette contre le texte / adresse introuvable / texte contre l'officiel / autre",
            "enum": [
              "missing-norm",
              "wrong-outcome",
              "label-mismatch",
              "broken-address",
              "source-text",
              "other"
            ]
          },
          "expected": {
            "description": "ce que dit la source (avec l'article)",
            "maxLength": 2000,
            "type": "string"
          },
          "fragment": {
            "description": "le StableId du fragment source",
            "type": "string"
          },
          "observed": {
            "description": "ce que le système a répondu",
            "maxLength": 2000,
            "type": "string"
          },
          "package": {
            "description": "l'acte du corpus",
            "type": "string"
          },
          "predicate": {
            "description": "le prédicat dont il est question",
            "type": "string"
          }
        },
        "required": [
          "package",
          "category",
          "expected",
          "observed"
        ],
        "type": "object"
      },
      "name": "law_report"
    },
    {
      "description": "Révoquer un document publié au moyen de son secret distinct. L'identifiant public à lui seul ne donne aucun contrôle ; la révocation ferme la page HTML, l'API et le téléchargement.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "publicId": {
            "type": "string"
          },
          "revokeSecret": {
            "type": "string"
          }
        },
        "required": [
          "publicId",
          "revokeSecret"
        ],
        "type": "object"
      },
      "name": "law_revoke_answer"
    },
    {
      "description": "Les règles du droit formalisé mises en mots : comment exactement un prédicat est dérivé (prémisses, articles sources). Appelez ceci AVANT de fournir des faits à law_ask — les règles disent quels faits sont nécessaires au lieu de les laisser à inventer. Pour les grands actes, package=… renvoie une table des matières ; le texte complet vient de predicate=…. La liste par paquet est paginée : limit (20 par défaut, 500 au plus) et offset ; le reste est nommé dans le texte (`showing a–b of N; k more`) et dans structuredContent (total, truncated, next — un appel de continuation tout prêt).",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "lang": {
            "description": "la langue dans laquelle les règles sont mises (DECISION-0032 ; la langue du profil par défaut ; les autres sont des paquets brouillons, avec des superpositions d'étiquettes §218)",
            "enum": [
              "ru",
              "kk",
              "en",
              "ky",
              "uz",
              "ar",
              "la",
              "zh",
              "de",
              "fr",
              "tr",
              "es",
              "fa",
              "ja"
            ]
          },
          "limit": {
            "description": "package : combien de règles par page (20 ; le budget peut le baisser)",
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "description": "package : à partir de quelle règle (0)",
            "minimum": 0,
            "type": "integer"
          },
          "package": {
            "description": "toutes les règles de l'acte",
            "type": "string"
          },
          "predicate": {
            "description": "les règles qui dérivent ce prédicat",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "law_rules"
    },
    {
      "description": "Construire une condition nécessaire — un surensemble — pour la présélection de lignes d'une source externe (DECISION-0120). Ce n'est PAS une réponse juridique et PAS du SQL : le résultat est un arbre typé et un manifeste des extensions jusqu'à TRUE. Chaque ligne qui passe doit ensuite être calculée en entier par le moteur, avec un graphe de preuve, sur le même instantané des données. Le binding est passé comme objet épinglable ; sourceSchemaContentHash est l'empreinte réelle du schéma source et est comparée bruyamment avec l'épingle. Les faits d'affaire qui portent une provenance (origin, document, citation, extractor) sont fournis à law_ask, pas ici. Le nombre confidence est lu par l'EvidencePolicy du paquet, pas par cet outil et pas par le moteur.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "binding": {
            "description": "un artefact law.screen.binding/0.1",
            "type": "object"
          },
          "goal": {
            "description": "un StableId ou un nom court unique de l'objectif",
            "type": "string"
          },
          "legalTime": {
            "description": "la date du droit YYYY-MM-DD ; sans elle, toutes les fenêtres de toutes les règles sont prises en compte",
            "type": "string"
          },
          "package": {
            "description": "la clé de paquet depuis law_packages",
            "type": "string"
          },
          "sourceSchemaContentHash": {
            "description": "le sha256 réel du schéma source",
            "type": "string"
          }
        },
        "required": [
          "package",
          "goal",
          "binding",
          "sourceSchemaContentHash"
        ],
        "type": "object"
      },
      "name": "law_screen"
    },
    {
      "description": "Une RECHERCHE sémantique sur le droit formalisé : une question ou une notion dans vos propres mots → des candidats avec adresses — prédicats avec signatures, règles, fragments d'articles. C'est la couche de DÉCOUVERTE, non de la réponse : le résultat dit QUOI demander ensuite (law_ask par signature, law_rules, law_sources) et n'établit ni un fait ni une norme. Le classement est un embedder lexical déterministe (DECISION-0040), et la similarité de texte n'est pas l'applicabilité d'une norme. Si vous connaissez le nom exact, allez directement à law_packages/law_ask ; un résultat vide ne signifie PAS que la norme n'existe pas.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "kinds": {
            "description": "restreindre les types de candidat",
            "items": {
              "enum": [
                "package",
                "predicate",
                "rule",
                "norm",
                "constraint",
                "fragment"
              ]
            },
            "type": "array"
          },
          "limit": {
            "description": "combien de candidats (8, 25 au plus)",
            "type": "integer"
          },
          "package": {
            "description": "chercher uniquement dans cet acte",
            "type": "string"
          },
          "query": {
            "description": "une question ou une notion dans vos propres mots",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "law_search"
    },
    {
      "description": "Sources : par défaut de courts extraits (view=summary), 5 textes par page, avec l'adresse du texte complet dans fragments[].full. package ou fragment est requis (un StableId issu de law_search/law_rules). view=full renvoie des parties exactes du texte : textRange fixe une plage de caractères Unicode, fragments[].next est la continuation avec un contentHash. L'empreinte se rapporte à la source ENTIÈRE, non à l'extrait ni à la partie. textOffset/textLimit exigent fragment ; une continuation exige contentHash. Les listes sont paginées avec offset/limit ; le budget de réponse peut réduire une page.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "contentHash": {
            "description": "l'empreinte du texte complet reprise de la partie précédente",
            "type": "string"
          },
          "fragment": {
            "description": "le StableId d'un fragment",
            "type": "string"
          },
          "language": {
            "description": "la langue de la variante, telle qu'indiquée sur la fiche source",
            "type": "string"
          },
          "limit": {
            "description": "combien de textes : summary 5, full 1 (le budget peut le baisser)",
            "maximum": 200,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "description": "à partir de quel fragment (0)",
            "minimum": 0,
            "type": "integer"
          },
          "package": {
            "description": "la clé de paquet — tous les fragments de cet acte",
            "type": "string"
          },
          "status": {
            "description": "le statut de la variante, tel qu'indiqué sur la fiche source",
            "type": "string"
          },
          "textLimit": {
            "description": "le nombre maximal de caractères Unicode dans une partie du texte (aussi ≤8000 octets d'UTF-8)",
            "maximum": 4096,
            "minimum": 1,
            "type": "integer"
          },
          "textOffset": {
            "minimum": 0,
            "type": "integer"
          },
          "view": {
            "default": "summary",
            "enum": [
              "summary",
              "full"
            ]
          }
        },
        "type": "object"
      },
      "name": "law_sources"
    }
  ]
}

What the leaf hashes

{"body":"c229b0d3bb1fff6fe733ecb83ae7ea3d1cbae5107b0a20c1cb6b9d4b60dd5d9b","id":568897,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793139154362631,"prev":null,"subject":"17d292b2-5108-401b-949e-65f658da4e8a","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).

  1. 0xeba9ca3dffc7b6037f224e2c9b7d04506c5aa15794d8fdc162b6017898e1a876
  2. 0xc4f757e70fc4e25349332c070445d47f5ae00995567c0259e5f5090cb6ddd618
  3. 0xee0990fb27e39b63a708a0644b11806b719480e0f60c95b798c059d06a48cd17
  4. 0xebff6d838979eba85091bcd6f6c4b1e12e650952504ead64093e84f358917b04
  5. 0xc467e65a7f64e3ee4d53cdcbd5af9ab272b6be39fc9227895411476f95ba2cd0
  6. 0x5ff3d1f8de911f293057c34548b97613a992dc43aa2f69f5c3bd7a1a4ad7addf
  7. 0xa4493703fae74b05c4dae09baea595f1bb9e53593f09036e0a5dd770f87ecdb0
  8. 0x8e4e518b832a7c15cfdca3dbd0683a6e5a5233a286870507000a0418e3825409
  9. 0x45e8689a64228e5a0ea7f04a80dae2f11cc628a3d7aedc6d0744cd500c6d6021
  10. 0xdaf848f74770c7306d5ce0afa39fe9e157a88d16c1379890545e1752b9240a2a
  11. 0x8d7aa81f73a59db43b926bc8fc89ae1cba0632ecf1e5b94b087e267f66888fba
  12. 0x71d164c799d87b4dc25af672a70aaf73791d8dbb1786a5d4eb3ead269cb7c28a
  13. 0x89602081fbcc80aef8908f5df765767a1a41cc8b089111259ea78e6583a8bc4b
  14. 0x41f9f462759cb539183e979fb3eb967d94755cf039c44a64a9a3c4ad97523cfd
  15. 0x56f7109d4cde42492651beb1237c13cdcbf95e6fee2b2482391a2388e04c4629
  16. 0x8745bd887f5ce9f7a49558fd2b04cdcd97a05ea9f8a23f62d0e80cb13d328b0f
  17. 0xdf1105afdc109de3c09a98fc8a3864159ad964e6f49b635c105a27a1e1f14310
  18. 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON