Skip to content

Commit 2ded132

Browse files
committed
feat(agent-workspace): add diagnostics trend index and export surfaces
1 parent 783ac6b commit 2ded132

6 files changed

Lines changed: 355 additions & 3 deletions

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

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,27 @@ Deliverables:
237237
- `npm test -- src/agent_workspace.runtime.behavior.test.ts --runInBand`
238238
- `npm run test:agent-workspace:contracts`
239239

240+
### M7.6 (Now): Operator Diagnostics Trend/Index/Export Deepening (Lane Ops Bridge)
241+
242+
Deliverables:
243+
244+
- add bounded runtime diagnostics trend/index/export surfaces to improve operator triage and handoff continuity.
245+
- add stable runbook-link payloads in diagnostics export without coupling to foundation/reader lanes.
246+
247+
#### M7.6 Progress Note (2026-04-16)
248+
249+
- [Done] expanded `src/frontend/agent_workspace_runtime.js` with diagnostics deepening surfaces:
250+
- `getDiagnosticsTrendSnapshot()` for replay-rate and per-operation outcome trends,
251+
- `getDiagnosticsIndexSnapshot()` for turn-id and operation-id indexes,
252+
- `exportDiagnosticsReport({ format })` for combined snapshot/trend/index export.
253+
- [Done] added stable runbook-link payloads in diagnostics report export for EN/ZH dashboard + plan/reference handoff.
254+
- [Done] expanded evidence coverage:
255+
- `src/agent_workspace.runtime.behavior.test.ts` now asserts trend/index/export semantics,
256+
- `src/agent_workspace.runtime.integration.test.ts` asserts trend/index/export diagnostics surface wiring.
257+
- [Done] verification evidence:
258+
- `npm test -- src/agent_workspace.runtime.behavior.test.ts --runInBand`
259+
- `npm run test:agent-workspace:contracts`
260+
240261
## Success Criteria
241262

242263
- CI failure mode that previously blocked the three agent-workspace suites is eliminated on mainline.
@@ -246,4 +267,4 @@ Deliverables:
246267

247268
## Next Step
248269

249-
Proceed to `/prompts:ce-plan` using this document as the source for `M7.2` and `M7.3` decomposition.
270+
Proceed to `/prompts:ce-plan` using this document as the source for `M7.7` decomposition (operator route/index persistence and CI evidence gate hardening), while preserving M7 lane boundary constraints.

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,23 @@ Execution anchor:
314314
- `npm test -- src/agent_workspace.runtime.behavior.test.ts --runInBand`
315315
- `npm run test:agent-workspace:contracts`
316316

317+
## Latest Mainline Increment (2026-04-16 M7.6 Operator Diagnostics Trend/Index/Export Lane)
318+
319+
- Extended runtime diagnostics operators in `src/frontend/agent_workspace_runtime.js` with bounded read-only diagnostics APIs:
320+
- `getDiagnosticsTrendSnapshot()` for replay-rate and per-operation outcome trends,
321+
- `getDiagnosticsIndexSnapshot()` for turn-id and operation-id indexes,
322+
- `exportDiagnosticsReport({ format })` for combined snapshot/trend/index export.
323+
- Added stable runbook-link payloads to exported diagnostics reports for operator handoff:
324+
- EN/ZH development dashboards,
325+
- agent conversation + focus mode plan,
326+
- M7 direction requirements baseline.
327+
- Expanded runtime evidence:
328+
- `src/agent_workspace.runtime.behavior.test.ts` now validates trend/index/export diagnostics semantics,
329+
- `src/agent_workspace.runtime.integration.test.ts` now asserts diagnostics trend/index/export API wiring in runtime source.
330+
- Verification evidence:
331+
- `npm test -- src/agent_workspace.runtime.behavior.test.ts --runInBand`
332+
- `npm run test:agent-workspace:contracts`
333+
317334
## Mainline vs Working-Branch Snapshot (2026-04-14)
318335

