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: . Reads partials/trackers/work/adhoc/carryover.adoc . Parses Origin date column . Calculates (today - origin) in days . 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: . Scan for worklog files in current month . Find the correct insertion point in nav.adoc . Add missing entries directly (with backup) . 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: . Counts worklogs in current month directory . Updates the monthly index.adoc file list and statistics . 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.
-