You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
aggregator(alerts): bound mergeClasses keys to a class registry (#3702 disposition 4) #4981
Disposition 4 of design #3702 Phase 3 (audit task 5613, 2026-11-03). mergeClasses (pm-stack/aggregator/src/alerts.ts:119) copies every boolean key from client input into the subscription's classes JSON, so a client can grow that object without bound; classEnabled treats an unknown key as on, so unknown keys are semantically inert today (test pm-stack/aggregator/test/alerts.test.ts:53 pins pass-through for quota-wall).
Accepted for v1 in the audit: no server-side amplification, one row per subscription, growth is client-cooperative, and #3317 is about to introduce real classes — a strict allowlist now would drop them. This issue is the bound once a class registry exists: cap the key count/length and validate against the registry of classes the engine actually consults.
Filed from #3702 Phase 3 audit; no behaviour change landed there by design.
Triage — live, split: cap lands now, registry waits for #3317
Verified at origin/main048da81f1 (2026-11-03).
Confirmed:mergeClasses (pm-stack/aggregator/src/alerts.ts:119-129) copies every boolean key from client input with no count or key-length bound. classEnabled (:161-163) still treats unknown keys as on, so today's unknown keys are inert — the exposure is unbounded object growth inside one subscription row, exactly as the audit described. The audit's reasoning for accepting it in v1 was #3317.
routed: queue task 8572 (repo-health:v1:fix:developing-today/code:issue:4981, kind small_fix, low risk, 45 min) — count + key-length cap in mergeClasses, the quota-wall pass-through test preserved, targeted tests for both caps. The issue's own recommendation ("cap the key count/length and validate against the registry") is satisfied in that order rather than held hostage to the registry.
Task: Claim evaporated — task 8572 returned to queued and unclaimed in repo-health-code-pilot after the holding run ended without a terminal verb (checkpoint stage: handed_off). Labels reset to the truth: queue/queued + status/needs-triage. The task cap was also raised this run where it had sat dead-in-queue, so it is claimable again.
Expectation: next claimant picks up from the checkpoint stage named above.
agent-note:v1
state: blocked
agent: repo-worker-code
lane: 1a180ae5-384f-4e71-8d77-08f7b1652c75
task: 8572
reason_class: escalated-to-user
blocker: Owner action required: PR #5163 is authored by dezren39, and the worker protocol forbids touching or merging Drew-owned PRs. At head d607022 the only check is CodeRabbit neutral/rate-limited; there are no Actions runs or commit statuses, so the basic PR-tier check remains absent. Owner must take over or explicitly reassign/authorize a non-Drew owner, then requeue; this lane will not edit or merge the PR.
links: issue #4981; PR #5163
Activity
dezren39 commentedon Nov 3, 2026
Triage — live, split: cap lands now, registry waits for #3317
Verified at
origin/main048da81f1(2026-11-03).mergeClasses(pm-stack/aggregator/src/alerts.ts:119-129) copies every boolean key from client input with no count or key-length bound.classEnabled(:161-163) still treats unknown keys as on, so today's unknown keys are inert — the exposure is unbounded object growth inside one subscription row, exactly as the audit described. The audit's reasoning for accepting it in v1 was#3317.repo-health:v1:fix:developing-today/code:issue:4981, kindsmall_fix, low risk, 45 min) — count + key-length cap inmergeClasses, thequota-wallpass-through test preserved, targeted tests for both caps. The issue's own recommendation ("cap the key count/length and validate against the registry") is satisfied in that order rather than held hostage to the registry.28 remaining items
dezren39 commentedon Nov 4, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 4, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 4, 2026
agent-note:v1
state: picked_up
agent: repo-worker-code
lane: 1a180ae5-384f-4e71-8d77-08f7b1652c75
task: 8572
found_via: OpenChamber scheduled-lane queue claim
revalidation: issue #4981 OPEN; linked PR #5163 OPEN, head d607022
next: recheck outcome recorded; the PR is authored by dezren39 and the worker runbook forbids touching Drew-owned PRs.
dezren39 commentedon Nov 4, 2026
agent-note:v1
state: blocked
agent: repo-worker-code
lane: 1a180ae5-384f-4e71-8d77-08f7b1652c75
task: 8572
reason_class: escalated-to-user
blocker: Owner action required: PR #5163 is authored by dezren39, and the worker protocol forbids touching or merging Drew-owned PRs. At head d607022 the only check is CodeRabbit neutral/rate-limited; there are no Actions runs or commit statuses, so the basic PR-tier check remains absent. Owner must take over or explicitly reassign/authorize a non-Drew owner, then requeue; this lane will not edit or merge the PR.
links: issue #4981; PR #5163