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
  1. 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.

  2. Template consistency. Every worklog from make new-day has identical structure. 62 worklogs, same skeleton. That’s discipline.

  3. 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.

  4. 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.sh
    2b. 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
  5. make — build must produce 0 warnings related to worklog includes

  6. make new-day — verify new template still generates correctly

  7. Spot-check: open a recent worklog in browser, confirm all sections render identically to before

  8. Run scripts/update-carryover-days.sh and verify Days column is correct

  9. 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.