Skip to content

Commit fb07e2e

Browse files
committed
feat(agent-workspace): add notification delivery observability
1 parent 991fb5e commit fb07e2e

8 files changed

Lines changed: 665 additions & 5 deletions

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

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,36 @@ Deliverables:
557557
- `npm run test:agent-workspace:contracts`
558558
- `npm run verify:agent-workspace:runtime`
559559

560+
### M7.18 (Now): Notification Delivery Hardening and Suppression Observability (Lane Ops Bridge)
561+
562+
Deliverables:
563+
564+
- persist a bounded delivery trail for reminder and digest notification channels.
565+
- expose a bounded notification-log route with delivery/suppression summary counters.
566+
- keep suppression state inspectable without replaying route side effects.
567+
568+
#### M7.18 Progress Note (2026-04-16)
569+
570+
- [Done] expanded `src/server.ts` with notification delivery observability surface:
571+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notifications?limit=...`.
572+
- [Done] added bounded notification delivery persistence:
573+
- `agent_workspace_diagnostics/triage_remediation_escalation_notifications.v1.json` now stores emitted reminder deliveries, suppressed reminder deliveries, and digest throttling/emission events.
574+
- [Done] hardened notification governance output:
575+
- `/triage/remediation/escalation/notification-policy` now includes `notificationSummary`,
576+
- `/triage/remediation/escalation/reminders` and `/digest` now append delivery trail entries after dispatch/suppression decisions.
577+
- [Done] added deterministic helper stack:
578+
- `readAgentWorkspaceDiagnosticsRemediationEscalationNotificationTrail(...)`,
579+
- `appendAgentWorkspaceDiagnosticsRemediationEscalationNotificationEntries(...)`,
580+
- `buildAgentWorkspaceDiagnosticsRemediationEscalationNotificationSummary(...)`.
581+
- [Done] expanded evidence coverage:
582+
- `src/server.migration.test.ts` now validates notification trail route semantics, summary counters, suppression-reason visibility, and persisted notification file contents.
583+
- `src/knowledge.api.contract.test.ts` now fail-fast checks notification-log route contract.
584+
- `src/agent_workspace.verification.contract.test.ts` + `scripts/verify-agent-workspace-runtime.js` now fail fast on notification-log route and helper drift.
585+
- [Done] verification evidence:
586+
- `npm test -- src/server.migration.test.ts --runInBand --testNamePattern "escalation notification-policy, digest cadence, and reminder suppression stay deterministic|escalation notification delivery trail and suppression observability stay deterministic"`
587+
- `npm run test:agent-workspace:contracts`
588+
- `npm run verify:agent-workspace:runtime`
589+
560590
## Success Criteria
561591

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

567597
## Next Step
568598

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.
599+
Proceed to `/prompts:ce-plan` using this document as the source for `M7.19` decomposition (notification delivery health auditing and stale-notification cleanup), while preserving M7 lane boundary constraints.

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,24 @@ Execution anchor:
544544
- `npm run test:agent-workspace:contracts`
545545
- `npm run verify:agent-workspace:runtime`
546546

547+
## Latest Mainline Increment (2026-04-16 M7.18 Notification Delivery Hardening and Suppression Observability Lane)
548+
549+
- Expanded `src/server.ts` with bounded delivery observability route:
550+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notifications?limit=...`.
551+
- Added deterministic delivery-trail persistence:
552+
- `runtime_data/agent_workspace_diagnostics/triage_remediation_escalation_notifications.v1.json` now stores emitted reminder deliveries, suppressed reminder events, and digest throttle/emission events.
553+
- Hardened notification governance output:
554+
- `/triage/remediation/escalation/notification-policy` now includes `notificationSummary`,
555+
- reminder and digest routes now append delivery-trail entries after policy decisions.
556+
- Expanded executable evidence:
557+
- `src/server.migration.test.ts` now validates notification log route semantics, by-channel/by-status summary counters, suppression-reason visibility, and persisted delivery-log contents.
558+
- Hardened runtime verification gate:
559+
- `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-log route and helper drift.
560+
- Verification evidence:
561+
- `npm test -- src/server.migration.test.ts --runInBand --testNamePattern \"escalation notification-policy, digest cadence, and reminder suppression stay deterministic|escalation notification delivery trail and suppression observability stay deterministic\"`
562+
- `npm run test:agent-workspace:contracts`
563+
- `npm run verify:agent-workspace:runtime`
564+
547565
## Mainline vs Working-Branch Snapshot (2026-04-14)
548566

