refactor: reorganize lens directory structure

Symmetric layout for review lenses:
- ~/.config/lenses/code/  <- code-review lenses
- ~/.config/lenses/ops/   <- ops-review lenses

Updated:
- modules/ai-skills.nix deployment paths
- skills/code-review/SKILL.md lens references
- skills/code-review/lenses/README.md examples

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
dan 2026-01-01 21:25:01 -08:00
parent 1e9d6cb93d
commit f33f7ae690
5 changed files with 10 additions and 11 deletions

View file

@ -122,5 +122,5 @@
{"id":"skills-wm9","title":"Research Steve Yegge's orchestration work","description":"Steve Yegge is working on something new related to AI orchestration. Research what it is and how it might inform our skills+molecules integration design.\n\nBlocks: skills-hin (ADR finalization)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T02:41:47.848905848-05:00","updated_at":"2025-12-24T02:42:24.40239935-05:00","closed_at":"2025-12-24T02:42:24.40239935-05:00","close_reason":"Not needed - just parking the ADR work"}
{"id":"skills-x2l","title":"Investigate hooks for parallel orch queries","description":"When using orch skill, it would be useful to spin off multiple model queries in parallel automatically (e.g., gemini + gpt simultaneously). Explore if Claude Code hooks can trigger parallel background processes when the orch skill is invoked.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-06T19:29:00.165752425-08:00","updated_at":"2025-12-29T15:49:43.831970326-05:00","closed_at":"2025-12-29T15:49:43.831970326-05:00","close_reason":"Investigated. Hooks are synchronous with 60s timeout - unsuitable for background orch queries. Alternatives: (1) SessionStart hook for initial consensus, (2) Explicit skill invocation, (3) PostToolUse for validation. orch consensus already runs models in parallel internally."}
{"id":"skills-x33","title":"Add tests for branch name generation","description":"File: .specify/scripts/bash/create-new-feature.sh (lines 137-181)\n\nCritical logic with NO test coverage:\n- Word filtering with stop-words\n- Acronym detection\n- Unicode/special character handling\n- Max length boundary (244 bytes)\n- Empty/single-word descriptions\n\nRisk: HIGH - affects all branch creation\n\nFix:\n- Create test suite with edge cases\n- Test stop-word filtering accuracy\n- Test boundary conditions\n\nSeverity: HIGH","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T02:51:00.311664646-05:00","updated_at":"2025-12-24T02:51:00.311664646-05:00"}
{"id":"skills-ybq","title":"Reorganize lens directory structure","description":"Current structure puts ops lenses as subdirectory of code-review lenses:\n\n```\n~/.config/lenses/ \u003c- code-review lenses\n~/.config/lenses/ops/ \u003c- ops-review lenses\n```\n\nThis is asymmetric. Consider:\n\nOption A: Separate top-level directories\n```\n~/.config/lenses/code-review/\n~/.config/lenses/ops-review/\n```\n\nOption B: Keep flat but with prefixes\n```\n~/.config/lenses/code-*.md\n~/.config/lenses/ops-*.md\n```\n\nOption C: Per-skill lens directories\n```\n~/.claude/skills/code-review/lenses/\n~/.claude/skills/ops-review/lenses/\n```\n\nRequires updating:\n- modules/ai-skills.nix (deployment paths)\n- skills/code-review/SKILL.md (expected paths)\n- skills/ops-review/SKILL.md (expected paths)","status":"open","priority":3,"issue_type":"task","created_at":"2026-01-01T21:57:06.726997606-05:00","created_by":"dan","updated_at":"2026-01-01T21:57:06.726997606-05:00"}
{"id":"skills-ybq","title":"Reorganize lens directory structure","description":"Current structure puts ops lenses as subdirectory of code-review lenses:\n\n```\n~/.config/lenses/ \u003c- code-review lenses\n~/.config/lenses/ops/ \u003c- ops-review lenses\n```\n\nThis is asymmetric. Consider:\n\nOption A: Separate top-level directories\n```\n~/.config/lenses/code-review/\n~/.config/lenses/ops-review/\n```\n\nOption B: Keep flat but with prefixes\n```\n~/.config/lenses/code-*.md\n~/.config/lenses/ops-*.md\n```\n\nOption C: Per-skill lens directories\n```\n~/.claude/skills/code-review/lenses/\n~/.claude/skills/ops-review/lenses/\n```\n\nRequires updating:\n- modules/ai-skills.nix (deployment paths)\n- skills/code-review/SKILL.md (expected paths)\n- skills/ops-review/SKILL.md (expected paths)","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-01T21:57:06.726997606-05:00","created_by":"dan","updated_at":"2026-01-02T00:24:53.647409845-05:00","closed_at":"2026-01-02T00:24:53.647409845-05:00","close_reason":"Reorganized lens directories: code-review → ~/.config/lenses/code/, ops-review → ~/.config/lenses/ops/. Updated ai-skills.nix, SKILL.md, and README references."}
{"id":"skills-yxv","title":"worklog: extract hardcoded path to variable","description":"SKILL.md repeats ~/.claude/skills/worklog/ path 4-5 times. Define SKILL_ROOT once, reference throughout. Found by bloat+smells lens review.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-25T02:03:15.831699081-05:00","updated_at":"2025-12-27T10:05:51.532722628-05:00","closed_at":"2025-12-27T10:05:51.532722628-05:00","close_reason":"Closed"}

