roster: live rockit-office aggregator + launchd job#3
Open
tps-flint wants to merge 1 commit into
Open
Conversation
Replaces the one-shot push-roster.mjs seed (run once 2026-06-11, which
froze the Observatory feed) with a recurring aggregator that derives REAL
rockit agent state and signs/POSTs it to /IngestEvents on a 60s cadence.
Sources (all local to rockit, status text only — no secrets/bodies):
- presence ← newest session .jsonl mtime per agent (claude/openclaw/pi-agent);
<10m active, <3h idle, else stale
- currentTask ← `bd list --status in_progress` issue titles
- events ← tpsdev-ai/{flair,cli} PR state → pr_opened/pr_merged + CI rollup
→ ci_passed/ci_failed, deduped by stable id (server dedups by {office}:{id})
Reuses push-roster.mjs's Ed25519 signing + the real rockit-office.key.
Verified end-to-end: /RosterView now returns fresh data (lastSeen seconds
old, real per-agent states) instead of the Jun-11 seed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Replaces the one-shot
push-roster.mjsseed (run once 2026-06-11, which froze the Observatory feed) with a recurring aggregator that derives REAL rockit-agent state and signs/POSTs it to/IngestEventson a 60s cadence. The deployed Observatory (tps.dtrt.harperfabric.com) now shows live agent state instead of the Jun-11 fake seed.Files
scripts/aggregate-rockit.mjs— the aggregator (reusespush-roster.mjs's Ed25519 signing + the realrockit-office.key).deploy/ai.tpsdev.observatory-aggregate.plist— launchd job (60sStartInterval).deploy/README.md— sources, thresholds, install steps.Live sources (rockit office only, all local to rockit)
*.jsonlmtime per agent (flint→claude project dir; kern/sherlock→openclaw sessions; ember→pi-agent sessions). Thresholds:<10mactive,<3hidle, else stale. (Renderer treatsstatus:"stale"as the producer-computed crashed state.)bd list --status in_progressissue titles (non-secret).tpsdev-ai/{flair,cli}→pr_opened/pr_merged+ CI rollup →ci_passed/ci_failed, deduped by stable id (server dedups by{officeId}:{id}).Security
Status text only — agent names, presence states, bd titles, PR numbers/titles. Never task bodies, mail bodies, secrets, or file contents. Audited the live
RosterViewpayload: zero secret-pattern hits,Office.publicKeycorrectly excluded from public reads.Verified end-to-end
After the aggregator ran (manually + then launchd-driven),
GET /RosterViewreturns fresh real data:rockit.lastSeen= seconds old (was frozen at2026-06-11T21:50:01Z).flint:active,kern:idle,sherlock:stale,ember:stale.currentTaskfrom bd (e.g. flint = "Flair-for-n8n: community node...").Idempotency confirmed: re-runs push the same events but the server inserts 0 (dedup); member snapshots refresh each tick. The 10s rate guard is respected by the 60s cadence.
Base note
Based on
roster-cp2(notmain) because the live pipeline it feeds —RosterView+ the live-pathIngestEvents+push-roster.mjs— lives onroster-cp2and is what production runs.roster-cp2is currently unmerged tomain(flagging, not fixing here). Merging this PR's chain tomainshould be sequenced after / together withroster-cp2.🤖 Generated with Claude Code