STD-014: Worklog System
The daily worklog is the foundation of the documentation system. Every workday produces a single capture file that records decisions, accomplishments, blockers, and forward momentum. Over time, worklogs become the primary source for monthly summaries, project timelines, pattern extraction, and case study creation. Without consistent daily capture, institutional knowledge decays within days.
Principles
-
One worklog per day. Each workday produces exactly one
WRKLOG-YYYY-MM-DD.adocfile. Weekend and personal sessions follow the same format. No day produces two worklogs; no worklog spans two days. -
Section includes for modularity. The worklog body is composed from section partials (
partials/worklog/). Each section is a separate file that is rewritten daily. This enables selective inclusion, independent editing, and partial reuse without modifying the worklog page itself. -
Summary first. The worklog opens with a bold day name and a dense paragraph summarizing the entire day’s output. A reader who reads only the summary should understand the day’s scope and significance.
-
Session accomplishments capture AI-assisted work. Every Claude Code session that produces material output is documented under "Session Accomplishments" with scope, file counts, and line counts where relevant. This is the audit trail for AI-assisted productivity.
-
TODOs carry forward. The "Today’s Remaining TODO" section uses Must/Should/Stretch tiers. Uncompleted items carry forward to the next worklog or are promoted to a tracker. Nothing silently disappears.
Worklog Naming
Worklogs follow the WRKLOG prefix defined in STD-003:
WRKLOG-YYYY-MM-DD.adoc
Filed in the chronological directory structure:
pages/YYYY/MM/WRKLOG-YYYY-MM-DD.adoc
Example: pages/2026/04/WRKLOG-2026-04-06.adoc
Creation
make new-day
This command:
-
Updates
antora.ymldaily attributes (current-day,current-date,current-worklog) viamake update-today-attrs -
Updates carryover day counts via
make update-days -
Creates the worklog file with correct header, section includes, and TODO skeleton
The daily attribute update keeps the landing page (index.adoc) current automatically — the "Today" section uses include::partial$home-today.adoc[] which references {current-worklog} and {current-month} attributes. Never create worklogs manually — the Makefile template ensures structural consistency.
For local preview:
make serve # Build + local server (port 8000)
make # Build only
Required Structure
Every worklog MUST follow this structure exactly:
= WRKLOG-YYYY-MM-DD
:description: [Day Name] - [Summary of day's work]
: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)
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[]
== Today's Remaining TODO
=== Must Do (Before End of Day)
=== Should Do (If Time Permits)
=== Stretch Goals
Header
| Element | Rule |
|---|---|
Title |
|
|
Day name (bold in Summary, plain here) + concise summary of day’s output |
|
|
Summary Section
The Summary opens with Day Name. followed by a dense paragraph. Quantify where possible: file counts, line counts, key outcomes. This paragraph is the entry point for monthly rollups.
Section Includes
Section includes pull from partials/worklog/. Content is written directly into these partials daily:
| Partial | Purpose |
|---|---|
|
Time-sensitive items, blockers, escalations |
|
Early-day tasks, triage, planning |
|
Work-specific (CHLA) tasks and accomplishments |
|
Personal projects and homelab work |
|
Learning, certifications, study sessions |
|
Infrastructure changes, deployments, maintenance |
|
CLI patterns learned or commands worth remembering |
|
Cross-references to case studies, sessions, or other worklogs |
Session Accomplishments
Inline content (not a partial) documenting Claude Code sessions. Each session gets an === Title heading with bullet points covering scope, key actions, and quantified output.
TODO Section
Three tiers, each with checkbox items (* [ ] or * [x]):
-
Must Do — non-negotiable for the day
-
Should Do — valuable if time permits
-
Stretch Goals — aspirational, no guilt if deferred
Section Partials Location
All section partials live in:
docs/modules/ROOT/partials/worklog/
These files are rewritten daily. They contain section-level content (headings, lists, prose) that the worklog page pulls in via include::partial$worklog/<name>.adoc[]. Empty partials are valid — they produce no output in the rendered page.
Requirements
-
Every workday MUST have a worklog created via
make new-day. -
The
:description:attribute MUST include the day name and a summary of the day’s work. -
Session Accomplishments MUST list every AI-assisted work session with scope and quantified output (files touched, lines written).
-
The TODO section MUST use the three-tier structure: Must Do, Should Do, Stretch Goals.
-
Uncompleted Must Do items MUST carry forward to the next worklog or be explicitly dropped with justification.
-
Section partials MUST be rewritten daily — stale content from previous days is misleading.
-
No
:toc:attribute in any worklog file. -
No hardcoded IPs, hostnames, or credentials — use
{attributes}. -
Build MUST be clean before committing:
make 2>&1 | grep -E "WARN|ERROR".
Compliance
| Check | Method | Pass Criterion |
|---|---|---|
Worklog exists for workday |
|
File exists |
Description includes day name |
|
Day name present (Monday-Sunday) |
Session accomplishments documented |
Visual inspection of |
At least one session entry per AI-assisted workday |
TODO tiers present |
|
All three tiers present |
Build clean |
|
Zero output |
No stale partials |
Compare partial dates against worklog date |
Partials reflect current day’s content |
Sub-Partial Reusability — Four-Layer Architecture
The three-layer daily-notes architecture (worklog shell → daily-notes index → concern partials) handles topic separation. But some concern partials contain granular code blocks, command patterns, or technique documentation that will be reused on future days. These MUST be extracted into sub-partials.
The Pattern
When a concern partial contains two or more distinct, reusable blocks (commands, techniques, code patterns), create a subdirectory named after the parent partial and place each block in its own sub-partial:
Layer 3: partials/worklog/daily-notes/YYYY-MM-DD/topic-name.adoc <-- concern partial (index) Layer 4: partials/worklog/daily-notes/YYYY-MM-DD/topic-name/block-one.adoc <-- reusable sub-partial Layer 4: partials/worklog/daily-notes/YYYY-MM-DD/topic-name/block-two.adoc <-- reusable sub-partial
Layer 3 — Concern Partial as Index
The concern partial becomes an index. It provides narrative framing — the why and when — then includes sub-partials for the how:
// Concern: Topic description
// Partial: partials/worklog/daily-notes/YYYY-MM-DD/topic-name.adoc
==== Topic Heading
Narrative context — what prompted this work, what problem it solves.
include::partial$worklog/daily-notes/YYYY-MM-DD/topic-name/technique-one.adoc[]
include::partial$worklog/daily-notes/YYYY-MM-DD/topic-name/technique-two.adoc[]
===== Summary or next steps
Layer 4 — Reusable Sub-Partials
Each sub-partial is self-contained: one technique, one command pattern, one code block. It MUST be independently includable — no dependency on the parent’s narrative:
// Reusable: Brief description of what this sub-partial teaches
// Parent: topic-name.adoc
===== Technique Heading
Explanation of the pattern.
.Example usage
[source,bash]
----
command --with real-arguments
----
.Breakdown
[cols="1,3"]
|===
| Element | What it does
| ... | ...
|===
Rules
-
Split trigger: A concern partial with 2+ distinct reusable blocks (different commands, different tools, different techniques) MUST use sub-partials. A single-block partial stays flat.
-
Name by content: Sub-partials are named by what they teach (
process-kill-batch.adoc,wifi-reconnect.adoc), not by sequence or meta-labels. -
Self-contained: Each sub-partial is independently includable. No forward references to siblings or dependency on the parent’s prose.
-
Comment header: Every sub-partial opens with
// Reusable:and// Parent:comments for discoverability. -
Linux contrast encouraged: When documenting Windows/PowerShell/vendor CLI patterns, include the Linux equivalent. The contrast is the teaching moment.
-
Future inclusion: When a sub-partial is reused on a later day, include it directly — do not copy the content. The sub-partial is the single source of truth:
// In a future daily note:
include::partial$worklog/daily-notes/2026-06/2026-06-25/powershell-windows-sysadmin/process-kill-batch.adoc[]
Examples in Production
| Date | Topic Partial | Sub-Partials |
|---|---|---|
2026-06-24 |
|
|
2026-06-25 |
|
|
Compliance
| Check | Method | Pass Criterion |
|---|---|---|
Sub-partials exist when needed |
Concern partial has 2+ distinct reusable blocks |
Subdirectory exists with individual sub-partials |
Sub-partials are self-contained |
Each sub-partial renders independently |
No broken references when included alone |
Comment headers present |
|
Every sub-partial has |
No content duplication |
Reused content is `include::’d, not copied |
Single source of truth maintained |
Related
-
STD-003: File Naming — naming conventions including WRKLOG prefix
-
STD-009: Repository Architecture — directory skeleton and chronological organization