View file

@ -1 +1 @@
skills-8ma
skills-ybq

View file

@ -89,13 +89,12 @@ in {
)
))
# Lenses for orch (sourced from code-review skill)
# Lenses for orch (separate subdirectories per skill)
(mkIf cfg.enableLenses {
".config/lenses" = {
".config/lenses/code" = {
source = "${cfg.skillsPath}/code-review/lenses";
recursive = true;
};
# Ops lenses in separate subdirectory
".config/lenses/ops" = {
source = "${cfg.skillsPath}/ops-review/lenses";
recursive = true;

View file

@ -26,7 +26,7 @@ The skill accepts an optional target:
## Available Lenses
Lenses are focused review prompts located in `~/.config/lenses/`:
Lenses are focused review prompts located in `~/.config/lenses/code/`:
| Lens | Focus |
|------|-------|
@ -50,7 +50,7 @@ Lenses are focused review prompts located in `~/.config/lenses/`:
### Phase 2: Lens Execution
For each lens, analyze the target files:
1. Read the lens prompt from `~/.config/lenses/{lens}.md`
1. Read the lens prompt from `~/.config/lenses/code/{lens}.md`
2. Apply the lens to the target code
3. Collect findings in structured format
@ -182,6 +182,6 @@ max_file_size_kb: 500 # Skip files larger than this
## Integration
- **Lenses**: Read from `~/.config/lenses/*.md`
- **Lenses**: Read from `~/.config/lenses/code/*.md`
- **Issue Tracking**: Uses `bd create` for beads issues
- **Orch**: Optional consensus filtering via `orch consensus`

View file

@ -10,19 +10,19 @@ Each lens examines code through one specific concern. Multiply lenses × models
**Single lens, multiple models:**
```bash
orch consensus "$(cat ~/.config/lenses/bloat.md)" flash gemini gpt --file src/target.py
orch consensus "$(cat ~/.config/lenses/code/bloat.md)" flash gemini gpt --file src/target.py
```
**Pipe file content:**
```bash
cat src/target.py | orch consensus "$(cat ~/.config/lenses/smells.md)" flash gemini
cat src/target.py | orch consensus "$(cat ~/.config/lenses/code/smells.md)" flash gemini
```
**Convergent review (multiple passes):**
```bash
for lens in bloat smells dead-code; do
echo "=== $lens ==="
orch chat "$(cat ~/.config/lenses/$lens.md)" --model gemini --file src/target.py
orch chat "$(cat ~/.config/lenses/code/$lens.md)" --model gemini --file src/target.py
done
```