549567
| Capability Slice | Working Branch (`feat/learning-multi-tutor-adapter`) | Mainline (`origin/main`) | Integration Status |
@@ -592,7 +610,7 @@ This dashboard aligns against the following requirement chain:
592610
| 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 |
593611
| L3 Learning | mastery diagnostics + path/session loop | Expanded in branch | Partially integrated | Contract and integration parity |
594612
| L4 Interaction | agent conversation + focus/path pane runtime | Implemented in branch | M1-M4 baseline integrated on mainline | Expand capability surface via typed contract only |
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 |
613+
| 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 + delivery-log observability integrated | M7.19: delivery-health auditing and stale-notification cleanup |
596614

597615
## Verification Baseline
598616

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,24 @@
546546
- `npm run test:agent-workspace:contracts`
547547
- `npm run verify:agent-workspace:runtime`
548548

549+
## 主线最新增量(2026-04-16 M7.18 通知交付链路硬化与抑制可观测性链路)
550+
551+
- 已在 `src/server.ts` 增加有界通知交付可观测路由:
552+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notifications?limit=...`
553+
- 已新增确定性交付轨迹持久化工件:
554+
- `runtime_data/agent_workspace_diagnostics/triage_remediation_escalation_notifications.v1.json` 持久化 reminder 已发送、reminder 已抑制、digest 已发送与 digest 节流事件。
555+
- 已硬化通知治理输出:
556+
- `/triage/remediation/escalation/notification-policy` 新增 `notificationSummary`
557+
- reminder 与 digest 路由在完成策略判定后会追加交付轨迹记录。
558+
- 已补可执行证据:
559+
- `src/server.migration.test.ts` 新增通知日志路由语义、按 channel/status 聚合计数、抑制原因可见性与交付日志落盘断言。
560+
- 已加固 runtime 门禁:
561+
- `src/knowledge.api.contract.test.ts``src/agent_workspace.verification.contract.test.ts``scripts/verify-agent-workspace-runtime.js` 新增 notification-log 路由与 helper 的 fail-fast 断言。
562+
- 验证证据:
563+
- `npm test -- src/server.migration.test.ts --runInBand --testNamePattern \"escalation notification-policy, digest cadence, and reminder suppression stay deterministic|escalation notification delivery trail and suppression observability stay deterministic\"`
564+
- `npm run test:agent-workspace:contracts`
565+
- `npm run verify:agent-workspace:runtime`
566+
549567
## 主线 vs 工作分支快照(2026-04-14)
550568

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

599617
## 验证基线
600618

