Design Principles
The principles that guide Edda Stack design.
1. Provenance Matters
Every piece of knowledge traces to its origin.
Why
- Verification — Know where knowledge came from
- Attribution — Credit contributors
- Context — Understand when/why it was captured
- Updates — Find related observations when knowledge changes
How
Edda Entry: "Stripe uses cents"
├── Verified by: alice@example.com (2024-01-15)
├── Source: Ember entry ember_abc123
│ └── Source: Kindling observation obs_xyz789
│ ├── Captured: 2024-01-14T10:30:00Z
│ ├── Actor: bob@example.com
│ └── Context: src/payments/checkout.ts
2. Progressive Refinement
Raw → Candidate → Verified
Why
- Signal vs Noise — Not everything deserves curation
- Quality — Each layer adds verification
- Scalability — Low friction capture, high quality output
- Natural Selection — Valuable knowledge surfaces naturally
How
100 observations captured (Kindling)
↓ Promotion
20 candidates reviewed (Ember)
↓ Verification
5 entries curated (Edda)
3. Human in the Loop
AI assists; humans verify.
Why
- Accuracy — AI can be wrong
- Nuance — Context matters
- Trust — Team trusts human-verified knowledge
- Learning — Humans learn through review
How
AI suggests:
- "This observation might be worth promoting"
- "This seems similar to existing entry X"
- "Consider adding to category Y"
Humans decide:
- Approve/reject promotions
- Verify accuracy
- Edit and improve
4. Mechanical First
Exact retrieval before semantic search.
Why
- Predictability — Find what you stored
- Debuggability — Understand why results appear
- Speed — Simple search is fast
- Foundation — Semantic optional, not required
How
# Mechanical: exact match
kindling search "OAuth2 PKCE"
→ Returns observations containing "OAuth2 PKCE"
# Semantic (future): understanding
kindling search --semantic "authentication flow for SPAs"
→ Returns observations about OAuth2, PKCE, token handling...
5. Local-First
Data lives on your machine by default.
Why
- Privacy — Your observations stay yours
- Speed — No network latency
- Reliability — Works offline
- Control — You own your data
How
~/.kindling/
├── capsules/
│ └── my-project.db # Your data, your machine
└── config.json
Sync and sharing are opt-in, not default.
6. Minimal Friction
Capture should be instant.
Why
- Timing — Context is freshest immediately
- Adoption — Tools that interrupt get abandoned
- Volume — More capture = more knowledge
How
# One command, done
kindling observe "The API rate limits at 100/min"
# Or even faster
/m "The API rate limits at 100/min"
7. Composable
Each layer works independently.
Why
- Adoption — Start with what you need
- Flexibility — Mix with other tools
- Testing — Verify each layer
- Evolution — Upgrade independently
How
Kindling works without Ember or Edda:
kindling observe "..."
kindling search "..."
kindling export
Add Ember later. Add Edda later. Or don't.
8. Team Scale
Individual → Team → Organisation
Why
- Solo value — Useful for one person
- Team value — Multiplied when shared
- Org value — Compound knowledge asset
How
Developer captures → Kindling (personal)
↓
Team promotes → Ember (team-visible)
↓
Org verifies → Edda (org-wide)
Next: Roadmap →