Przejdź do treści

Bloki metadanych

Bloki narrative, supervisor, circuit_breaker i quirks mają ustaloną postać zewnętrzną, lecz ich wnętrza nie są ogólnym językiem instrukcji Junexis. Parser zachowuje treść; wybrane późniejsze etapy interpretują jej fragmenty. deployment i protocol również mają takie ciała, ale ich rozpoznawane podzbiory opisano osobno w rozmieszczeniu i protokołach.

Składnia

narrativeDeclaration
    : NARRATIVE (STRING_LITERAL | IDENTIFIER) narrativeBody
    ;
narrativeBody
    : LBRACE narrativeContent* RBRACE
    ;
narrativeContent
    : narrativeBody
    | ~(LBRACE | RBRACE)
    ;
supervisorDeclaration
    : SUPERVISOR IDENTIFIER supervisorBody
    ;
supervisorBody
    : LBRACE supervisorContent* RBRACE
    ;
supervisorContent
    : supervisorBody
    | ~(LBRACE | RBRACE)
    ;
circuitBreakerDeclaration
    : CIRCUIT_BREAKER IDENTIFIER circuitBreakerBody
    ;
circuitBreakerBody
    : LBRACE circuitBreakerContent* RBRACE
    ;
circuitBreakerContent
    : circuitBreakerBody
    | ~(LBRACE | RBRACE)
    ;
quirksDeclaration
    : QUIRKS (STRING_LITERAL | IDENTIFIER) quirksBody
    ;
quirksBody
    : LBRACE quirksContent* RBRACE
    ;
quirksContent
    : quirksBody
    | ~(LBRACE | RBRACE)
    ;

M01 — nazwy i położenie

Są to deklaracje najwyższego poziomu. narrative i quirks wymagają nazwy w postaci identyfikatora albo literału tekstowego. supervisor i circuit_breaker wymagają identyfikatora; nazwa tekstowa jest błędem składni. Każda deklaracja wymaga ciała w klamrach; ciało może być puste. Nie ma tu reguły nadającej tym deklaracjom ciało wykonywalnego zadania.

M02 — nieprzezroczyste ciało

Reguły ...Content dopuszczają zagnieżdżone bloki i tokeny inne niż klamry. Jest to nadal wejście dla leksera Junexis, nie dowolny ciąg bajtów niezależny od reguł tokenizacji. Klamra wewnątrz poprawnego literału tekstowego nie jest tokenem kończącym blok. Brak zewnętrznej klamry pozostaje błędem parsera.

AstBuilder.OpaqueBody pobiera tekst tokenów pomiędzy klamrami zewnętrznymi i stosuje Trim(). AST i Structural IR przechowują nazwę oraz tekst ciała. Nie należy więc obiecywać identyczności bajtowej z całym oryginalnym blokiem, w tym z jego brzegowymi odstępami i klamrami.

Akceptacja tokenów nie waliduje schematu wewnętrznych pól, ich wartości, referencji do zadań ani sensu polityki. W próbach nieznane trace banana, children Missing i dwie deklaracje narrative Story {} przechodzą check bez diagnostyk. Nie ustanawia to kontraktu rozszerzeń lub poprawności tych opisów.

Narrative i polityka śledzenia

M03 — rzeczywiście interpretowany fragment

TraceRuntimeContract.ResolvePolicy jest używany przez generatory C++, Go i TypeScript. Odczytuje wyłącznie pierwszy blok narrative w otrzymanym IR. Przeszukuje jego surowe ciało wzorcem trace, opcjonalnym dwukropkiem i jedną z rozpoznawanych wartości, bez rozróżniania wielkości liter.

Sytuacja / rozpoznany zapis Wybrana polityka
Brak narrative Off
Narrative bez pasującego zapisu Minimal
trace full, trace: full Full
trace minimal, trace causal Minimal
trace none, trace off Off

causal nie wybiera osobnego trybu w tym algorytmie. Przy kilku pasujących zapisach w pierwszym bloku używany jest pierwszy pasujący fragment. Późniejsze narrative nie zastępują tej decyzji. Nieznana wartość nie daje tutaj błędu; gdy nie ma innego pasującego fragmentu, pozostaje Minimal.

To przeszukiwanie tekstu wyrażeniem regularnym, nie strukturalny odczyt pola wyłącznie na najwyższym poziomie. Nie należy zakładać, że cytowany opis lub zagnieżdżony fragment zawierający pasujący tekst jest automatycznie wyłączony z tego wyszukiwania.

M04 — zakres skutku

Generatory używają polityki do wyboru instrumentacji i etykiety pierwszej narrative jako kontekstu. Nazwy enum Minimal i Full opisują intencję poziomu instrumentacji; samo rozstrzygnięcie polityki nie dowodzi kompletności zdarzeń ani dostarczenia ich do kolektora. Full nie oznacza pełnej historii każdej operacji systemu.

Testy TraceRuntimeContractTests sprawdzają wybór polityki i stałe kontraktu. Nie są próbą komunikacji z kolektorem ani dowodem braku utraty zdarzeń. Nie wyprowadzamy z obecności narrative semantyki biznesowej zadania, autoryzacji, obowiązku spełnienia opisanej intencji lub automatycznej kontroli poprawności systemu.

Nadzór, obwód ochronny i odstępstwa

M05 — zachowanie tekstu a działanie

