Last updated: 2026-03-02 Living document — updated as decisions are made or revised
Date: 2026-02-27 Status: Accepted Context: Need to separate the idea from the tool so others can build competing implementations.
Decision: eNSAID (Environment for NeSy-Agentic Integrated Development) is a specification. PanLL is the reference implementation. The spec lives in its own repo with its own governance. PanLL claims IMPLEMENTS eNSAID and that claim is verifiable.
Consequences:
- Contributors contribute to the eNSAID ecosystem, not just PanLL
- Every panel written works with any compliant eNSAID environment
- Pattern: HTTP → Apache/Nginx/Caddy. SQL → Postgres/MySQL. LSP → every language server.
- If someone builds a better eNSAID, the idea survives
The V for Vendetta Principle: You can kill PanLL. You cannot kill the idea. Ideas are bulletproof.
Date: 2026-01-15 Status: Accepted Context: Traditional IDEs treat AI as subordinate tool. Need genuine co-working.
Decision: Model Human and Machine as Binary Star system — two gravitationally bound entities orbiting a shared Barycentre (the task). Three panels: Panel-L (Symbolic/Human constraints), Panel-N (Neural/Machine reasoning), Panel-W (World/Barycentre results). Neither Human nor Machine is primary.
Consequences:
- Operator sees Machine reasoning in real-time (Panel-N)
- Machine constrained by symbolic rules visible to both (Panel-L)
- Shared output space validates mutual understanding (Panel-W)
- Higher cognitive load initially, offset by Vexometer monitoring
Date: 2026-01-20 Status: Accepted Context: Complex UI with 14 panels, cognitive governance, orbital tracking needs deterministic state.
Decision: Model-Update-View with Commands and Subscriptions. Single immutable model record. All state changes flow through typed messages. Custom TEA implementation extended for PanLL's needs.
Technical detail: The main model type composes all domain slices via include re-exports. Each panel has its own Model/Engine/Cmd/Component files following a proven 8-file pattern.
Date: 2026-03-01 Status: Accepted Context: Need a repeatable, consistent pattern for adding panels.
Decision: Every panel follows exactly 8 files:
| Layer | ReScript | Rust (if backend needed) |
|---|---|---|
| Types | src/model/XModel.res |
src-tauri/src/x/types.rs |
| Engine | src/core/XEngine.res |
— |
| Commands | src/commands/XCmd.res |
src-tauri/src/x/commands.rs |
| Component | src/components/X.res |
src-tauri/src/x/mod.rs |
Plus wiring into 5 global files: Msg.res, Model.res, Update.res, View.res, main.rs
Consequences:
- Panel Minter can generate this structure automatically
- Every panel is structurally identical — contributors know where everything is
- Engine files are pure functions (no side effects) — fully testable
- Cmd files handle Tauri IPC — all effects isolated
Date: 2026-03-02 Status: Accepted Context: Third-party panels could be malicious or poorly written. Core panels should run fast.
Decision: Three isolation tiers, selectable per panel via the Provisioner:
| Tier | Runtime | Security | Performance | Use Case |
|---|---|---|---|---|
| Native | In-process (Tauri webview) | Full trust, hash-verified | Fastest | Core 14 panels |
| Standard Pod | Alpine + Podman container | Process isolation, network limited | Moderate overhead | Community panels, trusted |
| Hardened Pod | Stapeln + Chainguard image | Full Stapeln security stack, minimal attack surface | Higher overhead | Untrusted/experimental panels |
Consequences:
- Core panels default to Native (no container overhead)
- Community panels default to StandardPod
- Users can override in Provisioner Configurator tab
- Clean uninstall: delete the pod, everything goes
- Supply chain commitment: containers are not just security, they're reversibility
Date: 2026-03-02 Status: Accepted Context: Need to show who wrote each line and how trustworthy it is.
Decision: Always-visible ambient trust surface (not a toggle). Parses git blame + Co-Authored-By headers. Fixed semantic colour meanings:
| Level | Colour | Meaning | Detection |
|---|---|---|---|
| Verified | Green | Formally verified, proof-checked, no believe_me | Proof markers in commit |
| Human-Reviewed | Blue | Human author or human commit after AI | No co-author, or subsequent human commit |
| AI-Assisted | Amber | Co-authored, no subsequent human review | Co-Authored-By present, no later human commit |
| Unreviewed AI | Red | Pure AI, no human in chain | AI author, no human review |
| Unknown | Grey | Pre-git or no attribution | No blame data available |
Key constraint: Colours swap hues for accessibility palettes (4 palettes: Standard, Deuteranopia, Protanopia, High Contrast) but NEVER swap meanings. Green always means verified, regardless of the actual hue displayed.
Hostile UX: Unreviewed AI code gets pulsing red borders and increased visual friction. Users CAN suppress this, but the suppression action is itself visible ("pulled the smoke alarm battery").
Date: 2026-01-25 Status: Accepted Context: Co-orbit increases cognitive load. Need automated monitoring.
Decision: Four interconnected governance systems:
- Anti-Crash Gate — Circuit breaker between Panel-N output and Panel-W workspace. Every neural token validated against Panel-L constraints before reaching shared space.
- Vexometer — Friction monitor tracking cancellations, corrections, dwell time. Index 0.0–1.0 triggers anti-inflammatory UI adjustments.
- Information Humidity — UI density adapts to stress. High humidity (relaxed) = more detail. Low humidity (stressed) = essential info only.
- Orbital Drift Aura — Ambient visual (background colour shift) indicating system stability. Visible without looking at any specific panel.
These feed each other: Feedback-O-Tron → Vexometer → Humidity → UI adaptation.
Date: 2026-02-27 Status: Accepted Context: Accessibility is usually bolted on after launch. PanLL should be different.
Decision: Accessibility is in the CORE infrastructure, not in individual panels:
- Panel Minter produces accessible panels by default (harder to make inaccessible than accessible)
- Every colour system ships with 4 accessibility palettes
- Every keyboard interaction works without a mouse
- Screen reader semantics (ARIA) in every component template
- Renamed broader concept to "information/cognitive ergonomics" (accessibility is a subset)
The discipline covers:
- Perceptual load management (how much information before overload)
- Cognitive friction reduction (Vexometer measures this)
- Task-flow preservation (panels don't interrupt flow)
- Multi-modal presentation (visual + auditory + haptic)
- Expertise scaffolding (novice → expert gradual complexity reveal)
Date: 2026-02-27 Status: Accepted Context: Third-party panels could be bad. PanLL shouldn't take the blame.
Decision: Two-tier trust model:
-
PanLL Core is hash-locked — TEA framework, Tea_Vdom, Tea_Html, panel switcher, HAR are content-hashed. If core hashes don't match:
CORE_HASH_MISMATCH, instantly detectable. Idris2 ABI layer makes core provably correct. -
Panels are author-signed — Each panel manifest:
author: <name>, signed: <key>. PanLL doesn't approve third-party panels, just hosts them. Blame is cryptographically attributable.
Result: Complaint is never "PanLL is broken". Either "core hash is wrong" (tampered) or "this panel is rubbish" (author's signature proves it).
Date: 2026-03-02 Status: Accepted Context: Growing panel catalogue needs organisation that invites contribution.
Decision: Linnaean/cladistic hierarchy with EMPTY BRANCHES visible:
| Level | Example |
|---|---|
| Kingdom | Development, Operations, Governance, Analysis |
| Phylum | Security, Languages, Databases, Infrastructure |
| Class | Static Analysis, Runtime Monitoring, Formal Verification |
| Order | Vulnerability Scanning, Compliance, Dependency Audit |
| Family | Web Security, Network Security, Supply Chain |
| Genus | Cloudflare Management, WordPress Hardening |
| Species | CloudGuard, Wharf |
Empty nodes include metadata (description, expected Panel-L/N/W mapping, suggested backend) — they're specification slots, not stubs. Contributors see gaps and naturally fill them.
Date: 2026-03-02 Status: Accepted Context: Need first adopter community that wants to extend, not replace.
Decision: Target the Notepad++ community first:
- Loyal, underserved users who know their tool is limited
- Not competing with VS Code's market
- Extension culture — they already think in plugins
- Metaphor: PanLL doesn't replace Notepad++ — it wraps around it. "The bionic Notepad++ user in a mech suit."
Date: 2026-03-02 Status: Proposed Context: Simple feedback form is insufficient. Need structured sentiment analysis.
Decision: Expand Feedback-O-Tron into three-tier system:
- Panel Pulse — Opinion mining that extracts structured sentiment from feedback
- Prioritisation engine — Maps sentiment to panel development priority
- Reusable infrastructure — Same system usable by any product, not just PanLL
Connects to cognitive governance: Feedback-O-Tron → Vexometer → Humidity → UI adaptation.
Date: 2026-03-02 Status: Accepted Context: Need a framework for prioritising development work across the ecosystem.
Decision: Three-axis scoring system:
Axis 1 — Scope (what is wanted):
must(5) — Required for minimum viableintend(3) — Planned but deferrablelike(1) — Nice to have
Axis 2 — Maintenance (type of work):
corrective(5) — Fixing something brokenadaptive(3) — Adapting to new requirementsperfective(1) — Improving what works
Axis 3 — Audit (what gets checked):
systems(5) — Core architecture reviewcompliance(3) — Standards/policy checkeffects(1) — Impact assessment
Combined score guides priority: must+corrective+systems = 15 (do immediately), like+perfective+effects = 3 (backlog).
Date: 2026-03-02 Status: Accepted Context: Need sustainable funding without compromising open source.
Decision: Everything is PMPL-1.0-or-later. Funding buys acceleration, not access. The pitch: "Is it really worth trying to compete with a crazy academic, or just give him the money?" The ecosystem is so far along it's cheaper to fund than to fork.
Date: 2026-03-02 Status: Accepted (standing reference) Context: Lessons learned from building 107 ReScript files.
Key patterns:
Tea_Cmd.call(callbacks => { ... callbacks.enqueue(tagger(result)) ... })for Tauri commands@module("@tauri-apps/api/core") external invokefor Tauri bindingsinput(attrs, list{})— Tea_Html input takes 2 args, not 1Attrs.ariaHidden(true)— takes bool, not stringAttrs.style("width", "50%")— two args (key, value), not single stringList.fromArrayfor array→list conversion- No emoji literals in ReScript (use text like
[V],[!]) - Type constraints in switch arms need parens:
(Installed: panelInstallStatus) exceptionandconstraintare reserved — usedomainExcandrule
Date: 2026-03-02 Status: Accepted Context: The Provenance Map shows who wrote code (passive, read-only). Developers need to actively annotate, attribute, and track the development process over time — for transparency, education, diagnostics, and licensing compliance.
Decision: Build Code MRI as a four-layer system integrated into PanLL core:
Layer 0 — VoiceTag (Input) Interactive annotation on code regions. Voice-activated (Web Speech API, browser-native) but also works via keyboard/mouse. Simple grammar: "line 24 to 34 tag todo", "delete tag 7", "who wrote line 50", "attribute ai claude". Tags are numbered per file. Every tag records who created it (human voice, human keyboard, AI agent, which AI).
Layer 1 — Blake3 Provenance Chain (Tamper Resistance) Every code region gets a Blake3 hash covering: content + author + timestamp + parent hash. Imported code carries its provenance chain. Exported code includes PanLL markings. Strip attribution? Hash mismatch — instantly detectable. This is the Turnitin model flipped: collaborative attribution, not adversarial plagiarism detection.
Layer 2 — VeriSimDB Development Timeline (Time Machine) Development-as-time-series database. Stores snapshots of: lines of code, dangling TODOs/FIXMEs, open tags, libraries in use, failed type checks, panic-attack findings, AI attribution percentage, Vexometer readings, tag resolution time. Scrub a timeline slider to see the project state at any point — like the end credits of a worldbuilder documentary. Active rollback to any state within the database.
Layer 3 — Pattern Diagnostics & Gamification Derive development patterns from timeline data: "this developer writes boilerplate manually — slower but zero FIXMEs", "this AI session left 12 unresolved tags — bullshit detector", "velocity increased 40% after switching to ReScript." Victory conditions: all TODOs resolved, zero panic-attack findings, Vexometer below threshold. Badges, streaks, diagnostic not patronising. Admin enforcement mode for education (universities can require attribution tracking on all submissions).
Layer 4 — Attribution-to-Licensing Link PMPL (based on MPL) requires source attribution. Blake3 provenance chains auto-generate license attribution sections: "Lines 1-50: Jonathan D.A. Jewell. Lines 51-80: Claude Opus 4.6 (AI-assisted, human-reviewed). Lines 81-120: imported from proven-servers (PMPL-1.0-or-later)." Makes source-available requirements trivially verifiable.
The MRI Metaphor:
- Sees inside without being invasive (reads blame/tags, doesn't change code)
- Shows layers at different resolutions (file → region → line)
- Diagnostic (reveals patterns invisible to reading)
- Non-destructive (code not altered by scanning)
- Used by professionals to make better decisions
Consequences:
- VoiceTag (Layer 0) is the thin end of the wedge — buildable now, proves the concept
- Blake3 chain (Layer 1) extends existing Provenance Map infrastructure
- VeriSimDB timeline (Layer 2) dogfoods VeriSimDB as development analytics backend
- Diagnostics (Layer 3) feeds Hypatia (pattern analysis) and Vexometer (friction)
- License link (Layer 4) makes PMPL compliance automatic, not manual
- Admin mode makes PanLL viable for educational institutions (Turnitin for code, but honest)
- Import/export of provenance markings makes attribution portable across projects
Integration with existing PanLL:
- Provenance Map → Blake3 chain (extends trust levels with tamper resistance)
- Watcher → VoiceTag (file changes trigger tag review prompts)
- VeriSimDB → Timeline (dogfood the database as development analytics store)
- Hypatia → Diagnostics (pattern analysis on development behaviour, not just code)
- Vexometer → Diagnostics (friction history is a timeline metric)
- Provisioner → Admin mode (configurable per panel, enforceable per organisation)
Date: 2026-03-02 Status: Accepted Context: Code regions have different resource, ecological, and safety profiles. Developers need a way to mark regions as resource-sensitive and have the system adapt its behaviour accordingly — including adjusting the sensitivity of tools like panic-attack.
Decision: Extend VoiceTag with modal tags that change system behaviour, not just annotate:
Tag modes:
care-on— Mark a region as requiring extra scrutiny. Raises panic-attack sensitivity, increases type checking strictness, flags to agents as "handle with care." For safety-critical code, security-sensitive sections, or areas with known fragility.eco-mode— Mark a region as ecologically/resource non-viable. Flags excessive allocation, energy-intensive loops, or computationally wasteful patterns. Agents prioritise these for optimisation. The triaxial framework scores eco-tagged regions higher on themust × corrective × systemsaxis automatically.burden— Mark a constraint that is burdening the system. When panic-attack or type checking generates too much noise in a region,burdensays "I know this is a problem but the fix requires a serious rewrite — deprioritise alerts here until the rewrite is scheduled."
How it works with the triaxial framework:
- Tags create triaxial scoring adjustments automatically:
eco-modebumps scope tomust, maintenance tocorrective, audit tosystems(max priority) burdentags lower the audit axis toeffects(acknowledged, not ignored — just deprioritised)care-ontags bump the audit axis tosystems(full scrutiny)- The priority queue rebalances: eco-risk regions float to the top, burdened constraints sink to the backlog with visibility
Adaptive sensitivity:
- panic-attack findings in
care-onregions: severity bumped one level (medium → high) - panic-attack findings in
burdenregions: severity lowered one level (high → medium) with "[burden acknowledged]" annotation - Agent behaviour: when operating in
eco-moderegions, agents optimise for resource efficiency first, features second - Constraint tuning: if a type check or linter rule generates >N findings in a
burdenregion, auto-suppress with a visible "[N suppressed, burden tag active]" counter
Consequences:
- Resource constraints become first-class development concerns, not afterthoughts
- Developers can tune system sensitivity per region without global config changes
- The triaxial framework adapts automatically — no manual re-scoring needed
- All tag changes are logged in Code MRI timeline (visible, auditable, reversible)
- Cheap to implement: just additional tag types in VoiceTag + policy rules in the matching engine
Date: 2026-03-02 Status: Accepted Context: The hyperpolymath ecosystem has 265+ repos of its own tooling. PanLL should actively suggest using own tools where external alternatives are currently used, with policy enforcement based on tool readiness.
Decision: A dogfood management system with CRG-grade-driven policy:
Mechanism:
- Dogfood folder (configurable, default
~/Desktop/dogfood/or per-project.dogfood/): drop manifests describing available internal tools - Matching engine: watches imports/dependencies, suggests dogfood candidates when external alternatives detected
- Dashboard panel: which own tools are in use, which are gathering dust, usage trends over time
Policy levels (driven by CRG grade):
- Grade D+ (Alpha): Suggest — "proven-servers has a TLS component, you're using rustls directly"
- Grade E (Minimal): Warn — "QuandleDB is CRG E, proceed with caution"
- Grade X/F (Untested/Harmful): Ban — "Eclexia runtime is not ready, blocked unless override"
- Admin override: "I know this is grade E, proceeding anyway" (logged, visible in Code MRI)
- Insist: configurable per tool — "Stapeln MUST be used for container isolation" (no override)
Consequences:
- D→C grade transition requires actual dogfooding — this system tracks it
- Feeds Code MRI timeline: "switched from SQLite to VeriSimDB on March 5"
- Connects to Provisioner: dogfood policies per panel, per isolation tier
- Custom dashboards: teams build their own metrics ("Mike's Refactor Index")
- Research value: how developers adopt their own tools, where friction appears
Date: 2026-03-02 Status: Accepted Context: Need integrated capture system for screenshots, recordings, and demo/teaching packages within PanLL panels.
Decision: Capture module with Tauri backend providing:
- Save screenshot (any panel → PNG)
- Print panel (formatted output)
- Record panel sessions
- Demo package management (load/save/delete)
Implementation: src/model/CaptureModel.res (types), src/core/CaptureEngine.res (pure functions), src-tauri/src/capture/ (5 Tauri commands).
Date: 2026-03-02 Status: Accepted Context: Need persistent panel arrangements, groups, sessions, and execution modes for multi-monitor and multi-workflow support.
Decision: Workspace management layer providing:
- Named panel arrangements (save/load to disk)
- Panel groups with collective operations
- Session persistence and forking
- Execution modes (development, review, presentation)
- Checkpoint/restore for workspace state
Implementation: src/model/WorkspaceModel.res (~230 lines), src/core/WorkspaceEngine.res (~280 lines), src-tauri/src/workspace/ (7 Tauri commands including sysinfo).
Date: 2026-03-02 Status: Accepted Context: Need a flexible status bar that displays system info, build status, and panel-specific widgets.
Decision: Widget registry with positional layout:
- Widget kinds: text, icon, progress, separator, custom
- Configurable positions and visibility
- System info integration (CPU, memory, disk)
- Per-panel status widgets
Implementation: src/model/StatusBarModel.res (~75 lines), src/core/StatusBarEngine.res (~170 lines, widget registry + formatters).
Date: 2026-03-02 Status: Accepted Context: Panels display sensitive data (API keys, credentials, secrets). Need integrated redaction and vault.
Decision: Security module providing:
- Pattern-based redaction (regex patterns for API keys, tokens, passwords)
- Secret detection (scan panel content for leaked credentials)
- Vault storage (encrypted local vault via Tauri)
- Redaction modes: full, partial (show last 4), custom mask
Implementation: src/model/SecurityModel.res (~140 lines), src/core/SecurityEngine.res (~200 lines), src-tauri/src/security/ (5 Tauri commands).
Date: 2026-03-02 Status: Accepted Context: Need second-factor verification for destructive panel operations and Trustfile policy enforcement.
Decision: Integrated 2FA + Trustfile:
- Two-factor gates for destructive operations (delete, publish, deploy)
- Trustfile enforcement (PanLL reads
.machine_readable/contractiles/trust/Trustfile.a2ml) - Security level badges per panel (Kennel/Yard/Hunt from K9)
- Audit log of security-gated operations
Implementation: Combined with DD-026 in src-tauri/src/security/.
Design decisions are numbered sequentially. DD-019 through DD-021 and DD-023 are reserved (not yet assigned). Superseded decisions retain their number with status changed to "Superseded by DD-XXX".
SoT = panel-clades/ (Idris2 ABI + Zig FFI + a2ml clades). src-gossamer/ Rust = frozen legacy. Coprocessor = Axiom.jl 's organising approach (not code); backends: FPGA, DSP, math, physics, tensor, vector, I/O, audio, neural, crypto, quantum. oo7/jtv experimental, out of scope. See docs/decisions/ADR-0001-coprocessor-and-panel-clades-pivot.adoc.