Skip to content

feat: add folder support for organizing secrets (Phase 2c-X2)#167

Merged
forest6511 merged 2 commits intomainfrom
feature/folder-support
Jan 22, 2026
Merged

feat: add folder support for organizing secrets (Phase 2c-X2)#167
forest6511 merged 2 commits intomainfrom
feature/folder-support

Conversation

@forest6511
Copy link
Owner

Summary

Implements folder feature per ADR-007 specification for organizing secrets into hierarchical folders.

Features Added

Vault Package:

  • Folder CRUD operations (Create, Get, Update, Delete, List)
  • MoveSecretToFolder and ListSecretsInFolder operations
  • Path resolution (e.g., "Work/APIs") with max depth 10
  • Unique name constraint (case-insensitive per parent)
  • Database schema v5 with folders table

CLI Commands:

  • folder create <name> - Create folder with optional parent/icon/color
  • folder list - List folders with tree view
  • folder delete <id> - Delete folder (--force for non-empty)
  • folder rename <id> <name> - Rename folder
  • folder move <id> --parent <parent> - Move folder
  • folder info <id> - Show folder details
  • set --folder <path> - Set secret in folder
  • list --folder <path> - Filter by folder

MCP Tools:

  • folder_list - List folders with metadata
  • folder_create - Create new folder
  • folder_move_secret - Move secret to folder
  • secret_list now includes folder_id filter and folder_path

Test plan

  • Unit tests: 9 test functions with 29 subtests
  • Coverage: folder CRUD, validation, path resolution, depth limit
  • Full test suite passes
  • Manual testing: CLI commands
  • Manual testing: MCP tools

Related

  • ADR-007: Folder Feature Design
  • Phase 2c-X2 in project roadmap

@codecov
Copy link

codecov bot commented Jan 19, 2026

Codecov Report

❌ Patch coverage is 62.96296% with 190 lines in your changes missing coverage. Please review.
✅ Project coverage is 66.37%. Comparing base (d9c23fb) to head (e00983a).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
pkg/vault/folder.go 62.50% 90 Missing and 57 partials ⚠️
pkg/vault/migration.go 60.60% 14 Missing and 12 partials ⚠️
pkg/vault/vault.go 69.09% 10 Missing and 7 partials ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #167      +/-   ##
==========================================
- Coverage   67.02%   66.37%   -0.65%     
==========================================
  Files          18       19       +1     
  Lines        2920     3423     +503     
==========================================
+ Hits         1957     2272     +315     
- Misses        690      802     +112     
- Partials      273      349      +76     
Flag Coverage Δ
unittests 66.37% <62.96%> (-0.65%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
pkg/security/score.go 0.00% <ø> (ø)
pkg/vault/vault.go 67.02% <69.09%> (-0.23%) ⬇️
pkg/vault/migration.go 57.07% <60.60%> (+1.52%) ⬆️
pkg/vault/folder.go 62.50% <62.50%> (ø)

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Implements folder feature per ADR-007 specification:

**Vault Package:**
- Add Folder struct and CRUD operations (Create, Get, Update, Delete, List)
- Add MoveSecretToFolder and ListSecretsInFolder operations
- Add path resolution (e.g., "Work/APIs") with max depth 10
- Add unique name constraint (case-insensitive per parent)
- Database schema v5 with folders table and folder_id in secrets

**CLI Commands:**
- `folder create <name>` - Create folder with optional parent/icon/color
- `folder list` - List folders with tree view
- `folder delete <id>` - Delete folder (--force for non-empty)
- `folder rename <id> <name>` - Rename folder
- `folder move <id> --parent <parent>` - Move folder
- `folder info <id>` - Show folder details
- `set --folder <path>` / `--folder-id <id>` - Set secret in folder
- `list --folder <path>` / `--folder-id <id>` - Filter by folder

**MCP Tools:**
- `folder_list` - List folders with metadata
- `folder_create` - Create new folder
- `folder_move_secret` - Move secret to folder
- `secret_list` now includes folder_id filter and folder_path

**Tests:**
- 9 test functions with 29 subtests
- Coverage: folder CRUD, validation, path resolution, depth limit
- Use defer for rows.Close() where appropriate
- Keep manual Close() in loop where defer causes resource leak
- Disable ifElseChain and unnamedResult for cleaner pointer-nil patterns
- Exclude sqlclosecheck for folder.go (manual close required in loops)
- Exclude unparam for test files
@forest6511 forest6511 force-pushed the feature/folder-support branch from 6c7f65a to e00983a Compare January 22, 2026 15:27
@forest6511 forest6511 merged commit 1f1e476 into main Jan 22, 2026
11 of 13 checks passed
@forest6511 forest6511 deleted the feature/folder-support branch January 22, 2026 15:36
forest6511 added a commit that referenced this pull request Jan 22, 2026
- Competitor Import: 1Password/Bitwarden/LastPass support (#168)
- Folder Organization: CLI and MCP tools (#167)
- MCP server version updated to 0.8.8
forest6511 added a commit that referenced this pull request Jan 22, 2026
- Competitor Import: 1Password/Bitwarden/LastPass support (#168)
- Folder Organization: CLI and MCP tools (#167)
- MCP server version updated to 0.8.8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant