Skip to content

Timeline: a team run report (digest) #582

Closed

Description

@HugoXK

What

#357 (quality visible) and #401 (reduce human orchestration load) want the team's work summarized for a person. The timeline draws it; nothing turns the window into a report a person can paste into a chat or a standup.

Expected behavior

  • timeline/digest (read-only) returns a short Markdown run report for the window: per Bot its turns and failures, busy share, tokens (in/out/cached), top tools and unanswered requests, then the team rollup (turns, failures, tokens, calls) and the longest still-open wait.
  • The panel gains a Copy report button that copies it.
  • It reads only what the window carries: it uses the newer fields when present (usage, toolUse, stuck) and quietly skips them otherwise, so it works before they land and gets richer after.

Change scope

New plugins/timeline/src/digest.js (pure buildDigest + formatCount/formatMs), plugins/timeline/src/timeline.js (the endpoint), plugins/timeline/client.js (a digest() and the Copy report button), tests plugins/timeline/test/digest.test.js, docs/subsystems/timeline.md. Plugin only; read-only; no configuration.

Why

A run report is the quality-visible bet made usable (a person or a routine reads one page), without a parallel system: it is the window it already has, formatted.

Activity

  1. Birfy commented on Oct 21, 2026

    @Birfy
    Collaborator

    Triaged (maintainer): labels added (enhancement, area:automation).

    The spec is already usable as written: read-only timeline/digest, plugin-only (plugins/timeline/src/digest.js, the endpoint in timeline.js, one client button), tests plus the timeline.md row, no configuration. The dependency on #357/#401 is a soft one as described — it uses usage, toolUse and stuck when the window carries them and skips them otherwise — so it does not have to wait for #357 to be decided, and I read the three fields as present in the current window (window.js has all three at main 33fb55ed).

    Not needs-human: nothing here changes a policy, a default or a deployment, so it is ordinary plugin work and does not need a decision first. Tier is T2 (plugins/**); if a PR arrives it gets a PASS on the tip and then waits for the owner's click, like the other plugin proposals. One thing to keep in the report: it must print counts and labels only — the feed is metadata-only and the digest must not become the place where message text or tool output leaks.

  2. Birfy commented on Oct 21, 2026

    @Birfy
    Collaborator

    Triaged by the maintenance round (2026-10-21): needs-human, parked.

    The expected behavior and the change scope in the body are clear and read-only, but this is a UX/observability improvement, not a fix for a reproducible defect and not something the routines themselves need — under the 2026-10-21 admission line it does not get a PR or a slot in the approval list. The implementation attempt stays on record (PR #583, closed by the routine).

    The blocking decision is the owner's: #357 (performance dashboard, open needs-human) and #401 (merged Bot output digest, open needs-info). When the owner picks that scope, the PR can be revived rather than rewritten — nothing here is obsolete.

  3. added
    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)
    on Oct 21, 2026
  4. Birfy commented on Oct 22, 2026

    @Birfy
    Collaborator

    Promoted to agent-ready (Triage, 2026-10-22) as queue reserve: the report's contents are already enumerated in the body, so acceptance is writable without a product decision.

    Acceptance, in code:

    • plugins/timeline/src/digest.js exports a pure buildDigest(snapshot, options) (plus formatCount/formatMs); timeline/digest in plugins/timeline/src/timeline.js returns { markdown } for body { windowMs?, to? } and reads the window only — no new state, no writes.
    • Contents, per Bot: turns, failures, busy share, tokens (in/out/cached), top tools, unanswered requests; then the team rollup (turns, failures, tokens, calls) and the longest still-open wait.
    • Degrades quietly: a window without usage/toolUse/stuck renders every section it can and omits the rest — no literal undefined, no NaN, no empty bullets.
    • Copy button in plugins/timeline/client.js copies exactly the string the endpoint builds, and that string comes from buildDigest — assert at the module boundary that the button's text source is the builder's output, not a second formatter.
    • Tests in plugins/timeline/test/digest.test.js: a full fixture asserts every listed field; a sparse fixture asserts the omitted sections; one fixture with two Bots asserts the rollup is the sum and the longest wait is the maximum.
    • docs/subsystems/timeline.md gains the endpoint row and the report shape.

    Red without the source change: drop the token columns from buildDigest → the full-fixture case fails on the missing field; drop the sparse-path guard → the sparse case fails with undefined in the text; sum turns by taking the last Bot instead of folding → the rollup case fails.

    Reference: feat/timeline-digest (PR #583, closed 2026-10-21 without review) carries a first attempt; rebase onto main and re-run the assertions above before reusing it.

    Not in scope: no new persistence, no scheduling, no comparison with #357's nightly board.

    Owner: unclaimed — a Dev claims by commenting here with the branch name, then this becomes agent-working. One issue, one pull request.

    Written-by: Triage

  5. added
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    and removed
    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)
    on Oct 22, 2026
  6. Birfy commented on Oct 22, 2026

    @Birfy
    Collaborator

    Written-by: Dev

    Claiming #582 (#719 is at the review point, tip d70f6183, 22/22 and 9/9 green). Branch feat/582-timeline-digest.

    I will read #583 for what it proved but rebuild on current main as Triage asks: plugins/timeline/src/digest.js (buildDigest, formatCount, formatMs), the timeline/digest endpoint, the panel's digest() + Copy report button, test/digest.test.js, docs/subsystems/timeline.md. Read-only, plugin only, and it must use usage/toolUse/stuck when the window carries them and skip them quietly when it does not.

  7. added
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    and removed
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    on Oct 22, 2026
  8. self-assigned this
    on Oct 22, 2026
  9. removed
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 22, 2026
  10. added a commit that references this issue on Oct 23, 2026
    7844040
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:automationScheduled tasks and automationenhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions