Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
2ab492a
WL-0MSKSZBEL0025CN3: regenerate src/version.ts (1.0.8 -> 1.0.9)
Aug 8, 2026
2004f41
WL-0MSGJDSMJ004128E: Implementation complete
Aug 8, 2026
1f9fc65
OSL-0MSKVB5K6008XFOQ: w chord split (w-r/w-s/w-b) with review/both ma…
Aug 8, 2026
03d7e67
WL-0MSL2ZQIF006QB4Q: Implementation complete
Aug 9, 2026
f65558d
WL-0MSKCRX730052IIW: Implementation complete
Aug 9, 2026
9836609
WL-0MSLUANM5004NNPU: Regression tests for audit-tier re-dispatch excl…
Aug 9, 2026
228019b
WL-0MSLUASNF001LLAT: Durable dispatched-marker exclusion for the audi…
Aug 9, 2026
cb696e9
WL-0MSKUG2WW0058A7W: Implementation complete
Aug 9, 2026
f4f3c16
Restore Architecture Notes for Agents section in AGENTS.md (SA-0MSITK…
Aug 9, 2026
db4f1e9
WL-0MSM1ZRD8004REV2: Implementation complete
Aug 9, 2026
be2ceef
Swap model and command positions on footer Line 3 (WL-0MSHENVKR002HZT5)
Aug 9, 2026
4eec42c
WL-0MSKIL6P00045UOC: Implementation complete
Aug 9, 2026
5f880ee
WL-0MSM8PLBJ000E3KM: Implementation complete
Aug 9, 2026
a097115
Demote completed/in_review parent to plan_complete when a child is ad…
Aug 9, 2026
c7c457b
WL-0MSJNJPRM009RM35: tab-focus-gated worklist visibility — tests (WL-…
Aug 9, 2026
e27bca8
WL-0MSMAIP5F003WAGG: Implementation complete
Aug 9, 2026
de063cc
WL-0MSMAYIKX005LLO4: Implement-tier dispatch tests (red phase)
Aug 10, 2026
01101b3
WL-0MSMAYPQP001FLR6: Implementation complete
Aug 10, 2026
19bcc7f
WL-0MSMYP1CB003XVTZ: Implement-tier dependency-blocked exclusion test…
Aug 10, 2026
949371a
WL-0MSMYP1CB003XVTZ: Implement-tier blocked-exclusion fixture test (e…
Aug 10, 2026
aa656f0
WL-0MSNMPCHZ002SIQJ: Add docs to work_item_types allowlist for n/p/i …
Aug 10, 2026
fef02f1
WL-0MSKFFJWD002BQJ5: render markdown with marked (GFM) in detail desc…
Aug 10, 2026
67d573e
WL-0MSNULGSM00018I4: materialize marked dep for herdr plugin (fix ERR…
Aug 11, 2026
501c8c4
WL-0MSND0V9D009222F: Implementation complete
Aug 11, 2026
32633cf
WL-0MSND0Y4S004H6WH: Implementation complete
Aug 11, 2026
003f91c
WL-0MSND1FGF000L645: Implementation complete
Aug 11, 2026
b3f0bea
WL-0MSND1J6A009D7J3: Implementation complete
Aug 11, 2026
135abe0
WL-0MSOKOI4J0046GE5: Implementation complete
Aug 11, 2026
6780d4b
WL-0MSND1J6A009D7J3: Implementation complete
Aug 11, 2026
b0535be
WL-0MSOPHLD1000EWNN: Implementation complete
Aug 11, 2026
15e03a9
Revert priority-first grouping for Herdr selection list (WL-0MSI1LVTJ…
Aug 11, 2026
90e18ff
WL-0MSORD6HC005QVZX: sync no-op guards ignore whitespace-only title/d…
Aug 11, 2026
006e307
WL-0MSP1XJSO007LE3K: Implementation complete
Aug 11, 2026
66fa60d
WL-0MSFZKQL700381P3: Show description preview in herder plugin select…
Aug 12, 2026
84178b9
WL-0MSFZUS4Z006IRI3: Herdr worklist: render command input form as a s…
Aug 12, 2026
52b46d8
WL-0MSQ0RPQP00636JY: Downtime dispatcher honours ship-it code freezes
Aug 12, 2026
e67d98f
fix(sync): protect completed/in_review items from stale remote clobbe…
Aug 12, 2026
871449c
WL-0MSGG5N5Z0074TLY: Implementation complete
Aug 12, 2026
46835df
Bump version to v1.0.10
Aug 12, 2026
0ecd16b
Update CHANGELOG.md for v1.0.10
Aug 12, 2026
15e3dc8
Merge origin/dev into main (automated)
Aug 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,16 @@ __pycache__/

# Effort-and-risk skill output dumps written to repo root
final-WL-*.json

# Stray tsc emissions next to TypeScript sources (regression: b3f0bead
# committed 328 of these). .js import specifiers resolve to .ts sources at
# build/test time, so compiled artifacts in source trees are never tracked.
src/**/*.js
src/**/*.d.ts
src/**/*.map
tests/**/*.js
tests/**/*.d.ts
tests/**/*.map
packages/*/src/**/*.js
packages/*/src/**/*.d.ts
packages/*/src/**/*.map
34 changes: 33 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,36 @@

Read the global agent instructions at `~/.pi/agent/AGENTS.md` — they define the core principles, the Worklog (wl) work-item workflow, and the coding disciplines that apply to every project. That file is installed from this repository's `AGENTS_GLOBAL.md` by `scripts/install_pi.sh`, which symlinks it into place.

## Project-specific guidance
## Project-specific guidance

### Architecture Notes for Agents

Worklog uses **SQLite as the runtime source of truth** with an **ephemeral JSONL pattern** for Git sync:

- **SQLite** (`.worklog/worklog.db`): All runtime reads/writes happen here
- **JSONL** (`.worklog/worklog-data.jsonl`): Only exists transiently during sync operations
- **Git**: Persistent storage for collaboration

#### Important Rules for Agents

1. **Work with SQLite, not JSONL**
- Never manually edit JSONL files
- Use the database API for all data operations
- JSONL is only for Git transport, not for data manipulation

2. **Migration Complete**
- The old `autoExport` feature has been removed
- No automatic JSONL exports after database writes
- TUI is now responsive regardless of data size

3. **Sync Behavior**
- `wl sync` exports SQLite → JSONL → pushes to Git → deletes local JSONL
- JSONL only exists during the sync window (seconds)
- Working directory should not have persistent JSONL files

4. **Legacy JSONL Files**
- If you encounter a persistent JSONL file, it may be from an older version
- Use `wl doctor migrate` to import it into SQLite
- Use `wl doctor migrate --delete` to import and remove the file

For more information, see [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md).
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
# Changelog

## v1.0.10 (2026-08-12)
### Features
- Idle detection now only counts local activity, so remote-only traffic won't block downtime dispatch. (WL-0MSL2ZQIF006QB4Q)
- Press P n to instantly open a fresh Pi session with a blank prompt. (WL-0MSKIL6P00045UOC)
- Show a preview of the selected work item's description in the list panel. (WL-0MSFZKQL700381P3)
- Work items now show a Related Docs row listing all linked markdown files, and you can open any of them from the detail view. (WL-0MSGTLSUT002NF29)
- Worklist rows now show an agent status icon so you can see at a glance which items have active agents. (WL-0MSBQUJQX005RAT9)
- Command input forms now display as a full-width page instead of a dialog box. (WL-0MSFZUS4Z006IRI3)
- Press S in the worklist to start a release — type "ship" to confirm, Esc to cancel. (WL-0MSGG5N5Z0074TLY)
- Markdown descriptions and episode files now display with full formatting, including tables, lists, and styled text. (WL-0MSKFFJWD002BQJ5)
- Footer now shows the command on the left and model on the right, giving the command more space. (WL-0MSHENVKR002HZT5)
- Docs work items can now be implemented with the "i" shortcut. (WL-0MSNMPCHZ002SIQJ)
### Bug Fixes
- Work list now stays live when you're working in another pane of the same tab. (WL-0MSJNJPRM009RM35)
- The in_review filter now shows all items awaiting review instead of none. (WL-0MSKCRX730052IIW)
- Fixed a crash when opening the worklist pane. (WL-0MSNULGSM00018I4)
- Whitespace-only edits no longer reset item timestamps. (WL-0MSORD6HC005QVZX)
- `wl next --stage` now only returns items at that stage, even when blockers exist. (WL-0MSP1XJSO007LE3K)
- Fixed duplicate audit sessions by preventing the same work item from being auto-dispatched twice. (WL-0MSLIY8ZR004QUSY)
- Sync no longer reverts completed items awaiting review to open status. (WL-0MSPZP7FE009YXPG)
- Downtime tasks now pause new code and audits during release freezes, resuming automatically when the freeze lifts. (WL-0MSQ0RPQP00636JY)
- Fixed cases where completed audits didn't update the stage/status. (WL-0MSN7OUOI005F6CE)
### Other
- Fixed overnight downtime dispatches not firing during idle windows. (WL-0MSK9TUCA00206M7)
- Cleaned up stray build files so the game runs smoother and updates install correctly. (WL-0MSOKOI4J0046GE5)

## v1.0.9 (2026-08-08)
### Features
- Herdr to consume local LLM in downtime (WL-0MSF49FMW009M06K)
Expand Down
23 changes: 23 additions & 0 deletions CLI.md
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,27 @@ In blocker-surfacing and critical-escalation paths, child blockers are never ret

In batch mode (`-n <count>`), children of returned parents are also excluded from subsequent results, ensuring the batch never contains items from the same subtree.

#### Risk / effort filters

`--risk <level>` and `--effort <level>` restrict candidates with **at-most** ordinal
semantics (WL-0MSMAIP5F003WAGG):

- Risk: `low` < `medium` < `high` < `severe` (alias `critical`). `--risk low` matches only
Low-risk items; `--risk medium` matches Low and Medium; and so on.
- Effort: `extra-small`/`xs` < `small`/`s` < `medium`/`m` < `large`/`l` <
`extra-large`/`xl`. `--effort small` matches Extra Small and Small items;
both the short (`XS`, `S`, …) and long-form (`Extra Small`, `Small`, …)
spellings are recognized, case-insensitively.
- **Fail-closed:** items with unset/empty risk or effort never match — an
absent estimate is not "≤ low/small".
- Filters compose with `--stage`, priority selection, and the existing
dependency-blocked exclusion, and apply to surfaced blockers too.

```sh
wl next --stage plan_complete --risk low --effort small
wl next --stage plan_complete --risk low --effort small -n 10
```

#### Automatic re-sort

By default, `wl next` re-sorts all active items by score before selecting candidates. This ensures that recently created or re-prioritized items are immediately reflected in the selection order without requiring a manual `wl re-sort`. The re-sort uses the same scoring logic as `wl re-sort` (priority weight, age, and optional recency policy).
Expand Down Expand Up @@ -563,6 +584,8 @@ wl next -n 10 -g 4
wl next -a alice --search "bug"
wl next --stage idea
wl next --stage in_progress
wl next --risk low --effort small
wl next --stage plan_complete --risk low --effort small -n 10
wl next --include-blocked
wl next --no-re-sort
wl next --recency-policy prefer
Expand Down
39 changes: 22 additions & 17 deletions docs/dev/pause-when-hidden.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Two pollers were fixed:
| Poller | File | Cadence | Fix |
|--------|------|---------|-----|
| Pi extension browse selection widget | `packages/tui/extensions/Worklog/lib/browse.ts` | 5s interval (4–5 wl spawns/tick) | **Idle gating**: pause fetch + `wl sync --if-idle` after 30s without keypresses (`IDLE_PAUSE_MS`); resume immediately on the next keypress. |
| Herdr worklist pane | `packages/herdr/src/worklist.ts` | 30s refresh + 60s sync timers (~4–5 wl spawns/tick per pane) | **Pane-focus gating**: skip timer ticks when the pane is hidden (`HERDR_PANE_ID` → `herdr pane get` → `result.pane.focused === false`); fail-open otherwise. |
| Herdr worklist pane | `packages/herdr/src/worklist.ts` | 30s refresh + 60s sync timers (~4–5 wl spawns/tick per pane) | **Tab-focus gating**: skip timer ticks when the pane's tab is hidden (`HERDR_TAB_ID` → `herdr tab get` → `result.tab.focused === false`); fail-open otherwise. |

## Behavior summary

Expand All @@ -38,20 +38,25 @@ Two pollers were fixed:
- Manual actions (navigation, shortcuts, `r`/`S`-style refreshes) are never
gated; the detail-view widget (no interval) is unaffected.

### Herdr worklist pane (pane-focus gating)

- Visibility signal: `HERDR_PANE_ID` → `herdr pane get <id>` →
`result.pane.focused`. A hidden (non-focused) tab reports `focused: false`.
- When hidden, the auto-refresh and auto-sync timer ticks are skipped →
**zero fetcher / `wl sync --if-idle` spawns**.
- Fail-open: no `HERDR_PANE_ID`, herdr CLI missing/erroring, or unparseable
### Herdr worklist pane (tab-focus gating)

- Visibility signal: `HERDR_TAB_ID` → `herdr tab get <id>` →
`result.tab.focused`. A hidden (non-focused) tab reports `focused: false`.
Tab focus is the visibility signal — a pane is visible when its TAB is
focused, regardless of which pane in the tab holds keyboard focus (multi-
pane split fix, WL-0MSJNJPRM009RM35). There is no pane-focus fallback; a
pane zoomed-over within a focused tab is treated as visible (documented
limitation).
- When the tab is hidden, the auto-refresh and auto-sync timer ticks are
skipped → **zero fetcher / `wl sync --if-idle` spawns**.
- Fail-open: no `HERDR_TAB_ID`, herdr CLI missing/erroring, or unparseable
output → the pane is treated as visible and polling continues as before.
Standalone runs (outside Herdr) are unaffected.
- Visible-pane cadence unchanged (30s refresh / 60s sync defaults).
- Visible-tab cadence unchanged (30s refresh / 60s sync defaults).
- The list header shows `[paused — hidden]` while gating is active.
- Manual `S` (sync), navigation, chords, and the initial data load are never
gated.
- `PollGate` (TTL ~2s) shares one `herdr pane get` call across refresh+sync
- `PollGate` (TTL ~2s) shares one `herdr tab get` call across refresh+sync
ticks in a cycle (≤1 visibility exec per cycle).

## Verification procedure
Expand All @@ -69,7 +74,7 @@ ps -eo args | grep -E 'wl (next|list|sync)' | grep -v grep | wc -l
Expected while **active/visible**:

- Pi browse widget actively browsed: ~4–5 `wl` spawns per 5s tick (transient).
- Herdr worklist pane focused: ~4–5 `wl` spawns per 30s tick (transient).
- Herdr worklist pane tab focused: ~4–5 `wl` spawns per 30s tick (transient).

Expected while **hidden/idle**:

Expand All @@ -91,14 +96,14 @@ Expected while **hidden/idle**:

### 3. Per-pane measurement (herdr worklist)

1. Open the worklist pane (`prefix+l` or the plugin action). Note its pane id:
`echo $HERDR_PANE_ID` inside the pane, or `herdr pane current`.
2. Focus the pane and confirm auto-refresh spawns:
1. Open the worklist pane (`prefix+l` or the plugin action). Note its tab id:
`echo $HERDR_TAB_ID` inside the pane, or `herdr tab current`.
2. Focus the tab and confirm auto-refresh spawns:
`ps -eo args | grep -E 'wl (next|list|sync)' | wc -l` shows transient spawns
every 30s, and the header shows no `[paused — hidden]` marker.
3. Switch to another tab (hiding the worklist pane). Within ~2s the header
shows `[paused — hidden]` and the `wl` process count from that pane drops
to zero.
3. Switch to another tab (hiding the worklist pane's tab). Within ~2s the
header shows `[paused — hidden]` and the `wl` process count from that pane
drops to zero.
4. Switch back — the pane resumes its normal cadence.

### 4. System-level idle test
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "worklog",
"version": "1.0.9",
"version": "1.0.10",
"description": "A simple experimental issue tracker for AI agents",
"main": "dist/index.js",
"type": "module",
Expand Down
Loading
Loading