Identifies what’s missing, not what’s wrong.
Protocol: State → Map → Classify → Return. Never proposes solutions.
Part of the Richard Porter Sovereign Thinking Tools ecosystem.
Operates under the Frozen Kernel. Never inside it.
The Negative Space Mapper is a cognitive tool — and now a software implementation — for identifying conspicuous absences in documents, plans, designs, and AI outputs.
It does one thing: it names what’s missing. It does not propose solutions, recommend fixes, or suggest improvements. The human decides what to do with the voids.
This constraint is not a limitation. It is the design. A tool that names absences without filling them preserves the human’s sovereignty over the decision that follows.
| Type | Definition |
|---|---|
| DELIBERATE | Intentionally omitted — the absence is scoped out |
| OVERLOOKED | Should be present but isn’t — conspicuous gap |
| STRUCTURAL | Cannot exist in the current frame — e.g., test results before implementation |
pip install anthropic # only needed for Claude integrationNo other dependencies. The core mapper uses only the Python standard library.
# Basic
python cli.py "We're building a new API with Python and FastAPI"
# From file
python cli.py @document.txt
# Verbose output (shows type, context, confidence)
python cli.py -v "Designing a healthcare app"
# JSON output
python cli.py -f json "Project plan for Q3"
# Filter by confidence threshold
python cli.py -c 0.7 "Autonomous AI agent for email management"from negative_space_mapper import NegativeSpaceMapper
mapper = NegativeSpaceMapper()
result = mapper.map("The AI agent will autonomously generate reports and send emails.")
print(result.statement)
for absence in result.absences:
print(f" - {absence.name} ({absence.type.value}) [{absence.context}]")
print(f"Kernel compliant: {result.kernel_compliant}")from integration_claude import ClaudeMapper
mapper = ClaudeMapper() # uses ANTHROPIC_API_KEY env var
# Map absences in Claude's own analysis
result = mapper.map_with_claude("Design a database for user data")
print(result["named_voids"])
# Specialized wrappers
gov_result = mapper.map_governance_document(open("bylaws.txt").read())
ai_result = mapper.map_ai_safety_document(open("safety_spec.txt").read())The mapper currently detects absences in six domains:
| Domain | What It Looks For |
|---|---|
| Technical | Error handling, validation, testing, documentation, security |
| Domain-specific | Healthcare, software, business, research, nonprofit, AI safety essentials |
| Stakeholder | Missing perspectives: end user, operator, maintainer, regulator, community |
| Temporal | Missing current state when past and future are both addressed |
| Governance | Accountability owner, failure protocol, review cycle, exit condition |
| AI Safety | Human override path, scope boundary, honest failure mode, session termination |
The AI Safety and Governance domains were extended from the generic prototype to reflect absence patterns observed in the Frozen Kernel and Adult Mode Safety Ledger research.
python -m pytest tests.py -vTest cases include ecosystem-specific scenarios: agentic AI documents, adult mode feature descriptions, and nonprofit governance documents.
To add absence patterns from your own domain:
- Add a new
_check_[domain]_absencesmethod toNegativeSpaceMapper - Add domain signals (terms that activate the detector)
- Add domain essentials (terms whose absence is conspicuous)
- Call the new method from
_detect_absences - Test against known cases
The absence pattern catalog will expand as the ecosystem generates more empirical data. Contributions of domain-specific absence patterns — especially from clinical, legal, and financial contexts — are the highest-value contribution.
The mapper enforces Frozen Kernel compliance on its own output:
- No proposed solutions
- No recommendations
- No suggestions
- Returns a list of named voids, not a narrative
If the mapper’s output contains solution language, it flags a kernel violation rather than returning non-compliant output.
| File | Contents |
|---|---|
negative_space_mapper.py |
Core mapper class |
cli.py |
Command-line interface |
integration_claude.py |
Claude API wrapper |
tests.py |
Test suite with ecosystem cases |
README.md |
This file |
This implementation corresponds to Tool 6 in Sovereign Thinking Tools v3.2. The protocol document remains the primary reference. This repository is the software implementation — the same tool in a different register.
This tool operates under the Frozen Kernel — a deterministic safety layer for human-AI interaction. The Frozen Kernel is the architectural spine of the Richard Porter ecosystem. This tool operates under it. Never inside it.
Accountability owner: Richard Porter (GitHub: richard-porter)
Failure protocol: Honest failure over graceful failure. If the tool produces output that violates kernel compliance, it flags the violation explicitly rather than suppressing it or returning a partial result. A tool that fails loudly is safer than a tool that fails quietly.
Review cycle: Version-tagged releases. Current version: v1.0. Breaking changes increment the major version. Calibration improvements increment the minor version. A healthcare domain activation issue identified in external testing (February 2026) is logged as a known calibration issue pending v1.1 review.
Known open problem: Healthcare domain detection may activate on keyword proximity rather than document context, producing false positives on non-healthcare documents. This is a calibration issue, not a structural fault. Contributions targeting domain detection precision are the highest-value open problem. See <CONTRIBUTING.md>.
Released for public benefit. Attribution appreciated but not required.
The only ask: if you extend the absence catalog, share what you find.
ai-safety · ai-governance · llm-safety · ai-alignment · behavioral-safety · deterministic-safety · human-ai-interaction · ai-ethics · ai-accountability · responsible-ai · legal-ai · financial-ai · mental-health-ai
Negative Space Mapper · v1.0 · Frozen Kernel System
They leave. The knowledge stays.