Blok Rola opisu Potwierdzona granica
supervisor Opis nadzoru Parser i IR zachowują tekst; sam blok nie dowodzi restartu zadań.
circuit_breaker Opis ochrony Zachowanie deklaracji nie dowodzi otwierania/zamykania obwodu ani zatrzymywania wywołań.
quirks Nazwany opis odstępstwa lub obejścia Nie ustanawia automatycznie zmiany semantyki ani wyłączenia walidacji.

W przejrzanej ścieżce generatorów wykonawczych nie znaleziono interpretacji Supervisors, CircuitBreakers i Quirks analogicznej do polityki trace. Nie zastępujemy tego braku dopowiedzianymi regułami restartów, progów i ponawiania.

M06 — relacje w obrazie analizy

AnalysisSnapshotContracts w CLI odczytuje wybrane referencje tekstowe: applies_to dla narrative, children dla supervisor i protects dla circuit_breaker. Buduje relacje obrazu analizy do znanych elementów programu. Dla narrative uwzględnia zadania, pipeline i urządzenia; dla dwóch pozostałych — zadania. Może również oznaczać udział zadań w narrative przypisanej do pipeline.

Jest to tworzenie danych analitycznych, nie wykonanie nadzoru ani dowód walidacji wszystkich wskazanych nazw. Nieznane odwołanie w próbie children Missing nie zostało odrzucone. Relacja protected-by sama nie uruchamia ochrony.

Sprawdzone przykłady

Pary sprawdza rzeczywiste CLI w osobnych projektach. Potwierdzają wymagania zewnętrznej składni, nie realizację opisanych w ciałach polityk.

Przykład poprawny

task Main() @server {}

deployment Local {
    target server {
        Main @server {}
    }
}

Kontrola: przykład przyjęty przez check. Nie jest to test wykonania.

Przykład błędny

deployment Local { target server { Main @server {} }

Powód: Zewnętrzny blok musi być domknięty także wtedy, gdy jego zawartość jest nieprzezroczysta dla parsera.

Kontrola: przykład odrzucony przez check; kody: P0001.

Pełny zakres weryfikacji przykładów.

Przykład: Obowiązkowa nazwa narrative

Poprawny zapis

narrative Story {}

Kontrola: przykład przyjęty przez check. Nie jest to test wykonania.

Błędny zapis

narrative {}

Powód: narrative wymaga identyfikatora albo literału tekstowego jako nazwy.

Kontrola: przykład odrzucony przez check; kody: P0001.

Pełny zakres weryfikacji przykładów.

Przykład: Nazwa supervisor

Poprawny zapis

supervisor Guard {}

Kontrola: przykład przyjęty przez check. Nie jest to test wykonania.

Błędny zapis

supervisor "Guard" {}

Powód: supervisor wymaga identyfikatora; literał tekstowy nie jest dozwolony.

Kontrola: przykład odrzucony przez check; kody: P0001.

Pełny zakres weryfikacji przykładów.

Przykład: Nazwa circuit_breaker

Poprawny zapis

circuit_breaker Guard {}

Kontrola: przykład przyjęty przez check. Nie jest to test wykonania.

Błędny zapis

circuit_breaker "Guard" {}

Powód: circuit_breaker wymaga identyfikatora.

Kontrola: przykład odrzucony przez check; kody: P0001.

Pełny zakres weryfikacji przykładów.

Dodatkowo przyjęte zostały: zagnieżdżony blok z literałem zawierającym }, tekstowa nazwa quirks, nieznana wartość trace i powtórzona nazwa narrative. Wyniki te nie rozszerzają kontraktu działania metadanych.

Jawne luki

  • Ustrukturyzowany schemat wnętrza bloków, nieznane pola, błędne wartości i powtórzenia.
  • Pełne sprawdzanie referencji oraz jednoznaczność nazw i zakresów metadanych.
  • Kontrakt wielu narrative i strukturalne oddzielenie pola trace od opisów tekstowych.
  • Pełna semantyka wykonania supervisor i circuit_breaker: start, restart, limity, progi, czas, współbieżność i propagacja błędów.
  • Semantyka wykonawcza quirks i jej wpływ na pozostałe reguły języka.
  • Dowód kompletności, kolejności i trwałości śledzenia zdarzeń dla wszystkich targetów.

Rola nazwana w deklaracji nie jest sama gwarancją jej realizacji.

Podstawa w repozytorium

  • grammar/JunexisLang.g4: reguły deklaracji, ciał i zawartości przytoczone powyżej.
  • compiler/JunexisLang.Compiler.Core/Parsing/AstBuilder.cs: wizytatory bloków i OpaqueBody.
  • compiler/JunexisLang.Compiler.IR/AstToIrTransformer.cs i IRDocument.cs: zachowanie metadanych w Structural IR.
  • compiler/JunexisLang.Compiler.CodeGen/TraceRuntimeContract.cs oraz wywołania w generatorach C++, Go i TypeScript: polityka pierwszej narrative.
  • compiler/JunexisLang.Compiler.CLI/Output/AnalysisSnapshotContracts.cs: relacje obrazu analizy.
  • compiler/JunexisLang.Compiler.Tests/Parser/ParserControlFlowTests.cs, compiler/JunexisLang.Compiler.Tests/IR/IrTransformerDeclarationTests.cs i compiler/JunexisLang.Compiler.CodeGen.Tests/TraceRuntimeContractTests.cs: testy parsowania, IR i wyboru polityki.