scripts/verify-agent-workspace-runtime.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@ function verifyAgentWorkspaceRuntime(repoRoot = path.resolve(__dirname, '..')) {
160160
serverSource.includes('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notification-policy'),
161161
'Missing diagnostics remediation escalation notification policy route in src/server.ts'
162162
);
163+
assert(
164+
serverSource.includes('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notifications'),
165+
'Missing diagnostics remediation escalation notifications route in src/server.ts'
166+
);
163167
assert(
164168
serverSource.includes('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/digest'),
165169
'Missing diagnostics remediation escalation digest route in src/server.ts'
@@ -272,6 +276,18 @@ function verifyAgentWorkspaceRuntime(repoRoot = path.resolve(__dirname, '..')) {
272276
serverSource.includes('recordAgentWorkspaceDiagnosticsRemediationEscalationDigestDispatch'),
273277
'Missing remediation escalation digest dispatch recorder in src/server.ts'
274278
);
279+
assert(
280+
serverSource.includes('readAgentWorkspaceDiagnosticsRemediationEscalationNotificationTrail'),
281+
'Missing remediation escalation notification trail reader in src/server.ts'
282+
);
283+
assert(
284+
serverSource.includes('appendAgentWorkspaceDiagnosticsRemediationEscalationNotificationEntries'),
285+
'Missing remediation escalation notification trail writer in src/server.ts'
286+
);
287+
assert(
288+
serverSource.includes('buildAgentWorkspaceDiagnosticsRemediationEscalationNotificationSummary'),
289+
'Missing remediation escalation notification summary helper in src/server.ts'
290+
);
275291
assert(
276292
serverSource.includes('applyAgentWorkspaceDiagnosticsRemediationEscalationReminderSuppressionPolicy'),
277293
'Missing remediation escalation reminder suppression policy helper in src/server.ts'
@@ -339,14 +355,14 @@ function verifyAgentWorkspaceRuntime(repoRoot = path.resolve(__dirname, '..')) {
339355
'diagnostics remediation policy drift route exists',
340356
'diagnostics remediation escalation route exists',
341357
'diagnostics remediation escalation SLA/reminder routes exist',
342-
'diagnostics remediation escalation notification policy and digest routes exist',
358+
'diagnostics remediation escalation notification policy, log, and digest routes exist',
343359
'diagnostics remediation escalation acknowledgement routes exist',
344360
'diagnostics remediation approval routes exist',
345361
'diagnostics triage remediation route exists',
346362
'diagnostics retention governance exists',
347363
'diagnostics alert-threshold governance helpers exist',
348364
'diagnostics threshold simulation, drift, remediation, escalation, and SLA helpers exist',
349-
'diagnostics escalation notification, digest cadence, and reminder suppression helpers exist',
365+
'diagnostics escalation notification, digest cadence, reminder suppression, and delivery-log helpers exist',
350366
'diagnostics remediation policy and alarm helpers exist',
351367
'diagnostics threshold audit helpers exist',
352368
'diagnostics remediation approval trail helpers exist',

src/agent_workspace.verification.contract.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ describe('agent workspace verification script contracts', () => {
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');
6565
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/notifications');
6667
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/digest');
6768
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/acknowledge');
6869
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/approvals');
@@ -89,6 +90,9 @@ describe('agent workspace verification script contracts', () => {
8990
expect(runtimeSource).toContain('buildAgentWorkspaceDiagnosticsRemediationEscalationSlaReport');
9091
expect(runtimeSource).toContain('getAgentWorkspaceDiagnosticsRemediationEscalationNotificationPolicy');
9192
expect(runtimeSource).toContain('recordAgentWorkspaceDiagnosticsRemediationEscalationDigestDispatch');
93+
expect(runtimeSource).toContain('readAgentWorkspaceDiagnosticsRemediationEscalationNotificationTrail');
94+
expect(runtimeSource).toContain('appendAgentWorkspaceDiagnosticsRemediationEscalationNotificationEntries');
95+
expect(runtimeSource).toContain('buildAgentWorkspaceDiagnosticsRemediationEscalationNotificationSummary');
9296
expect(runtimeSource).toContain('applyAgentWorkspaceDiagnosticsRemediationEscalationReminderSuppressionPolicy');
9397
expect(runtimeSource).toContain('buildAgentWorkspaceDiagnosticsRemediationEscalationGovernanceContext');
9498
expect(runtimeSource).toContain('acknowledgeAgentWorkspaceDiagnosticsRemediationEscalation');

src/knowledge.api.contract.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ describe('Knowledge mastery API contract wiring', () => {
2727
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/sla',
2828
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/reminders',
2929
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notification-policy',
30+
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/notifications',
3031
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/digest',
3132
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation/acknowledge',
3233
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/approvals',

0 commit comments

Comments
 (0)