Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion templates/commands/constitution.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Comment thread
mnriem marked this conversation as resolved.
- Version change: old → new
- List of modified principles (old title → new title if renamed)
- Added sections
Expand Down
25 changes: 25 additions & 0 deletions tests/test_constitution_template_sync_report.py
Original file line number Diff line number Diff line change
@@ -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"
)