Skip to content

docs(governance): state the boundary — keel enforces rulings, it does not issue them - #297

Merged
eaitbrahim merged 1 commit into
mainfrom
docs/governance-boundary
Aug 16, 2026
Merged

docs(governance): state the boundary — keel enforces rulings, it does not issue them#297
eaitbrahim merged 1 commit into
mainfrom
docs/governance-boundary

Conversation

@eaitbrahim

Copy link
Copy Markdown
Contributor

Closes #280

Once contributors arrive from different madhāhib and jurisdictions they will disagree about
rulings, and in a religious context ungoverned disagreement fragments the project. The
architecture already answers the question — a classification is a human input
(keel assets attest --source --attested-by), screen_asset enforces it, attestation=None
is a rejection — so this PR makes the answer explicit, before any other Phase 6–8 document is
written against the wrong assumption.

What

  • README's first screen (before the first ##, where a stranger decides what this is):
    the quotable sentence — keel is not a fatwa engine. It is an enforcement engine for a
    ruling you supply.
    — plus the two-operators-two-schools consequence.
  • CONTRIBUTING.md: the same sentence verbatim, framed as PR scope:
    • a PR changing a default classification needs a cited source and is discussed
      it applies one contributor's fiqh to every operator who upgrades;
    • a PR changing the mechanism is ordinary engineering;
    • disagreement routes locallykeel assets attest writes your ruling to your
      database — and is not merged upstream, so the project never becomes a fiqh court with a
      merge button.
  • tests/test_governance.py (written first, red, then green): boundary sentence on the
    README first screen; same sentence verbatim in CONTRIBUTING (drift-proof); both PR kinds
    told apart with their bars; the local-not-upstream route named.

Acceptance from #280

  • Short, quotable statement in the README's first screen
  • Same statement in CONTRIBUTING.md, framed as PR scope
  • Explicit: default-classification PRs need a source and discussion; mechanism PRs are
    ordinary engineering
  • Stated disagreement route that does not require the project to adjudicate

Gates: pytest 2778 passed / 1 skipped, ruff check clean, mypy clean.

… not issue them

Contributors from different madhāhib will disagree about rulings, and an
ungoverned disagreement fragments a religious-context project (#280). The
architecture already keeps the ruling in the attestation, not the code; this
states it where it is read: the README's first screen and CONTRIBUTING.md,
pinned verbatim in both by tests/test_governance.py so they cannot drift.
@eaitbrahim
eaitbrahim merged commit f1e4efb into main Aug 16, 2026
1 check passed
@eaitbrahim
eaitbrahim deleted the docs/governance-boundary branch August 16, 2026 22:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

State the governance boundary: keel enforces rulings, it does not issue them

1 participant