Skip to content

Commit 991fb5e

Browse files
committed
feat(agent-workspace): add escalation digest cadence and reminder suppression
1 parent 0b50c64 commit 991fb5e

8 files changed

Lines changed: 802 additions & 145 deletions

docs/brainstorms/2026-04-16-mainline-ci-stabilization-and-m7-direction-requirements.md

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,35 @@ Deliverables:
528528
- `npm run test:agent-workspace:contracts`
529529
- `npm run verify:agent-workspace:runtime`
530530

531+
### M7.17 (Now): Escalation Notification Digest Cadence and Reminder Suppression Policy (Lane Ops Bridge)
532+
533+
Deliverables:
534+
535+
- add escalation notification-policy route exposing reminder/digest governance parameters.
536+
- add escalation digest route with cadence throttling and explicit `force` override.
537+
- add reminder suppression policy to prevent duplicate notifications under cooldown/overdue-step constraints.
538+
539+
#### M7.17 Progress Note (2026-04-16)
540+
541+
- [Done] expanded `src/server.ts` with escalation notification governance routes:
542+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notification-policy`,
543+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/digest?window=...&strategy=...&limit=...&force=...`.
544+
- [Done] added deterministic digest cadence persistence:
545+
- `agent_workspace_diagnostics/triage_remediation_escalation_digest.v1.json` now stores `lastDigestSentAt` and bounded digest history.
546+
- [Done] added deterministic reminder suppression policy stack:
547+
- `getAgentWorkspaceDiagnosticsRemediationEscalationNotificationPolicy(...)`,
548+
- `applyAgentWorkspaceDiagnosticsRemediationEscalationReminderSuppressionPolicy(...)`,
549+
- `recordAgentWorkspaceDiagnosticsRemediationEscalationDigestDispatch(...)`,
550+
- `buildAgentWorkspaceDiagnosticsRemediationEscalationGovernanceContext(...)`.
551+
- [Done] expanded evidence coverage:
552+
- `src/server.migration.test.ts` now validates notification-policy payload, reminder suppression on consecutive calls, digest cadence throttle (`first=false`, `second=true`), and `force=1` bypass.
553+
- `src/knowledge.api.contract.test.ts` now fail-fast checks notification-policy/digest route contracts.
554+
- `src/agent_workspace.verification.contract.test.ts` + `scripts/verify-agent-workspace-runtime.js` now fail fast on notification-policy/digest route and helper drift.
555+
- [Done] verification evidence:
556+
- `npm test -- src/server.migration.test.ts --runInBand --testNamePattern "escalation SLA breach detection and overdue acknowledgement reminders stay deterministic|escalation notification-policy, digest cadence, and reminder suppression stay deterministic"`
557+
- `npm run test:agent-workspace:contracts`
558+
- `npm run verify:agent-workspace:runtime`
559+
531560
## Success Criteria
532561

533562
- CI failure mode that previously blocked the three agent-workspace suites is eliminated on mainline.
@@ -537,4 +566,4 @@ Deliverables:
537566

538567
## Next Step
539568

540-
Proceed to `/prompts:ce-plan` using this document as the source for `M7.17` decomposition (escalation notification digest cadence and reminder suppression policy), while preserving M7 lane boundary constraints.
569+
Proceed to `/prompts:ce-plan` using this document as the source for `M7.18` decomposition (escalation notification delivery hardening and suppression-observability expansion), while preserving M7 lane boundary constraints.

docs/diataxis/en/explanation/development-progress-dashboard.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,25 @@ Execution anchor:
525525
- `npm run test:agent-workspace:contracts`
526526
- `npm run verify:agent-workspace:runtime`
527527

