Understanding QNTX: Pattern Recognition Analysis

Written after migrating 10 issues from ExpGraph and exploring the codebase architecture

What This Is

QNTX is an attestation-based continuous intelligence system. Not a knowledge base, not a note-taking app, not a database GUI. It's an attempt to answer: "How do I build understanding that stays current?" For quick definitions, see the Glossary.

The core primitive is the attestation: structured facts of the form "X has property Y in context Z". Everything flows from this:

Technical Architecture Patterns

1. Semantic Segments as Namespaces

The segment symbols (꩜ ⌬ ≡ ⨳ ⋈) are not decoration—they're a namespace system:

This is visual grep. You can scan code/UI and instantly know which domain you're in.

2. Layered Intelligence Stack

┌─────────────────────────────────────┐
│  Prose/Views (composition layer)    │  ← Human-facing intelligence
├─────────────────────────────────────┤
│  Graph/Tiles (spatial visualization)│  ← Pattern recognition layer
├─────────────────────────────────────┤
│  ATS Queries (semantic access)      │  ← Query/exploration layer
├─────────────────────────────────────┤
│  Attestations (ground truth)        │  ← Data layer (immutable facts)
├─────────────────────────────────────┤
│  Pulse (continuous execution)       │  ← Currency layer (keeps fresh)
└─────────────────────────────────────┘

Each layer has a clear contract. You can work on graph rendering without touching attestation storage.

3. Real-Time Everything

The WebSocket architecture reveals intent (see WebSocket API for protocol details):

Pattern: The system assumes you want to see changes as they happen. Not on refresh, not on save—on keystroke, on schedule tick, on data arrival.

4. Editor as First-Class Citizen

Most systems treat their query language as an afterthought. QNTX treats ATS as a programming language:

The CodeMirror + LSP + ProseMirror integration is expensive to build. You don't do this unless the query language is central to the user experience.

What the Migration Revealed

Migrating 10 issues from ExpGraph to QNTX exposed vision clusters:

