Skip to content

Commit 66cd93a

Browse files
committed
feat(agent-workspace): add policy drift detection and runbook escalation
1 parent 3697ef6 commit 66cd93a

8 files changed

Lines changed: 534 additions & 4 deletions

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

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,33 @@ Deliverables:
443443
- `npm run test:agent-workspace:contracts`
444444
- `npm run verify:agent-workspace:runtime`
445445

446+
### M7.14 (Now): Approval-Policy Drift Detection and Alarm-to-Runbook Escalation Automation (Lane Ops Bridge)
447+
448+
Deliverables:
449+
450+
- add deterministic approval-policy drift detection report surface.
451+
- automate escalation synthesis from remediation alarms plus approval drift signals.
452+
- keep escalation output runbook-link aware for operator execution.
453+
454+
#### M7.14 Progress Note (2026-04-16)
455+
456+
- [Done] expanded `src/server.ts` with policy-drift route:
457+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/policy/drift?limit=...`.
458+
- [Done] expanded `src/server.ts` with escalation route:
459+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation?window=...&strategy=...&limit=...`.
460+
- [Done] added deterministic policy drift + escalation synthesis helpers:
461+
- `buildAgentWorkspaceDiagnosticsRemediationPolicyDriftReport(...)`,
462+
- `buildAgentWorkspaceDiagnosticsRemediationEscalationActions(...)`,
463+
- `normalizeAgentWorkspaceDiagnosticsRemediationDriftInspectLimit(...)`.
464+
- [Done] expanded evidence coverage:
465+
- `src/server.migration.test.ts` now validates drift summary counters, drift signal IDs/severity, and escalation action synthesis from both drift and alarms.
466+
- `src/knowledge.api.contract.test.ts` now fail-fast checks policy-drift/escalation route contracts.
467+
- `src/agent_workspace.verification.contract.test.ts` + `scripts/verify-agent-workspace-runtime.js` now fail fast on drift/escalation helper and route drift.
468+
- [Done] verification evidence:
469+
- `npm test -- src/server.migration.test.ts --runInBand --testNamePattern "triage route summarizes replay risk|triage history and alert-threshold governance|adaptive threshold simulation and remediation guardrails|remediation backtest and approval-gate flow|approval policy hardening and remediation trend-regression alarms|approval-policy drift detection and alarm-to-runbook escalation stay deterministic"`
470+
- `npm run test:agent-workspace:contracts`
471+
- `npm run verify:agent-workspace:runtime`
472+
446473
## Success Criteria
447474

448475
- CI failure mode that previously blocked the three agent-workspace suites is eliminated on mainline.
@@ -452,4 +479,4 @@ Deliverables:
452479

453480
## Next Step
454481

455-
Proceed to `/prompts:ce-plan` using this document as the source for `M7.14` decomposition (approval-policy drift detection and alarm-to-runbook escalation automation), while preserving M7 lane boundary constraints.
482+
Proceed to `/prompts:ce-plan` using this document as the source for `M7.15` decomposition (escalation acknowledgement lifecycle and runbook-action status audit trail), 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
@@ -464,6 +464,25 @@ Execution anchor:
464464
- `npm run test:agent-workspace:contracts`
465465
- `npm run verify:agent-workspace:runtime`
466466

467+
## Latest Mainline Increment (2026-04-16 M7.14 Approval-Policy Drift Detection and Alarm-to-Runbook Escalation Lane)
468+
469+
- Expanded `src/server.ts` with policy-drift diagnostics route:
470+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/policy/drift?limit=...`.
471+
- Expanded `src/server.ts` with remediation escalation route:
472+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation?window=...&strategy=...&limit=...`.
473+
- Added deterministic drift/escalation helper stack:
474+
- `normalizeAgentWorkspaceDiagnosticsRemediationDriftInspectLimit(...)`,
475+
- `buildAgentWorkspaceDiagnosticsRemediationPolicyDriftReport(...)`,
476+
- `buildAgentWorkspaceDiagnosticsRemediationEscalationActions(...)`.
477+
- Extended executable evidence:
478+
- `src/server.migration.test.ts` now validates drift summary counters, drift signal severities/IDs, and escalation actions synthesized from both drift signals and remediation alarms.
479+
- Hardened runtime verification gate:
480+
- `src/knowledge.api.contract.test.ts`, `src/agent_workspace.verification.contract.test.ts`, and `scripts/verify-agent-workspace-runtime.js` now fail fast on policy-drift/escalation route and helper drift.
481+
- Verification evidence:
482+
- `npm test -- src/server.migration.test.ts --runInBand --testNamePattern \"triage route summarizes replay risk|triage history and alert-threshold governance|adaptive threshold simulation and remediation guardrails|remediation backtest and approval-gate flow|approval policy hardening and remediation trend-regression alarms|approval-policy drift detection and alarm-to-runbook escalation stay deterministic\"`
483+
- `npm run test:agent-workspace:contracts`
484+
- `npm run verify:agent-workspace:runtime`
485+
467486
## Mainline vs Working-Branch Snapshot (2026-04-14)
468487

