wekan/docs/Security/PerUserDataAudit2025-12-23/QUICK_START.md
Lauri Ojansivu a039bb1066
Some checks are pending
Docker / build (push) Waiting to run
Docker Image CI / build (push) Waiting to run
Release Charts / release (push) Waiting to run
Test suite / Meteor tests (push) Waiting to run
Test suite / Coverage report (push) Blocked by required conditions
Per-User and Board-level data save fixes. Part 3.
Thanks to xet7 !
2025-12-23 09:03:41 +02:00

5.8 KiB

QUICK START - Data Persistence Architecture (2025-12-23)

STATUS: Phase 1 Complete
LOCATION: /home/wekan/repos/wekan/docs/Security/PerUserDataAudit2025-12-23/


🎯 The Change in 1 Sentence

Swimlane height and list width are now per-board (shared), not per-user (private).


📝 What Changed

Swimlanes (swimlanes.js)

 ADDED: height: { type: Number, default: -1, range: -1 or 50-2000 }
📍 Line: ~108-130

Lists (lists.js)

 ADDED: width: { type: Number, default: 272, range: 100-1000 }
📍 Line: ~162-182

Cards, Checklists, ChecklistItems

 NO CHANGE - Positions already per-board in sort field

📊 Per-Board vs Per-User Quick Reference

PER-BOARD (All Users See Same)

  • Swimlane height
  • List width
  • Card/checklist/checklistItem positions
  • All titles, colors, descriptions

🔒 PER-USER (Only You See Yours)

  • Collapsed swimlanes (yes/no)
  • Collapsed lists (yes/no)
  • Hidden label text (yes/no)

Need File Time
Quick overview README.md 5 min
For management EXECUTIVE_SUMMARY.md 5 min
Current status CURRENT_STATUS.md 5 min
Full architecture DATA_PERSISTENCE_ARCHITECTURE.md 15 min
How to implement IMPLEMENTATION_GUIDE.md 20 min
Verify changes SCHEMA_CHANGES_VERIFICATION.md 10 min
Quick lookup QUICK_REFERENCE.md 3 min
What's done COMPLETION_SUMMARY.md 10 min

What's Complete (Phase 1)

  • Schema: Added height to swimlanes
  • Schema: Added width to lists
  • Validation: Both fields validate ranges
  • Documentation: 12 comprehensive guides
  • Backward compatible: Both fields optional

What's Left (Phases 2-4)

  • Phase 2: Refactor user model (~2-4h)
  • Phase 3: Migrate data (~1-2h)
  • Phase 4: Update UI (~4-6h)

See IMPLEMENTATION_GUIDE.md for details


🔍 Quick Facts

Item Value
Files Modified 2 (swimlanes.js, lists.js)
Fields Added 2 (height, width)
Documentation Files 12 (4,400+ lines)
Validation Rules 2 (range checks)
Backward Compatible Yes
Data Loss Risk None
Time to Read Docs ~1 hour
Time to Implement Phase 2 ~2-4 hours

🚀 Success Criteria

Per-board height/width storage
Per-user collapse/visibility only
Validation enforced
Backward compatible
Documentation complete
Implementation guidance provided


🎓 For Team Members

New to this?

  1. Read: README.md (5 min)
  2. Skim: CURRENT_STATUS.md (5 min)
  3. Reference: DATA_PERSISTENCE_ARCHITECTURE.md as needed

Implementing Phase 2?

  1. Read: IMPLEMENTATION_GUIDE.md Section 2
  2. Code: Follow exact steps
  3. Test: Use provided checklist

Reviewing changes?

  1. Check: SCHEMA_CHANGES_VERIFICATION.md
  2. Review: swimlanes.js and lists.js
  3. Verify: Validation logic

💾 Files Modified

/home/wekan/repos/wekan/
├── models/
│   ├── swimlanes.js     ✅ height field added
│   ├── lists.js         ✅ width field added
│   ├── cards.js         ✅ no change (already correct)
│   ├── checklists.js    ✅ no change (already correct)
│   └── checklistItems.js ✅ no change (already correct)
└── docs/Security/PerUserDataAudit2025-12-23/
    ├── README.md
    ├── EXECUTIVE_SUMMARY.md
    ├── COMPLETION_SUMMARY.md
    ├── CURRENT_STATUS.md
    ├── DATA_PERSISTENCE_ARCHITECTURE.md
    ├── IMPLEMENTATION_GUIDE.md
    ├── SCHEMA_CHANGES_VERIFICATION.md
    ├── QUICK_REFERENCE.md (original)
    └── [7 other docs from earlier phases]

🧪 Quick Test

// Test swimlane height validation
Swimlanes.insert({ boardId: 'b1', height: -1 })       // ✅ OK (auto)
Swimlanes.insert({ boardId: 'b1', height: 100 })      // ✅ OK (valid)
Swimlanes.insert({ boardId: 'b1', height: 25 })       // ❌ FAILS (too small)
Swimlanes.insert({ boardId: 'b1', height: 3000 })     // ❌ FAILS (too large)

// Test list width validation
Lists.insert({ boardId: 'b1', width: 272 })           // ✅ OK (default)
Lists.insert({ boardId: 'b1', width: 500 })           // ✅ OK (valid)
Lists.insert({ boardId: 'b1', width: 50 })            // ❌ FAILS (too small)
Lists.insert({ boardId: 'b1', width: 2000 })          // ❌ FAILS (too large)

📞 Questions?

Question Answer Location
What changed? COMPLETION_SUMMARY.md
Why did it change? EXECUTIVE_SUMMARY.md
What's per-board? DATA_PERSISTENCE_ARCHITECTURE.md
What's per-user? DATA_PERSISTENCE_ARCHITECTURE.md
How do I implement Phase 2? IMPLEMENTATION_GUIDE.md
Is it backward compatible? SCHEMA_CHANGES_VERIFICATION.md

🎯 Next Steps

  1. Read the docs (1 hour)

  2. Review code changes (15 min)

    • Check swimlanes.js (line ~108-130)
    • Check lists.js (line ~162-182)
  3. Plan Phase 2 (1 hour)


Status: READY FOR PHASE 2