intract

Markdown generator + Intract

Ten przykład pokazuje generator dokumentu Markdown, który ma wygenerować treść na zadany temat i utrzymać stały format:

Intract pilnuje tego na dwóch poziomach:

  1. Manifest 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.
  2. Kod w 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.

Poprawna wersja

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

Wersja naruszająca

violation/generator.py celowo łamie kontrakt:

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.