Worklog System Architecture

Architecture

The worklog system is a daily dashboard + narrative journal built on Antora partials. Every worklog is a thin shell that includes live state from trackers and provides a section for day-specific session accomplishments.

Core Principle

State lives in partials. Narrative lives in worklogs.

  • If content persists beyond today → tracker or project partial

  • If content is day-unique (sessions, reflections, discoveries) → inline in the worklog

  • Worklogs reference state; they do not contain it

Template Structure

make new-day generates a worklog with this skeleton:

= WRKLOG-YYYY-MM-DD
:description: [DAY] - [SUMMARY]
:revdate: YYYY-MM-DD

== Summary

include::partial$worklog/urgent.adoc[]
include::partial$worklog/morning.adoc[]
include::partial$worklog/work-chla.adoc[]

== Session Accomplishments (Claude Code)
_Day-specific accomplishments here._

include::partial$worklog/personal.adoc[]
include::partial$worklog/education.adoc[]
include::partial$worklog/infrastructure.adoc[]
include::partial$worklog/quick-commands.adoc[]
include::partial$worklog/related.adoc[]

Assembler Pattern

Four worklog partials use the assembler pattern — a top-level file delegates to domain-specific sub-files. This allows adding, removing, or swapping domains with a single-line change.

partials/worklog/
├── urgent.adoc                    # Assembler
│   └── urgent/
│       ├── professional.adoc      # Work carryover backlog
│       ├── personal.adoc          # Personal blockers
│       ├── life-admin.adoc        # Life admin urgent items
│       └── certifications.adoc    # Cert deadline urgency
├── morning.adoc                   # Assembler (slot-based)
│   └── morning/
│       └── focus.adoc             # Current morning priority (swappable)
├── work-chla.adoc                 # Assembler
│   └── work/
│       ├── timekeeping.adoc       # PeopleSoft reminder
│       ├── projects.adoc          # P0/P1/P2 project includes
│       ├── priorities.adoc        # Today's priorities
│       └── tickets.adoc           # ITSM tickets (SRs, INCs, CRs)
├── education.adoc                 # Assembler
│   └── education/
│       ├── ai-engineering.adoc    # Claude Code + AI
│       ├── languages.adoc         # DELE/SIELE + Don Quijote
│       ├── study-today.adoc       # Today's study focus
│       └── regex.adoc             # Regex training (remove when complete)
├── personal.adoc                  # Direct (not yet split)
├── infrastructure.adoc            # Direct (not yet split)
├── quick-commands.adoc            # Reference (static)
└── related.adoc                   # Reference (static)

Include Chain

The full include chain from worklog → tracker data:

WRKLOG-2026-04-05.adoc
  └─ \include::partial$worklog/urgent.adoc[]           # Assembler
       └─ \include::partial$worklog/urgent/professional.adoc[]
            └─ \include::partial$trackers/work/adhoc.adoc[tag=carryover]  # Tag filter
                 └─ \include::partial$trackers/work/adhoc/carryover.adoc[]  # Actual data

Three levels of indirection: worklog → assembler → domain partial → tracker partial → data file. Each level has one concern.

Slot Pattern (morning.adoc)

The morning assembler uses a slot pattern instead of tagged includes. morning/focus.adoc is a single file that contains the current morning priority. When the priority changes (regex → RHCSA → Spanish), swap the file contents without touching the assembler or the worklog template.