Expand description
Entries (tasks, notes and decisions), their links, status history, time-tracking sessions and comments.
- [
markdown]: reading and writing the task file format. - [
text]: tags, file-name slugs and heading rules for user text. - [
time]: timestamps, ages and durations.
Structs§
- Comment
- A timestamped comment on a task, like on a GitHub/GitLab issue.
- Repo
Link - An entry in another repository of the same project, written
shop-api#3: ids repeat across repositories, so the repository’s name goes with it. - Session
- One continuous stretch of tracked work on a task.
- Status
Change - One status change, as kept in the task’s history.
- Task
- An entry: a task, note or decision. What it is, how it’s tagged and linked, and for tasks, where it stands and how it got there.
- Unknown
- Fields, link forms and sections a newer version wrote, kept as written: otherwise an older
kbor app saving the entry, for a comment or a status change, would drop them from the file.
Enums§
- Asked
- Where a question an agent asked on a task stands, while the task is parked waiting on it.
- Author
- Who made a change: the user, or a coding agent working through
kb. Comments and status changes record it, so the board tells them apart, and so a question an agent asked waits for a person. - Decision
State - Where a decision stands. An agent records the decisions within its task as accepted, and proposes those it shouldn’t take alone (architecture, dependencies, storage) for a person to accept or reject.
- Kind
- What an entry is. Only tasks have a status, history and sessions; notes and decisions are
documents that tasks and each other link to. Declared in the order
tabcycles the list. - Status
- Where a task stands. Declared in the order the task list shows them, so
position()is the sort key; the names are what task files contain.
Functions§
- covered
- The time
spans(start, end) cover, counting once what several cover at the same moment: two tasks worked on in parallel for an hour took an hour of the day, not two. Empty or reversed spans count nothing. - fmt_age
- How long ago, rounded down:
0m,5m,3h,2d,6w. - fmt_
clock 01:02:03for a live clock.- fmt_dur
45m,1h 05m; rounded down to whole minutes.- fmt_ts
- A timestamp in the stored format.
- now
- Current local time truncated to whole seconds, so files round-trip exactly.
- parse_
links 5, 9or#5 #9: ids of linked entries in this brain;shop-api#3: an entry of another repository. Without repeats; anything else is skipped.- parse_
tags - Splits on commas/whitespace, drops a leading
#, lowercases and dedupes. - sanitize_
comment - See
sanitize_description. - sanitize_
description - In a task file
##starts a section and, inside Comments,###starts a comment. Headings typed into a description or comment are pushed below those levels so they can’t break the file. Returns the text and whether anything was changed. - slugify
Fix: prod login!→fix-prod-login; ASCII only so the name works on every file system.- worked
- Time worked on any of
tasksinside[from, to): time two of them ran at once counts once (seecovered), so agents’ tasks running in parallel don’t make a day longer than it was.