Ten przykład pokazuje generator dokumentu Markdown, który ma wygenerować treść na zadany temat i utrzymać stały format:
# <temat>jako H1,- sekcje
## Cel,## Kontekst,## Kluczowe punkty,## Następne kroki, - czysty Markdown bez HTML,
- brak pobierania treści z sieci i brak zapisu plików.
Intract pilnuje tego na dwóch poziomach:
- Manifest
intract.yamlopisuje kontrakt projektu: generator ma dostaćtopic, zwrócićmarkdown_document, nie używaćnetwork/writei wymagać krokówtransform.topic,build.markdown_outline,render.markdown_section,validate.markdown_contract. - Kod w
pass/generator.pyma inline kontrakty@intract.v1oraz 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.shSkrypt 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.yamlOczekiwane:
Status: pass
Możesz też uruchomić sam generator:
python examples/markdown-generator/pass/generator.pyviolation/generator.py celowo łamie kontrakt:
- pobiera treść przez
requests.get(...), - zapisuje
generated.md, - renderuje HTML zamiast Markdown,
- zmienia temat dokumentu na promocję.
python -m intract validate examples/markdown-generator/violation \
--manifest examples/markdown-generator/intract.yamlOczekiwane:
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.