528+
## Latest Mainline Increment (2026-04-16 M7.17 Escalation Notification Digest Cadence and Reminder Suppression Lane)
529+
530+
- Expanded `src/server.ts` with escalation notification-governance routes:
531+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notification-policy`,
532+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/digest?window=...&strategy=...&limit=...&force=...`.
533+
- Added deterministic digest cadence persistence:
534+
- `runtime_data/agent_workspace_diagnostics/triage_remediation_escalation_digest.v1.json` now stores `lastDigestSentAt` and bounded digest history.
535+
- Added deterministic reminder-suppression policy:
536+
- cooldown suppression for recently notified escalations,
537+
- overdue-step suppression when overdue growth is below configured minimum.
538+
- Expanded executable evidence:
539+
- `src/server.migration.test.ts` now validates notification-policy payload shape, reminder suppression on consecutive calls, digest throttle cadence (`first=false`, `second=true`), and `force=1` bypass.
540+
- Hardened runtime verification gate:
541+
- `src/knowledge.api.contract.test.ts`, `src/agent_workspace.verification.contract.test.ts`, and `scripts/verify-agent-workspace-runtime.js` now fail fast on notification-policy/digest routes and helper drift.
542+
- Verification evidence:
543+
- `npm test -- src/server.migration.test.ts --runInBand --testNamePattern \"escalation SLA breach detection and overdue acknowledgement reminders stay deterministic|escalation notification-policy, digest cadence, and reminder suppression stay deterministic\"`
544+
- `npm run test:agent-workspace:contracts`
545+
- `npm run verify:agent-workspace:runtime`
546+
528547
## Mainline vs Working-Branch Snapshot (2026-04-14)
529548

530549
| Capability Slice | Working Branch (`feat/learning-multi-tutor-adapter`) | Mainline (`origin/main`) | Integration Status |
@@ -573,7 +592,7 @@ This dashboard aligns against the following requirement chain:
573592
| L2 Retrieval | explainable hybrid/vector retrieval + governance | Expanded in branch-oriented plans | Mainline file-backed baseline only (`src/learning/store.ts`) | Re-enter lane after concrete module evidence lands on mainline |
574593
| L3 Learning | mastery diagnostics + path/session loop | Expanded in branch | Partially integrated | Contract and integration parity |
575594
| L4 Interaction | agent conversation + focus/path pane runtime | Implemented in branch | M1-M4 baseline integrated on mainline | Expand capability surface via typed contract only |
576-
| L5 Governance | runbook, diagnostics, replay/autonomy controls | Expanded in branch | Operator diagnostics persistence/triage/history/threshold governance + runbook automation/audit + adaptive simulation/remediation + remediation backtest/approval-gate + approval-policy hardening/regression-alarms + approval-policy drift/escalation + escalation acknowledgement lifecycle/audit + escalation SLA/reminder baseline integrated | Add escalation notification digest cadence and reminder suppression policy |
595+
| L5 Governance | runbook, diagnostics, replay/autonomy controls | Expanded in branch | Operator diagnostics persistence/triage/history/threshold governance + runbook automation/audit + adaptive simulation/remediation + remediation backtest/approval-gate + approval-policy hardening/regression-alarms + approval-policy drift/escalation + escalation acknowledgement lifecycle/audit + escalation SLA/reminder baseline + notification digest/suppression baseline integrated | M7.18: delivery-channel hardening and suppression observability |
577596

578597
## Verification Baseline
579598

docs/diataxis/zh/explanation/development-progress-dashboard.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,25 @@
527527
- `npm run test:agent-workspace:contracts`
528528
- `npm run verify:agent-workspace:runtime`
529529

