diff --git a/templates/commands/constitution.md b/templates/commands/constitution.md index 7b2f3684fb..0eff198043 100644 --- a/templates/commands/constitution.md +++ b/templates/commands/constitution.md @@ -109,7 +109,9 @@ Follow this execution flow: - Ensure each Principle section: succinct name line, paragraph (or bullet list) capturing non‑negotiable rules, explicit rationale if not obvious. - Ensure Governance section lists amendment procedure, versioning policy, and compliance review expectations. -4. Produce a Sync Impact Report (prepend as an HTML comment at top of the constitution file after update): +4. Produce a Sync Impact Report as an HTML comment at the top of the constitution file after update. + This report is temporary scratch material for human review of the amendment, not governance + content; it is expected to be removed before the amended constitution file is committed. - Version change: old → new - List of modified principles (old title → new title if renamed) - Added sections diff --git a/tests/test_constitution_template_sync_report.py b/tests/test_constitution_template_sync_report.py new file mode 100644 index 0000000000..6900eb1c07 --- /dev/null +++ b/tests/test_constitution_template_sync_report.py @@ -0,0 +1,25 @@ +"""Covers #4431: /constitution's Sync Impact Report must be documented as +temporary, review-only material rather than committed governance content. + +The Outline step that produces the Sync Impact Report must state that it is +scratch material for human review and is expected to be removed before the +amended constitution file is committed. +""" + +from pathlib import Path + +REPO_ROOT = Path(__file__).parent.parent +CONSTITUTION_TEMPLATE = REPO_ROOT / "templates" / "commands" / "constitution.md" + + +def test_sync_impact_report_step_documents_temporary_lifecycle(): + content = CONSTITUTION_TEMPLATE.read_text(encoding="utf-8") + step = content.split("Produce a Sync Impact Report", 1)[1].split("\n\n", 1)[0] + assert "temporary" in step.lower(), ( + "Step 4 must document that the Sync Impact Report is temporary, " + "review-only material, not governance content" + ) + assert "removed before" in step.lower() and "committed" in step.lower(), ( + "Step 4 must state the report is expected to be removed before the " + "amended constitution file is committed" + )