319336
| Capability Slice | Working Branch (`feat/learning-multi-tutor-adapter`) | Mainline (`origin/main`) | Integration Status |
@@ -322,7 +339,7 @@ Execution anchor:
322339
| Focus + learning-path side-by-side pane model | Implemented in branch UI/runtime | Dock coexistence baseline integrated (`styles.css`, `path_styles.css`, `path_app.js`) | Partially integrated |
323340
| Agent workspace contract parity suite | Implemented (`src/agent_workspace.contract.parity.test.ts`, `src/agent_workspace.frontend.test.ts`, `src/agent_workspace.locale.contract.test.ts`, `src/agent_workspace.tauri.contract.test.ts`) | Baseline parity suite integrated (`src/agent_workspace.contract.parity.test.ts`, `src/agent_workspace.frontend.test.ts`, `src/agent_workspace.runtime.integration.test.ts`) | Partially integrated |
324341
| Result-presentation allowlist/override fail-fast governance | Implemented in branch execution registry and parity tests | Integrated in M1 (`src/frontend/agent_workspace.js` + parity tests) | Baseline integrated |
325-
| Conversation turn stream/replay/operator diagnostics expansion | Implemented in branch routes/tests | Mainline has earlier baseline only | Partially integrated |
342+
| Conversation turn stream/replay/operator diagnostics expansion | Implemented in branch routes/tests | Mainline has snapshot + trend/index/export diagnostics baseline in runtime (`src/frontend/agent_workspace_runtime.js`) | Partially integrated |
326343
| Graphdb/ANN foundation hardening lane | Branch-oriented lane claims exist in prior docs | Mainline currently exposes file-backed store baseline (`src/learning/store.ts`) | Not integrated on mainline |
327344
| Markdown reader governance refactor lane | Planned and partially implemented in branch | Mainline baseline only | Partially integrated |
328345

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,23 @@
316316
- `npm test -- src/agent_workspace.runtime.behavior.test.ts --runInBand`
317317
- `npm run test:agent-workspace:contracts`
318318

319+
## 主线最新增量(2026-04-16 M7.6 运维诊断趋势/索引/导出链路)
320+
321+
- 已在 `src/frontend/agent_workspace_runtime.js` 扩展只读运维诊断 API:
322+
- `getDiagnosticsTrendSnapshot()`:输出 replay 比率与按 operation 聚合的结果趋势,
323+
- `getDiagnosticsIndexSnapshot()`:输出 turn-id 与 operation-id 索引视图,
324+
- `exportDiagnosticsReport({ format })`:导出 snapshot/trend/index 组合报告。
325+
- 已在导出报告中加入稳定 runbook 链接,便于运维交接:
326+
- 中英文 development dashboard,
327+
- agent conversation + focus mode 交互方案页,
328+
- M7 方向需求基线页。
329+
- 已补运行时证据:
330+
- `src/agent_workspace.runtime.behavior.test.ts` 新增趋势/索引/导出语义断言,
331+
- `src/agent_workspace.runtime.integration.test.ts` 新增 trend/index/export API 接线断言。
332+
- 验证证据:
333+
- `npm test -- src/agent_workspace.runtime.behavior.test.ts --runInBand`
334+
- `npm run test:agent-workspace:contracts`
335+
319336
## 主线 vs 工作分支快照(2026-04-14)
320337