469488
| Capability Slice | Working Branch (`feat/learning-multi-tutor-adapter`) | Mainline (`origin/main`) | Integration Status |
@@ -512,7 +531,7 @@ This dashboard aligns against the following requirement chain:
512531
| 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 |
513532
| L3 Learning | mastery diagnostics + path/session loop | Expanded in branch | Partially integrated | Contract and integration parity |
514533
| L4 Interaction | agent conversation + focus/path pane runtime | Implemented in branch | M1-M4 baseline integrated on mainline | Expand capability surface via typed contract only |
515-
| 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 baseline integrated | Add approval-policy drift detection and alarm-to-runbook escalation automation |
534+
| 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 baseline integrated | Add escalation acknowledgement lifecycle and runbook-action status audit trail |
516535

517536
## Verification Baseline
518537

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,25 @@
466466
- `npm run test:agent-workspace:contracts`
467467
- `npm run verify:agent-workspace:runtime`
468468

469+
## 主线最新增量(2026-04-16 M7.14 批准策略漂移检测与告警到 Runbook 升级链路)
470+
471+
- 已在 `src/server.ts` 增加策略漂移诊断路由:
472+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/policy/drift?limit=...`
473+
- 已在 `src/server.ts` 增加修复升级路由:
474+
- `GET /api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation?window=...&strategy=...&limit=...`
475+
- 已补齐确定性漂移/升级 helper 栈:
476+
- `normalizeAgentWorkspaceDiagnosticsRemediationDriftInspectLimit(...)`
477+
- `buildAgentWorkspaceDiagnosticsRemediationPolicyDriftReport(...)`
478+
- `buildAgentWorkspaceDiagnosticsRemediationEscalationActions(...)`
479+
- 已补可执行证据:
480+
- `src/server.migration.test.ts` 新增漂移摘要计数、漂移信号严重级别/ID、以及“告警 + 漂移信号”联合升级动作断言。
481+
- 已加固 runtime 门禁:
482+
- `src/knowledge.api.contract.test.ts``src/agent_workspace.verification.contract.test.ts``scripts/verify-agent-workspace-runtime.js` 新增 policy-drift/escalation 路由与 helper 的 fail-fast 断言。
483+
- 验证证据:
484+
- `npm test -- src/server.migration.test.ts --runInBand --testNamePattern \"triage route summarizes replay risk|triage history and alert-threshold governance|adaptive threshold simulation and remediation guardrails|remediation backtest and approval-gate flow|approval policy hardening and remediation trend-regression alarms|approval-policy drift detection and alarm-to-runbook escalation stay deterministic\"`
485+
- `npm run test:agent-workspace:contracts`
486+
- `npm run verify:agent-workspace:runtime`
487+
469488
## 主线 vs 工作分支快照(2026-04-14)
470489

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

519538
## 验证基线
520539

