feat(kanban): expose privacy-safe lifecycle activity - #83348
Conversation
|
Pushed
Refs are now HMAC-SHA256 under a 256-bit secret generated once per board and stored write-once in a new Two details worth a reviewer's attention:
Migration is additive and idempotent, in the style of Verified on this branch: |
(cherry picked from commit d262840)
The activity projection pseudonymized task and event ids with plain SHA-256
over the database file path. That path is not a secret — the module header
documents the default — and `_new_task_id` draws from only 32 bits, so anyone
who knew the layout could enumerate the whole id space and invert work_ref
back to a task id in under a minute. A projection whose stated purpose is to
withhold identifiers was not withholding them.
Refs are now HMAC-SHA256 under a 256-bit secret generated once per board and
stored write-once in a new `kanban_meta` table, so the search space is the key
rather than the id. The prefix moves inside the MAC'd message for domain
separation, and the path-derived namespace is gone — it also drifted when the
same board was reached by a different path.
The salt is read back after `INSERT OR IGNORE` rather than trusting the
locally generated candidate, which is what makes racing processes converge on
one value; refs must stay stable because the consumer dedupes on them and
keeps a bounded retention window. A malformed salt raises instead of keying
HMAC with nothing: `bytes.fromhex("")` returns an empty key, which would put
the original attack back within reach.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit aa2c423)
|
This branch is 45 commits behind Two follow-ups build on it and are open now: #85266 (report why work stopped and whether it is moving) and #85267 (report that person-driven work exists, without reporting what it is). Both were opened against Happy to force-push the rebase here if that is preferred. |
bf94f16 to
b4865d8
Compare
|
Rebased onto current #85266 and #85267 build on this and are open. Both were opened against |
feat(kanban): expose privacy-safe lifecycle activity
|
Summary
Add a bounded read-only kanban activity projection for operator dashboards.
The new command is:
It returns only pseudonymous event/work references, lifecycle kind, timestamp, and event-time profile when available. It never returns raw task/event/run IDs, task title/body/result/comments, payloads, claim locks, worker PIDs, paths, sessions, or error text.
Contract notes
Tests
A separate consumer integration is tracked in moonweave/hermes-agent-team-dashboard#6.