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 iOpaqueBody.compiler/JunexisLang.Compiler.IR/AstToIrTransformer.csiIRDocument.cs: zachowanie metadanych w Structural IR.compiler/JunexisLang.Compiler.CodeGen/TraceRuntimeContract.csoraz 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.csicompiler/JunexisLang.Compiler.CodeGen.Tests/TraceRuntimeContractTests.cs: testy parsowania, IR i wyboru polityki.