scripts/verify-agent-workspace-runtime.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,14 @@ function verifyAgentWorkspaceRuntime(repoRoot = path.resolve(__dirname, '..')) {
140140
serverSource.includes('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/policy'),
141141
'Missing diagnostics remediation policy route in src/server.ts'
142142
);
143+
assert(
144+
serverSource.includes('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/policy/drift'),
145+
'Missing diagnostics remediation policy drift route in src/server.ts'
146+
);
147+
assert(
148+
serverSource.includes('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation'),
149+
'Missing diagnostics remediation escalation route in src/server.ts'
150+
);
143151
assert(
144152
serverSource.includes('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/approvals'),
145153
'Missing diagnostics remediation approvals route in src/server.ts'
@@ -188,6 +196,18 @@ function verifyAgentWorkspaceRuntime(repoRoot = path.resolve(__dirname, '..')) {
188196
serverSource.includes('buildAgentWorkspaceDiagnosticsRemediationBacktestAlarms'),
189197
'Missing diagnostics remediation alarm builder in src/server.ts'
190198
);
199+
assert(
200+
serverSource.includes('normalizeAgentWorkspaceDiagnosticsRemediationDriftInspectLimit'),
201+
'Missing diagnostics remediation drift inspect-limit normalizer in src/server.ts'
202+
);
203+
assert(
204+
serverSource.includes('buildAgentWorkspaceDiagnosticsRemediationPolicyDriftReport'),
205+
'Missing diagnostics remediation policy drift report builder in src/server.ts'
206+
);
207+
assert(
208+
serverSource.includes('buildAgentWorkspaceDiagnosticsRemediationEscalationActions'),
209+
'Missing diagnostics remediation escalation builder in src/server.ts'
210+
);
191211
assert(
192212
serverSource.includes('requestAgentWorkspaceDiagnosticsRemediationApproval'),
193213
'Missing diagnostics remediation approval-request helper in src/server.ts'
@@ -240,11 +260,13 @@ function verifyAgentWorkspaceRuntime(repoRoot = path.resolve(__dirname, '..')) {
240260
'diagnostics remediation backtest route exists',
241261
'diagnostics remediation alarm route exists',
242262
'diagnostics remediation policy route exists',
263+
'diagnostics remediation policy drift route exists',
264+
'diagnostics remediation escalation route exists',
243265
'diagnostics remediation approval routes exist',
244266
'diagnostics triage remediation route exists',
245267
'diagnostics retention governance exists',
246268
'diagnostics alert-threshold governance helpers exist',
247-
'diagnostics threshold simulation and remediation helpers exist',
269+
'diagnostics threshold simulation, drift, and remediation helpers exist',
248270
'diagnostics remediation policy and alarm helpers exist',
249271
'diagnostics threshold audit helpers exist',
250272
'diagnostics remediation approval trail helpers exist',

src/agent_workspace.verification.contract.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ describe('agent workspace verification script contracts', () => {
5656
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/backtest');
5757
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/alarms');
5858
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/policy');
59+
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/policy/drift');
60+
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation');
5961
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/approvals');
6062
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/approve');
6163
expect(runtimeSource).toContain('/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation');
@@ -68,6 +70,9 @@ describe('agent workspace verification script contracts', () => {
6870
expect(runtimeSource).toContain('isAgentWorkspaceDiagnosticsApprovalRequiredByPolicy');
6971
expect(runtimeSource).toContain('buildAgentWorkspaceDiagnosticsRemediationBacktest');
7072
expect(runtimeSource).toContain('buildAgentWorkspaceDiagnosticsRemediationBacktestAlarms');
73+
expect(runtimeSource).toContain('normalizeAgentWorkspaceDiagnosticsRemediationDriftInspectLimit');
74+
expect(runtimeSource).toContain('buildAgentWorkspaceDiagnosticsRemediationPolicyDriftReport');
75+
expect(runtimeSource).toContain('buildAgentWorkspaceDiagnosticsRemediationEscalationActions');
7176
expect(runtimeSource).toContain('requestAgentWorkspaceDiagnosticsRemediationApproval');
7277
expect(runtimeSource).toContain('executeAgentWorkspaceDiagnosticsAutoRemediation');
7378
expect(runtimeSource).toContain('consumeAgentWorkspaceDiagnosticsRemediationApproval');

src/knowledge.api.contract.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ describe('Knowledge mastery API contract wiring', () => {
2020
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/backtest',
2121
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/alarms',
2222
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/policy',
23+
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/policy/drift',
24+
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/escalation',
2325
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/approvals',
2426
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation/approve',
2527
'/api/knowledge/operator/agent-workspace-diagnostics/triage/remediation',

0 commit comments

Comments
 (0)