Ten przykład pokazuje generator dokumentu Markdown, który ma wygenerować treść na zadany temat i utrzymać stały format:
# <temat> jako H1,## Cel, ## Kontekst, ## Kluczowe punkty, ## Następne kroki,Intract pilnuje tego na dwóch poziomach:
intract.yaml opisuje kontrakt projektu: generator ma dostać topic, zwrócić markdown_document, nie używać network/write i wymagać kroków transform.topic, build.markdown_outline, render.markdown_section, validate.markdown_contract.pass/generator.py ma inline kontrakty @intract.v1 oraz funkcję guard_markdown_contract(), która w runtime sprawdza temat w H1, wymagane nagłówki i brak HTML.Najkrótsza ścieżka demo:
bash examples/markdown-generator/run-demo.sh
Skrypt wypisuje wygenerowany Markdown, wynik runtime guardu oraz statusy walidacji Intract dla wariantu pass i violation.
Ręczna walidacja poprawnego wariantu:
python -m intract validate examples/markdown-generator/pass \
--manifest examples/markdown-generator/intract.yaml
Oczekiwane:
Status: pass
Możesz też uruchomić sam generator:
python examples/markdown-generator/pass/generator.py
violation/generator.py celowo łamie kontrakt:
requests.get(...),generated.md,python -m intract validate examples/markdown-generator/violation \
--manifest examples/markdown-generator/intract.yaml
Oczekiwane:
Status: violation
Declared forbid:network
Declared forbid:write
To jest celowo prosty przykład: Intract statycznie pilnuje obecności zakontraktowanych kroków, wejść/wyjść i zakazanych efektów, a domenowy strażnik guard_markdown_contract() pilnuje samego kształtu wygenerowanego Markdowna.