Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Markdown generator + Intract

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:

  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:

  • 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.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.