ADR-0026: Add journal field to WorkItem for execution tracking
Status: accepted | Date: 2026-02-22
References: RFC-0000
Context
During agent-driven governance workflows, agents naturally use work items as “working memory” to track execution progress. Currently, this working memory is stored in the description field, mixing multiple semantic purposes:
- Task declaration — “What needs to be done” (static scope definition)
- Execution tracking — Progress updates, bug fixes, verification results (dynamic, frequently updated)
- Planning adjustments — Next steps, design decisions (evolves during execution)
This mixing causes description to become very long (4000+ characters in observed cases) and conflates declarative “what” with imperative “how it’s going.”
Example: In WI-2026-02-21-004, the description field contains:
- Initial implementation plan (Steps 1-6)
- Multiple “Progress update (YYYY-MM-DD, scope)” sections with detailed execution notes
- Bug fix records, verification results, and next-step planning
The notes field exists but is underutilized because its original intent (“observations and decisions made during work”) was not clear enough, and agents naturally reached for description as the primary writing surface.
Reference: RFC-0000:C-CONTENT defines the content model but does not distinguish between declaration and tracking semantics.
Decision
Add a new journal field to WorkItemContent as a structured array for execution tracking, distinct from description (task declaration) and notes (ad-hoc points).
TOML structure:
Each journal entry has three fields:
date(required): ISO date string “YYYY-MM-DD”scope(optional): Topic/module identifier for this entrycontent(required): Markdown text with progress details
Example work item with journal:
[content]
description = "Big-bang AST/IR v2 migration with 6 implementation steps..."
[[content.journal]]
date = "2026-02-21"
scope = "typub-html"
content = "v2 parse + serialize paths active; fixed footnote issues"
[[content.journal]]
date = "2026-02-21"
scope = "typub-markdown"
content = "Migrated renderer tests to v2 fixtures; fixed footnote refs"
Data structure (Rust):
pub struct JournalEntry {
pub date: String,
pub scope: Option<String>,
pub content: String,
}
Semantic boundaries:
| Field | Purpose | Update Pattern |
|---|---|---|
description | Task scope declaration | Define once, rarely change |
journal | Execution process tracking | Append on each progress |
notes | Ad-hoc key points | Add anytime, concise |
acceptance_criteria | Completion criteria | Define then tick |
Backward compatibility: The journal field is optional with #[serde(default)]. Existing work items remain valid without migration. New work items can adopt the field incrementally.
Changes required:
- Update
WorkItemContentstruct insrc/model.rs - Update
gov/schema/work.schema.toml - Update render logic in
src/render.rsto include journal section - Update wi-writer skill documentation
Consequences
What becomes easier:
- Clear separation of concerns:
descriptionstays focused on task scope; execution details go tojournal - Better readability: Rendered markdown shows a clean structure with dedicated sections
- Agent ergonomics: Agents have a designated place for execution tracking without polluting description
- Historical traceability: journal entries preserve the execution timeline
What becomes more difficult:
- None significant. The field is optional and additive.
Migration impact:
- No migration required for existing work items
- Agents may gradually adopt
journalfor new or active work items - Old work items with “progress updates” in description remain valid
Documentation updates:
wi-writerskill updated with field usage guidelineswork.schema.tomlupdated with journal field definition- Rendered markdown includes “## Journal” section after description