A private SAT pipeline: binary-encoded CNF + LLM solver + secret caller state.
The LLM never sees your variable names. It solves a structurally equivalent formula over opaque hex tokens. You hold the decode map.
Your formula → encode → opaque CNF → LLM solves → verify → decode → real meanings
(A | B) & ... (private) hex tokens over tokens 2nd call caller user_is_admin=True
- Encode — variable names replaced with random 8-char hex tokens per session.
- Prompt 1 — LLM receives token-only CNF, returns a satisfying assignment.
- Prompt 2 — A second LLM call verifies every clause evaluates to TRUE.
- DIMACS — Standard
.cnfexport for ground-truth MiniSAT cross-check. - Decode — Caller maps tokens → symbols → real meanings. Never leaves your process.
📖 New here? Start with GETTING_STARTED.md
Requires Python 3.10+ (macOS ships 3.9; use brew install python@3.11 or pyenv).
git clone https://github.com/flashesofbrilliance/blindsat.git
cd blindsat
pip install -e .[dev]
python examples/access_control.py # mock mode, no API key neededTo use a real LLM, see the LLM wiring section in GETTING_STARTED.md.
sat_private/ Core library (encode, prompts, DIMACS, decode, pipeline)
tests/ Unit, integration, and edge-case tests
docs/ Definition of Done, user testing plan, use cases, next steps
examples/ Three runnable use cases (access control, feature flags, compliance)
notebooks/ Annotated Jupyter walkthrough
.github/workflows/ CI: pytest + coverage + security checks
make test # run all 46 tests (no API key needed)
make coverage # pytest + coverage report (target ≥90%)
make lint # ruff style check| # | Use Case | Example |
|---|---|---|
| UC-1 | Name-blind access control policy evaluation | examples/access_control.py |
| UC-2 | Feature flag dependency validation | examples/feature_flags.py |
| UC-3 | Regulatory compliance rule satisfiability | examples/compliance_rules.py |
| UC-4 | Private configuration space exploration | — |
| UC-5 | AI-assisted propositional theorem proving | — |
See docs/USE_CASES.md for full detail.
What this is: name-blind. The model sees clause structure and variable count, never names or meanings. What this is not: a cryptographic zero-knowledge proof (tracked as N-19 in docs/NEXT_STEPS.md).
- Token map is ephemeral — regenerated every
run_pipelinecall. - Real variable names never appear in prompts, DIMACS output, or logs.
.gitignoreblocksformula.cnfandcaller_secret_state.json.- CI includes a security job that scans CNF files and validates
.gitignorecoverage.