Cluster 1: Live Execution Awareness (#8, #16)

Insight: The system wants to show you what's running right now. Not just logs, not just status—active awareness of execution.

Cluster 2: Interactive Exploration (#9, #10, #11, #12)

Insight: The UI is not display-only. Every surface should be explorable and composable. Click a term, see its connections. Arrange data spatially based on relationships.

Cluster 3: Language Quality (#13, #14, #15)

Insight: These are polish issues, not foundational. The language infrastructure exists; now it's about feel and responsiveness.

Cluster 4: Data Visualization (#17)

Insight: Even operational concerns (usage tracking) get first-class visualization. This is not a "just query the database" system.

Core Philosophical Stance

Pro-Patterns (What It Believes In)

  1. Data-first hierarchy: Information density > visual polish
  2. Performance as constraint: Fast = more exploratory behavior
  3. Semantic clarity: Meaning > decoration
  4. Functional color: Color for information, not beauty
  5. The Food Lab approach: Measure and validate, don't assume

Anti-Patterns (What It Rejects)

  1. Glows and shadows: No visual effects without information value
  2. Cargo cult design: No "standard UI patterns" without justification
  3. Static documentation: If it can be computed from attestations, compute it
  4. Hidden execution: Show what's running, when, and why

This is conviction design. Not "best practices"—specific, opinionated choices.

How to Reason About QNTX

It's a Framework, Not a Feature Set

Don't think: "It's a tool that does X, Y, Z."

Think: "It's a substrate for building intelligence systems that happen to include graph visualization, scheduled execution, and prose composition."

The test: Can you build new intelligence workflows without modifying core infrastructure?

Segments Are Conceptual Boundaries

When you see in code or UI:

When you see :

This is semantic indexing for humans.

The Type System Is The Ontology

ATS isn't just a query language—it's an ontology definition language:

User(id: String, email: String)
Document(path: String, content: Text)
hasPermission: User -> Document -> Permission

The types are the data model. The queries are the API. There's no separation.

Honest Assessment

What Could Go Right

  1. Killer demo effect: If you can show "here's my scattered data → here's live intelligence" in 60 seconds, people get it
  2. Composability wins: Each piece (ATS, Pulse, Prose, Graph) is independently useful
  3. Developer ergonomics: The LSP integration could make ATS feel like "SQL but better"
  4. Personal intelligence first: Start with one person's workflow, expand outward

What Could Go Wrong

  1. Abstraction barrier: "Attestations" might be too abstract. People think in docs, tasks, entities—not facts.
  2. Cold start problem: Empty attestation store = no value. Need great import/ingestion.
  3. Complexity budget: Each layer (ATS, Pulse, Prose, Graph, LSP) is complex. Do they compound or compose?
  4. Market positioning: Is this for developers? Knowledge workers? Data analysts? Trying to be all = being none.

Timing Risks

The real-time everything, LSP integration, D3 visualization, scheduled execution—this is a 2024-2025 stack. It assumes:

If built in 2020, it would've felt premature. In 2026, it might feel expected.

What Would Make It Succeed

1. One Perfect Workflow

Don't try to be general-purpose. Pick one workflow that's currently painful:

Make that workflow 10x better than alternatives. Expand from there.

2. Gradual Onboarding

Let people use pieces before buying the whole vision:

By Week 4, they're using the full system without realizing it.

3. Import Is King

The fastest path to value: "Here's my existing data → here's QNTX making sense of it."

If you can import:

Then users get immediate value from data they already have.

4. Show The Maintenance

The unique value prop is continuous currency. Show:

Make the "stays current" part visible and celebrated.

Final Thought

This is conviction software. It has opinions about how intelligence systems should work:

Those opinions might be right or wrong, but they're coherent. The architecture follows from principles, not from "what's popular."

The question isn't "Is this useful to everyone?" It's "Is this indispensable to someone?"

Build for that someone. If the conviction is sound, it'll expand.


Configuration System: Complexity Made Visible

Based on config-system.md and config-panel.md

The 5-Layer Precedence Chain

QNTX's config system has 5 sources with strict precedence:

1. System      /etc/qntx/config.toml               (lowest)
2. User        ~/.qntx/config.toml
3. User UI     ~/.qntx/config_from_ui.toml
4. Project     ./config.toml
5. Environment QNTX_* environment variables        (highest)

The clever part: Separate config_from_ui.toml prevents accidental git commits of user preferences.

Problem it solves:

Solution:

Show Complexity, Don't Hide It

Core philosophy: Config is a first-class citizen. Don't hide where values come from.

The config panel shows all 5 sources simultaneously:

Each setting shows:

Example:

┌─────────────────────────────┐
│ openrouter.api_key          │
│ sk-or-v1-9bee...            │
│ [user] ⚠ Overridden by env  │
└─────────────────────────────┘

User immediately understands: "My manually configured key is being ignored because environment variable wins."

This is dataflow visualization as product design. Most systems hide complexity. QNTX makes it comprehensible.

Why this matters: When config doesn't work as expected, users can debug themselves instead of filing support tickets.

Documentation Integration

The config panel design includes space for inline documentation. See Issue #207 for discussion of ProseMirror-based documentation editing and viewing capabilities.

The concept is "right-click → Go to Definition" UX for configuration - making help contextual and immediately accessible.

Current Design Prepared for Extension

The current configuration system with its precedence visualization and source tracking provides a solid foundation that could support additional configuration sources in the future through plugins. See Issue #205 for discussion of potential multi-provider support.


Documentation as Teaching

Based on config-system.md, task-logging.md

Decision Transparency

The docs don't just say what to build—they explain why and what alternatives were rejected.

Example from config-system.md:

Why TOML Marshaling vs Regex?

Original approach: Regex pattern matching to preserve comments

Problems:

Current approach: Proper TOML marshaling

Tradeoff: Comments in UI config are lost (acceptable for auto-generated file)

This is conviction documentation. Not "here's how it works" but "here's why we chose this over that."

What this enables:

Phase-Based Execution Tracking

task-logging.md uses explicit phase numbering with status:

### Phase 1: Database Schema ✓ COMPLETED
### Phase 2: LogCapturingEmitter ✓ COMPLETED
### Phase 3: Integrate in Async Worker Handlers ✓ COMPLETED
### Phase 4: Integrate in Ticker (PENDING - deferred to Issue #30)
...
### Phase 9: Documentation & Cleanup ✓ COMPLETED

Not just aspirational design docs. Status tracks reality:

Example E2E results:

Test Scenario: Manual async job execution (JB_MANUAL_E2E_LOG_TEST_123)

Results:
- ✅ 3 log entries written to task_logs table
- ✅ API endpoints returned correct hierarchical data

Sample Captured Logs:
stage: read_jd            | level: info  | Reading job description...
stage: extract_requirements | level: info  | Extracting with llama3.2:3b...
stage: extract            | level: error | file not found: file:/tmp/test-jd.txt

This is documentation that proves completion, not just claims it.

Cross-Reference Dense

Every doc links to related docs with context:

config-panel.md:

Architecture Reference: For backend config system architecture, see [docs/architecture/config-system.md]

task-logging.md:

Related Documentation

What this means: No doc is an island. New developers (or LLMs) can follow breadcrumbs.


The Solo Developer Reality

Based on Issue #30 and direct confirmation

Backend-First Development

Current state:

From Issue #30:

The Pulse panel is heavily WIP and currently broken:

This is remarkable transparency. Most projects would say "known issues" or "needs refinement."

Instead: "heavily WIP and currently broken" with explicit broken features listed.

What this reveals:

Why The Documentation Is So Good

When you're working solo:

The decision transparency makes sense: You're explaining to yourself why you chose X over Y, so when you revisit in 6 months, you don't question the decision without understanding the context.

The Frontend Gap

Issue #30 Priority 1: Fix broken functionality (integration stability)

The problem: WebSocket updates, task hierarchy, job polling, execution history—each works in isolation, all break together.

Likely causes:

The fix: Needs investigation (high priority). Then state management refactor or integration testing.

The need: Frontend developer to complement backend expertise.


Implementation Discipline

Based on task-logging.md, config-system.md

The LogCapturingEmitter Pattern

Problem: Need to log all job execution emissions without modifying existing code.

Solution: Decorator pattern—wrap existing emitter:

// Before:
emitter := async.NewJobProgressEmitter(job, queue, h.streamBroadcaster)

// After:
baseEmitter := async.NewJobProgressEmitter(job, queue, h.streamBroadcaster)
emitter := ix.NewLogCapturingEmitter(baseEmitter, h.db, job.ID)

Why this is good:

Decision doc explains alternative:

Alternative considered: Modify JobProgressEmitter directly

This is textbook Gang of Four. But more importantly: It's documented with rationale.

Test Coverage Where It Matters

task-logging.md shows:

From user: "Logging is critical" (explaining why test coverage is high here)

Pattern: Test coverage follows importance, not dogma.

The "No Truncation" Decision

From task-logging.md:

Decision: Store full logs without size limits

Rationale:

Risk mitigation:

This is responsible unlimited storage:


The Gap Between Vision and Reality

Vision (From Docs)

config-panel.md future sections:

task-logging.md future:

Reality (From Issue #30)

Current broken state:

Work in progress:

Why This Gap Is Healthy

The vision guides architecture choices NOW:

Implementation catches up incrementally:

The mitigation:

This is strategic incrementalism:


Final Synthesis

This Is Conviction Software Built Solo

Evidence:

The architecture is sound. The implementation is incomplete. The gap is acknowledged and tracked.

Configuration Is A First-Class Citizen

Not just "settings"—it's a debuggable dataflow system:

This reveals production operations thinking:

Documentation Is An Investment

Every doc includes:

This pays off:

The Path Forward

Immediate (from Issue #30):

  1. Fix Pulse frontend integration (highest priority)
  2. Investigate WebSocket/polling conflicts
  3. Add integration test suite
  4. Consider state management refactor

Near-term:

Long-term (tracked in GitHub Issues):

The key: Fix integration before adding features. Stable foundation first.


This analysis is based on migrating 10 issues, exploring the codebase architecture, reading config-system.md, config-panel.md, task-logging.md, Issue #30, and direct conversation with the developer. It represents honest assessment, not marketing copy.