The plan covers three tiers:
Feedback — Your assembler pattern and template consistency are strong. The main problems are: worklogs drifting into 200-line inline status reports (Apr 1 is the poster child), manual day-count arithmetic, nav sync falling behind, and a few partials that are either too monolithic or too static for daily inclusion.
Phase 1 (Core) — Apply the assembler pattern you already use in trackers to the 4 largest worklog partials (education.adoc, work-chla.adoc, urgent.adoc, morning.adoc). Each becomes a directory with an assembler + domain-specific sub-files. This gives you the granularity to add/remove/swap domains without editing monoliths.
Phase 2 (Automation) — Scripts to auto-calculate carryover Days, auto-sync nav entries, and maintain monthly indexes. Hooked into make new-day and make push.
Phase 3 (Optional) — Worklog weight classes (new-day-lite, new-day-ops) so weekends don't include empty CHLA sections.
The plan explicitly does NOT extract Session Accomplishments to partials (that's your day-unique narrative and should stay inline), doesn't create per-day partial files, and doesn't touch the tracker assembler pattern which is already correct.
● User approved Claude’s plan ⎿ Plan saved to: ~/.claude/plans/concurrent-jingling-bonbon.md · /plan to edit Worklog System Review & Granularity Enhancement Plan
Context
The domus-captures worklog system has been running for 3+ months (62+ worklogs, Jan-Apr 2026). The core architecture is sound — 8 worklog partials create consistent daily structure, and the assembler pattern for trackers (e.g., adhoc.adoc → adhoc/carryover.adoc) provides good separation. The user wants to push partials further for max scalability and manageability.
This plan addresses two things: (1) honest feedback on what's working and what's not, and (2) a concrete partial granularity enhancement.
--- Feedback: What's Working
-
Assembler pattern is excellent. The adhoc.adoc → tagged sub-files (carryover.adoc, tac.adoc, resolved.adoc) pattern is the right abstraction. Each file has one concern, the assembler composes them, and tags allow selective inclusion. This scales indefinitely.
-
Template consistency. Every worklog from make new-day has identical structure. 62 worklogs, same skeleton. That’s discipline.
-
Tracker decomposition is already deep. Personal trackers have 80+ files (tasks by status/domain, infrastructure by concern, life-admin by category, subscriptions by type, FOSS by domain). Education has 55+ skill trackers. This granularity is healthy — each file is small, independently maintainable, and composable.
-
The worklog is a dashboard, not just a diary. By including live trackers (carryover, priorities, tickets, projects), opening today’s worklog gives you current state across all domains. That’s high-value.
--- Feedback: What's Not Working
Problem 1: Worklogs Drift Into Inline Status Reports
Evidence: WRKLOG-2026-04-01 is 200 lines. Lines 52-163 are inline work priority details (MSCHAPv2 migration, Sentinel onboarding, Vocera RCA, Abnormal Security, Monad ETL) that duplicate/extend what should live in project partials.
Why this hurts: - That MSCHAPv2 context (tools table, action items, strategic notes) is trapped in a single day's worklog. Next time you need it, you're grep-ing through worklogs instead of reading a project partial. - It bypasses the work-chla.adoc partial that already includes projects.adoc[tag=p0]. You're writing a second version of the same information inline. - The worklog grows from a 30-line shell to a 200-line document, making it harder to scan.
The rule should be: If content describes state that persists beyond today, it belongs in a tracker or project partial. The worklog references it; it doesn't contain it.
Problem 2: Manual Day-Count Maintenance
The carryover table's Days column requires manual arithmetic every worklog. The Makefile reminds you, but it's still mental overhead on a daily cadence. 7 rows × daily calculation = 2,555 calculations/year. One script eliminates this entirely.
Problem 3: Nav Sync Is Manual and Falling Behind
April has 4 worklogs but only Apr 1 is in nav. sync-worklog-nav.sh generates output for copy-paste but doesn't write to nav.adoc. audit-worklogs.sh detects the drift but doesn't fix it. The gap between "detect" and "fix" means orphaned worklogs accumulate.
Problem 4: work-chla.adoc Has a Dead-End Notes Section
Line 39: _Day-specific work notes here._ — this placeholder is never used in practice. Instead, users write work notes inline in the worklog (Problem 1) or skip them entirely. The Notes placeholder creates false promise of a place for day-specific content.
Problem 5: morning.adoc Is Hardcoded to One Activity
The entire Early Morning section is "Regex Training (CRITICAL CARRYOVER)" — a single activity. When regex training completes (or gets replaced), this partial needs a full rewrite. It should be a slot for "current morning focus" that's easy to swap.
Problem 6: quick-commands.adoc and related.adoc Are Static Reference
These don't change day-to-day. Including them in every worklog adds bulk without adding daily value. They're reference material, not worklog sections.
--- Recommended Changes
Phase 1: Worklog Partial Restructure (Core — Do This)
Goal: Make worklogs thinner by extracting persistent content, and make partials more granular where it adds value.
1a. Split education.adoc into Domain-Specific Partials
Current education.adoc is a monolith with 5 subsections (Claude Code, Language Certs, Don Quijote, Today's Study, Regex). Split into:
partials/worklog/education/ ├── education.adoc # Assembler (replaces current education.adoc) ├── ai-engineering.adoc # Claude Code + AI ├── languages.adoc # DELE/SIELE + Don Quijote method ├── study-today.adoc # Today's study focus (pointer to tracker) └── regex.adoc # Regex training status
Why: Each domain evolves independently. When RHCSA becomes active, you add rhcsa.adoc to the assembler. When regex is done, you remove regex.adoc. No monolith editing.
The assembler: // Worklog Section: Education — Assembler // Usage: include::partial$worklog/education.adoc[] include::partial$worklog/education/ai-engineering.adoc[] include::partial$worklog/education/languages.adoc[] include::partial$worklog/education/study-today.adoc[] include::partial$worklog/education/regex.adoc[]
1b. Split work-chla.adoc into Domain-Specific Partials
Current work-chla.adoc is 39 lines with 11 includes + a Notes placeholder. Split into:
partials/worklog/work/ ├── work-chla.adoc # Assembler (replaces current work-chla.adoc) ├── timekeeping.adoc # PeopleSoft reminder + link ├── projects.adoc # P0/P1/P2 project includes ├── priorities.adoc # Today's priorities └── tickets.adoc # ITSM ticket includes (SRs, INCs, CRs)
Why: Timekeeping reminder is independent of tickets which is independent of projects. When you want to silence tickets on a weekend worklog, comment out one line in the assembler instead of editing a monolith.
Remove the dead === Notes placeholder — it's never used and creates false structure.
1c. Split urgent.adoc into Domain-Specific Partials
partials/worklog/urgent/ ├── urgent.adoc # Assembler ├── professional.adoc # Work carryover backlog ├── personal.adoc # Personal blockers ├── life-admin.adoc # Life admin urgent items └── certifications.adoc # Cert deadline urgency
1d. Refactor morning.adoc to Be Slot-Based
Replace hardcoded "Regex Training" with a generic "Morning Focus" that includes a pointer:
== Early Morning - 5:30am
include::partial$worklog/morning/focus.adoc[]
Where morning/focus.adoc currently contains the regex carryover but can be swapped to any morning priority without touching the worklog structure.
1e. Make quick-commands.adoc and related.adoc Opt-Out
Move these from always-included to conditionally-included in the Makefile template, with a comment explaining they're reference sections:
// Reference sections — remove if not needed today include::partial$worklog/quick-commands.adoc[] include::partial$worklog/related.adoc[]
Or better: move them to a dedicated reference page (pages/reference/daily-commands.adoc) and remove from the worklog template entirely. They're not day-specific.
Phase 2: Automation Scripts (Sustainability)
2a. Auto-Update Carryover Days (scripts/update-carryover-days.sh)
Script that: 1. Reads partials/trackers/work/adhoc/carryover.adoc 2. Parses Origin date column 3. Calculates (today - origin) in days 4. Updates the Days column in-place
Hook into make new-day so it runs automatically before creating the worklog.
# In Makefile, add before the worklog creation: new-day: update-days @mkdir -p $(CURRENT) ...update-days: @./scripts/update-carryover-days.sh2b. Auto-Sync Nav Entries (scripts/sync-worklog-nav.sh upgrade)
Extend the existing script to: 1. Scan for worklog files in current month 2. Find the correct insertion point in nav.adoc 3. Add missing entries directly (with backup) 4. Report what was added
Hook into make push so nav is always current before commit.
2c. Monthly Index Maintenance (scripts/update-monthly-index.sh)
Script that: 1. Counts worklogs in current month directory 2. Updates the monthly index.adoc file list and statistics 3. Runs as part of make push
Phase 3: Worklog Weight Classes (Optional — Future)
Create template variants for different day types:
┌──────────────────┬──────────────────────────────┬──────────────────┐ │ Template │ Sections │ Use Case │ ├──────────────────┼──────────────────────────────┼──────────────────┤ │ make new-day │ Full (all sections) │ Standard workday │ ├──────────────────┼──────────────────────────────┼──────────────────┤ │ make │ Urgent + Sessions + │ Weekend/light │ │ new-day-lite │ Education │ day │ ├──────────────────┼──────────────────────────────┼──────────────────┤ │ make new-day-ops │ Urgent + Work + │ Ops-focused day │ │ │ Infrastructure │ │ └──────────────────┴──────────────────────────────┴──────────────────┘
This prevents weekend worklogs from including empty Work (CHLA) sections and weekday worklogs from including empty Infrastructure sections.
--- Files to Create/Modify
New Directories
-
partials/worklog/education/ — 5 files (assembler + 4 domain partials)
-
partials/worklog/work/ — 5 files (assembler + 4 domain partials)
-
partials/worklog/urgent/ — 5 files (assembler + 4 domain partials)
-
partials/worklog/morning/ — 2 files (assembler + focus slot)
Modified Files
-
partials/worklog/education.adoc — becomes assembler (delegates to education/)
-
partials/worklog/work-chla.adoc — becomes assembler (delegates to work/)
-
partials/worklog/urgent.adoc — becomes assembler (delegates to urgent/)
-
partials/worklog/morning.adoc — becomes assembler (delegates to morning/)
-
Makefile — add update-days target, hook into new-day
New Scripts
-
scripts/update-carryover-days.sh — auto-calculate Days column
-
scripts/update-monthly-index.sh — maintain monthly index
Modified Scripts
-
scripts/sync-worklog-nav.sh — upgrade to write directly to nav.adoc
--- Verification
-
-
make — build must produce 0 warnings related to worklog includes
-
make new-day — verify new template still generates correctly
-
Spot-check: open a recent worklog in browser, confirm all sections render identically to before
-
Run scripts/update-carryover-days.sh and verify Days column is correct
-
Run scripts/audit-worklogs.sh 2026 04 — should show 0 missing entries after nav sync
--- What I Would NOT Do
-
Don’t extract Session Accomplishments to partials. Sessions are the one truly day-unique section. They’re narrative, not state. Keeping them inline is correct.
-
Don’t create per-day partials (e.g., partials/daily/2026-04-05.adoc). This creates 365 files/year with no reuse. The worklog IS the day-specific file.
-
Don’t add monthly summary/velocity tracking yet. The system needs the partial restructure first. Metrics layer comes after the data layer is clean.
-
Don’t touch the tracker assembler pattern. It’s already the right abstraction. The changes above apply it consistently to worklog sections that haven’t adopted it yet.
-