• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

umputun / agterm / 32281047106
94%

Build:
DEFAULT BRANCH: master
Ran 19 Aug 2026 05:24PM UTC
Jobs 1
Files 94
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

19 Aug 2026 05:20PM UTC coverage: 97.988% (+0.001%) from 97.987%
32281047106

push

github

web-flow
feat(control): report statusChangedAt on the tree session node (#465)

* feat(control): report statusChangedAt on the tree session node

the session node carried status, statusPane, statusBlink, statusColor and statusShape but nothing
saying WHEN the status was set, so anything reasoning about a glyph's age had to keep shadow state:
subscribe to status events or diff repeated tree polls, persist its own timestamps, and re-derive
them wrong after its own restart.

statusChangedAt is Session.statusChangedAt projected as epoch seconds. It reuses the ControlEvent.ts
clock so a poller can compare a tree read against an event it already has, and it is a plain Double
because ControlProtocol.swift imports no Foundation.

the semantic that carries the weight is the re-push: setAgentIndicator stamps before the
unchanged-indicator early return, so a hook re-asserting active on every tool event refreshes the
stamp rather than freezing it at the last state CHANGE. "now minus statusChangedAt" is therefore how
long ago the agent last asserted anything, not how long the glyph has shown this colour.

ephemeral like status and unseen: cleared on idle, never persisted, absent after a restore. The
projection guards on idle alongside its four siblings, so the field is never reported without a
status.

no new command and no setting - this is read-back only, and the human tree renders no status field
at all, so it stays JSON-only like statusColor and statusShape.

the new tree-projection tests open agtermCore/Tests/agtermCoreTests/AppStoreStatusTests.swift rather
than growing AppStoreTests.swift, which sits 24 lines under the 2000-line lint budget. The existing
setAgentIndicator stamping cases stay where they are.

Fix #460

* docs(control): say statusChangedAt tracks the WRITE, not the agent

review of the previous commit caught two things.

the paraphrase surfaces claimed "how long ago the agent last asserted anything", which the wire
contract does not promise. `closePrim... (continued)

2 of 2 new or added lines in 2 files covered. (100.0%)

8083 of 8249 relevant lines covered (97.99%)

4946677.1 hits per line

Jobs
ID Job ID Ran Files Coverage
1 32281047106.1 19 Aug 2026 05:24PM UTC 94
97.99
GitHub Action Run
Source Files on build 32281047106
  • Tree
  • List 94
  • Changed 3
  • Source Changed 3
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32281047106
  • 5fae4f68 on github
  • Prev Build on master (#32191650147)
  • Next Build on master (#32395976930)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc