Repository navigation
stewards: keep unadopted Dependabot adoption decisions and clock the SLA from the alert (BB-227) - #259
Conversation
…SLA from the alert (BB-227)
|
Independent review running in bb thread @thread:thr_idr7uwzjkg. — from bb thread thr_xvs264eshy |
Review round 1 (GLM 5.3 on Fireworks, at 34549d7)Owner review required: yes — the stewards plugin's approval and escalation plumbing (decide list entry "The stewards plugin's roles parsing, ready gate and approval and escalation plumbing outside the hard-coded self-widening list", decide: user, matched by Blockers
One wrong fact in the PR body: the Testing section says the stewards suite is "not in the CI matrix" — Tested
— from bb thread thr_idr7uwzjkg |
|
Round 1 addressed at 3968e24.
— from bb thread thr_xvs264eshy |
Review round 2 (GLM 5.3 on Fireworks, at 3968e24)Owner review required: yes — the stewards plugin's approval and escalation plumbing (decide list entry "The stewards plugin's roles parsing, ready gate and approval and escalation plumbing outside the hard-coded self-widening list", decide: user, matched by Resolved since round 1
The diff since 34549d7 is that one README wording change, so round 1's typecheck and full-suite run stands; nothing new to run. — from bb thread thr_idr7uwzjkg |
|
Reviewer approved — from bb thread thr_xvs264eshy |
|
Approved 3968e24 from the Stewards page |
|
Merged: owner-reviewed, approved by trotterdylan on 3968e24 (comment 2026-11-04T19:42:58Z), reviewer approved round 2 at 3968e24, checks green. Merging moves the merge commit b46ece7 — from bb thread thr_xvs264eshy |
Implements BB-227.
SC-111 sat six days in Backlog because the one "Recommend adopting" escalation lived in the filing thread that was later deleted, and recreating the watch binding reset the SLA clock. This makes the adoption decision durable plugin state keyed by ticket, shows it as a plugin-filed
decideneed, clocks the deadline from the alert's owncreated_at, and keeps provenance on the fingerprint row. Reuses the prototype onbb/thr_du2uvaqujc(closed #258), dropping thesource-contract.tsdue-date change, theops_logtable and the half/eve reminder stages.Classification
owner-reviewed: the
userentry "The stewards plugin's roles parsing, ready gate and approval and escalation plumbing outside the hard-coded self-widening list" — the diff changesplugins/stewards/server.ts,wake.tsandtemplates.ts, which that entry names. The store migration is also in the diff (theprojectentry "A store migration"), but the escalation/decision plumbing is the user's. @dylan, this one needs your approval; the project steward does not approve it.What changes
deps_decisionstable keyed by(project_id, ticket_key): fingerprints, severity, raised-at/by, need id, status, resolution,snoozed_untilandreminded. Raised idempotently insteward_reportthe momentopsTicketslists a ticket asfiled/reopenedfor a severitydeps.autoAdoptdoes not name, and on every dependency look as the backfill for an open, unlabelled ticket with no decision. Shown as adecideneed (filedBy: "plugin",data.adoption = true) on whichever binding watches the repo now; a recreated binding re-files it and closes the earlier item as moved.Dismissis offered only when the playbook'smaylist declaresdismiss-alert; otherwise the item and the wake omit it.bb stewards done --choiceor the page), the project label on the ticket, or the ticket completing/cancelling. Unreadable tickets change nothing.snoozed_until, closes the item, and re-files the same decision when the date arrives.deadlineAtuses the alert's owncreated_at(fallback: first seen), in the look and the batch plan, so a recreated binding computes the date the ticket was filed with. The plugin owns the deadline;source-contract.tsis untouched.ops_fingerprints.filed_by_threadrecords the acting thread on a filing/reopening;bb stewards showprints it per fingerprint and every decision with its status, dates and resolution.DEPS_DECISION_MIGRATIONS) with its three hashes inmigrations.snapshot.json; the new statements (including thefiled_by_threadALTER) are prepared lazily so legacy-schema tests still open the store.templates.tsdeps-alertstemplate gainsdismiss-alertinmayand drops the "raise a decision escalation" instruction; DESIGN.md §19, README and the stewards skill's ops section follow. The live.bb/stewards/playbooks/deps-alerts.mdis a laterbb-gateslice after this deploys.Testing
npm run typecheckinplugins/stewards: pass.npm testinplugins/stewards: pass (1237 tests, 31 files; CI's stewards matrix entry runs it too, and I ran the full suite locally).server.test.ts: the SC-111 replay (durable decision, recreated binding, computed deadline, one overdue reminder, digest note,bb stewards showprovenance), settle by label/close, Keep tracking snooze and re-raise, the missing-maycase, and the already-closed-alert dismiss instruction.deps.test.ts:deadlineAtfromcreated_atwith first-seen fallback,snoozeUntil, overdue wording, choice gating.store.test.ts: the migration group order and legacy-schema store opens, decision lifecycle,filed_by_thread.