321338
| 能力切片 | 工作分支(`feat/learning-multi-tutor-adapter`| 主线(`origin/main`| 集成状态 |
@@ -324,7 +341,7 @@
324341
| Focus + learning-path 并排 pane 模型 | 分支已实现 | 已落入 dock 并排基线(`styles.css``path_styles.css``path_app.js`| 部分集成 |
325342
| Agent workspace 合同门禁测试 | 已实现(`src/agent_workspace.contract.parity.test.ts``src/agent_workspace.frontend.test.ts``src/agent_workspace.locale.contract.test.ts``src/agent_workspace.tauri.contract.test.ts`| 已落入基线门禁(`src/agent_workspace.contract.parity.test.ts``src/agent_workspace.frontend.test.ts``src/agent_workspace.runtime.integration.test.ts`| 部分集成 |
326343
| 结果呈现 allowlist/override fail-fast 治理 | 分支已实现 | M1 已集成(`src/frontend/agent_workspace.js` + parity tests) | 基线已集成 |
327-
| conversation turn 流式/重放/诊断扩展 | 分支已扩展 | 主线仅较早基线 | 部分集成 |
344+
| conversation turn 流式/重放/诊断扩展 | 分支已扩展 | 主线已落入 snapshot + trend/index/export 诊断基线(`src/frontend/agent_workspace_runtime.js` | 部分集成 |
328345
| graphdb/ANN 底座收敛 | 先前文档存在分支导向结论 | 主线当前为 file-backed store 基线(`src/learning/store.ts`| 主线未集成 |
329346
| Markdown 阅读器治理升级 | 分支已有规划与部分实现 | 主线为旧基线 | 部分集成 |
330347

src/agent_workspace.runtime.behavior.test.ts

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,24 @@ type AgentRuntimeModule = {
2828
latestFocusAtomId: string;
2929
latestKnowledgePoints: number;
3030
};
31+
getDiagnosticsTrendSnapshot: () => {
32+
conversationRequests: number;
33+
replayCandidateTurns: number;
34+
userTurns: number;
35+
replayCandidateRate: number;
36+
operationStats: Array<Record<string, unknown>>;
37+
};
38+
getDiagnosticsIndexSnapshot: () => {
39+
turnIndex: {
40+
byTurnId: Record<string, Record<string, unknown>>;
41+
replayCandidateTurnIds: string[];
42+
};
43+
capabilityIndex: {
44+
operationIds: string[];
45+
byOperationId: Record<string, Record<string, unknown>>;
46+
};
47+
};
48+
exportDiagnosticsReport: (options?: { format?: string }) => string | Record<string, unknown>;
3149
};
3250
};
3351

@@ -1633,5 +1651,60 @@ describe('agent workspace runtime behavior', () => {
16331651
resultPresentation: 'learning_path_card',
16341652
})
16351653
);
1654+
1655+
const trend = runtime.getDiagnosticsTrendSnapshot();
1656+
expect(trend.conversationRequests).toBe(2);
1657+
expect(trend.userTurns).toBe(2);
1658+
expect(trend.replayCandidateTurns).toBe(1);
1659+
expect(trend.replayCandidateRate).toBe(0.5);
1660+
const operationTrend = trend.operationStats.find(
1661+
(stats) => stats.operationId === 'build_learning_path'
1662+
);
1663+
expect(operationTrend).toEqual(
1664+
expect.objectContaining({
1665+
requestCount: 1,
1666+
resultCount: 1,
1667+
successCount: 1,
1668+
failureCount: 0,
1669+
latestStatus: 'success',
1670+
})
1671+
);
1672+
1673+
const index = runtime.getDiagnosticsIndexSnapshot();
1674+
expect(index.turnIndex.replayCandidateTurnIds.length).toBe(1);
1675+
expect(index.capabilityIndex.operationIds).toContain('build_learning_path');
1676+
expect(index.capabilityIndex.byOperationId.build_learning_path).toEqual(
1677+
expect.objectContaining({
1678+
requestCount: 1,
1679+
resultCount: 1,
1680+
successCount: 1,
1681+
failureCount: 0,
1682+
})
1683+
);
1684+
1685+
const exportedJson = runtime.exportDiagnosticsReport({ format: 'json' });
1686+
expect(typeof exportedJson).toBe('string');
1687+
const exported = JSON.parse(exportedJson as string);
1688+
expect(exported.snapshot).toEqual(
1689+
expect.objectContaining({
1690+
conversationRequests: 2,
1691+
replayCandidateTurns: 1,
1692+
})
1693+
);
1694+
expect(exported.trend).toEqual(
1695+
expect.objectContaining({
1696+
replayCandidateRate: 0.5,
1697+
})
1698+
);
1699+
expect(exported.runbookLinks).toEqual(
1700+
expect.arrayContaining([
1701+
expect.objectContaining({
1702+
id: 'development-progress-dashboard',
1703+
}),
1704+
expect.objectContaining({
1705+
id: 'm7-direction-requirements',
1706+
}),
1707+
])
1708+
);
16361709
});
16371710
});

src/agent_workspace.runtime.integration.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ describe('agent workspace runtime integration baseline', () => {
3838
expect(runtimeSource).toContain('pathApp.switchCentral(');
3939
expect(runtimeSource).toContain('requestBridgeWindowVisibility');
4040
expect(runtimeSource).toContain('getDiagnosticsSnapshot');
41+
expect(runtimeSource).toContain('getDiagnosticsTrendSnapshot');
42+
expect(runtimeSource).toContain('getDiagnosticsIndexSnapshot');
43+
expect(runtimeSource).toContain('exportDiagnosticsReport');
44+
expect(runtimeSource).toContain('DIAGNOSTIC_RUNBOOK_LINKS');
4145
expect(runtimeSource).toContain('__noteConnectionAgentWorkspaceRuntimeInstance');
4246
});
4347

0 commit comments

Comments
 (0)