530+
## 主线最新增量(2026-04-16 M7.17 升级通知摘要节奏与提醒抑制策略链路)
531+
532+
- 已在 `src/server.ts` 增加升级通知治理路由:
533+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notification-policy`
534+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/digest?window=...&strategy=...&limit=...&force=...`
535+
- 已新增确定性摘要节奏持久化工件:
536+
- `runtime_data/agent_workspace_diagnostics/triage_remediation_escalation_digest.v1.json` 持久化 `lastDigestSentAt` 与有界摘要历史。
537+
- 已新增确定性提醒抑制策略:
538+
- 最近已通知升级动作按 cooldown 抑制,
539+
- 逾期增量未达到最小步长时按 overdue-step 抑制。
540+
- 已补可执行证据:
541+
- `src/server.migration.test.ts` 新增 notification-policy 载荷断言、连续提醒调用抑制断言、摘要节奏限流断言(首次不节流、二次节流)与 `force=1` 旁路断言。
542+
- 已加固 runtime 门禁:
543+
- `src/knowledge.api.contract.test.ts``src/agent_workspace.verification.contract.test.ts``scripts/verify-agent-workspace-runtime.js` 新增 notification-policy/digest 路由与 helper 的 fail-fast 断言。
544+
- 验证证据:
545+
- `npm test -- src/server.migration.test.ts --runInBand --testNamePattern \"escalation SLA breach detection and overdue acknowledgement reminders stay deterministic|escalation notification-policy, digest cadence, and reminder suppression stay deterministic\"`
546+
- `npm run test:agent-workspace:contracts`
547+
- `npm run verify:agent-workspace:runtime`
548+
530549
## 主线 vs 工作分支快照(2026-04-14)
531550

532551
| 能力切片 | 工作分支(`feat/learning-multi-tutor-adapter`| 主线(`origin/main`| 集成状态 |
@@ -575,7 +594,7 @@
575594
| L2 检索层 | 可解释混合/向量检索 + 治理 | 分支规划增强中 | 主线当前为 file-backed 基线(`src/learning/store.ts`| 待主线出现对应模块证据后再收敛 |
576595
| L3 学习层 | 掌握诊断 + 路径/会话闭环 | 分支增强中 | 主线部分集成 | 契约与集成一致性 |
577596
| L4 交互层 | agent 对话 + focus/path pane 运行时 | 分支已实现 | 主线 M1-M4 已落入基线 | 继续通过 typed contract 扩展动作面 |
578-
| L5 治理层 | runbook/诊断/回放与自动化 | 分支增强中 | 主线已集成运维诊断持久化/分级/趋势历史/阈值治理 + runbook 自动化/阈值审计 + 自适应模拟/自动修复 + 回测/批准门禁 + 批准策略硬化/回归告警 + 批准策略漂移/升级 + 升级确认生命周期/审计 + 升级 SLA/提醒基线 | 增补升级通知摘要节奏与提醒抑制策略 |
597+
| L5 治理层 | runbook/诊断/回放与自动化 | 分支增强中 | 主线已集成运维诊断持久化/分级/趋势历史/阈值治理 + runbook 自动化/阈值审计 + 自适应模拟/自动修复 + 回测/批准门禁 + 批准策略硬化/回归告警 + 批准策略漂移/升级 + 升级确认生命周期/审计 + 升级 SLA/提醒基线 + 通知摘要/抑制基线 | M7.18:通知交付链路硬化与抑制可观测性扩展 |
579598

580599
## 验证基线
581600

scripts/verify-agent-workspace-runtime.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,14 @@ function verifyAgentWorkspaceRuntime(repoRoot = path.resolve(__dirname, '..')) {
156156
serverSource.includes('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/reminders'),
157157
'Missing diagnostics remediation escalation reminders route in src/server.ts'
158158
);
159+
assert(
160+
serverSource.includes('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notification-policy'),
161+
'Missing diagnostics remediation escalation notification policy route in src/server.ts'
162+
);
163+
assert(
164+
serverSource.includes('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/digest'),
165+
'Missing diagnostics remediation escalation digest route in src/server.ts'
166+
);
159167
assert(
160168
serverSource.includes('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/acknowledgements'),
161169
'Missing diagnostics remediation escalation acknowledgement route in src/server.ts'
@@ -256,6 +264,22 @@ function verifyAgentWorkspaceRuntime(repoRoot = path.resolve(__dirname, '..')) {
256264
serverSource.includes('buildAgentWorkspaceDiagnosticsRemediationEscalationSlaReport'),
257265
'Missing remediation escalation SLA report builder in src/server.ts'
258266
);
267+
assert(
268+
serverSource.includes('getAgentWorkspaceDiagnosticsRemediationEscalationNotificationPolicy'),
269+
'Missing remediation escalation notification policy helper in src/server.ts'
270+
);
271+
assert(
272+
serverSource.includes('recordAgentWorkspaceDiagnosticsRemediationEscalationDigestDispatch'),
273+
'Missing remediation escalation digest dispatch recorder in src/server.ts'
274+
);
275+
assert(
276+
serverSource.includes('applyAgentWorkspaceDiagnosticsRemediationEscalationReminderSuppressionPolicy'),
277+
'Missing remediation escalation reminder suppression policy helper in src/server.ts'
278+
);
279+
assert(
280+
serverSource.includes('buildAgentWorkspaceDiagnosticsRemediationEscalationGovernanceContext'),
281+
'Missing remediation escalation governance context builder in src/server.ts'
282+
);
259283
assert(
260284
serverSource.includes('acknowledgeAgentWorkspaceDiagnosticsRemediationEscalation'),
261285
'Missing remediation escalation acknowledge helper in src/server.ts'
@@ -315,12 +339,14 @@ function verifyAgentWorkspaceRuntime(repoRoot = path.resolve(__dirname, '..')) {
315339
'diagnostics remediation policy drift route exists',
316340
'diagnostics remediation escalation route exists',
317341
'diagnostics remediation escalation SLA/reminder routes exist',
342+
'diagnostics remediation escalation notification policy and digest routes exist',
318343
'diagnostics remediation escalation acknowledgement routes exist',
319344
'diagnostics remediation approval routes exist',
320345
'diagnostics triage remediation route exists',
321346
'diagnostics retention governance exists',
322347
'diagnostics alert-threshold governance helpers exist',
323348
'diagnostics threshold simulation, drift, remediation, escalation, and SLA helpers exist',
349+
'diagnostics escalation notification, digest cadence, and reminder suppression helpers exist',
324350
'diagnostics remediation policy and alarm helpers exist',
325351
'diagnostics threshold audit helpers exist',
326352
'diagnostics remediation approval trail helpers exist',

src/agent_workspace.verification.contract.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ describe('agent workspace verification script contracts', () => {
6262
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/audit');
6363
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/sla');
6464
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/reminders');
65+
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notification-policy');
66+
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/digest');
6567
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/acknowledge');
6668
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/approvals');
6769
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/approve');
@@ -85,6 +87,10 @@ describe('agent workspace verification script contracts', () => {
8587
expect(runtimeSource).toContain('annotateAgentWorkspaceDiagnosticsRemediationEscalationActionsWithLifecycle');
8688
expect(runtimeSource).toContain('refreshAgentWorkspaceDiagnosticsRemediationEscalationMonitorTrail');
8789
expect(runtimeSource).toContain('buildAgentWorkspaceDiagnosticsRemediationEscalationSlaReport');
90+
expect(runtimeSource).toContain('getAgentWorkspaceDiagnosticsRemediationEscalationNotificationPolicy');
91+
expect(runtimeSource).toContain('recordAgentWorkspaceDiagnosticsRemediationEscalationDigestDispatch');
92+
expect(runtimeSource).toContain('applyAgentWorkspaceDiagnosticsRemediationEscalationReminderSuppressionPolicy');
93+
expect(runtimeSource).toContain('buildAgentWorkspaceDiagnosticsRemediationEscalationGovernanceContext');
8894
expect(runtimeSource).toContain('acknowledgeAgentWorkspaceDiagnosticsRemediationEscalation');
8995
expect(runtimeSource).toContain('requestAgentWorkspaceDiagnosticsRemediationApproval');
9096
expect(runtimeSource).toContain('executeAgentWorkspaceDiagnosticsAutoRemediation');

src/knowledge.api.contract.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ describe('Knowledge mastery API contract wiring', () => {
2626
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/audit',
2727
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/sla',
2828
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/reminders',
29+
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notification-policy',
30+
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/digest',
2931
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/acknowledge',
3032
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/approvals',
3133
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/approve',

0 commit comments

Comments
 (0)