@fx-data/ai-diagnostics 0.1.20261027064707 → 0.1.20261107142011
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT_SETUP.md +3 -3
- package/README.md +1 -1
- package/bin/core-ai.mjs +18 -18
- package/content/AGENTS.md +37 -59
- package/content/README.md +10 -43
- package/content/docs/architecture.md +45 -74
- package/content/docs/diagnostic-feedback.md +20 -38
- package/content/docs/diagnostic-report.md +19 -46
- package/content/docs/index.md +40 -129
- package/content/docs/scenario-guide.md +34 -52
- package/content/knowledge/README.md +49 -0
- package/content/knowledge/cases/README.md +60 -0
- package/content/knowledge/cases/dashboard-parameter-deep-binding.md +32 -0
- package/content/knowledge/common/README.md +31 -0
- package/content/knowledge/common/concepts.md +49 -0
- package/content/knowledge/common/{knowledge-applicability.md → conclusions.md} +10 -6
- package/content/knowledge/common/queries.md +98 -0
- package/content/knowledge/common/signals.md +58 -0
- package/content/knowledge/common/topics/baseline-comparison.md +23 -0
- package/content/knowledge/common/topics/large-results.md +12 -0
- package/content/knowledge/common/topics/linked-traces.md +11 -0
- package/content/knowledge/common/topics/query-budget.md +18 -0
- package/content/knowledge/common/topics/query-example.md +69 -0
- package/content/knowledge/common/topics/setup-signoz-mcp.md +102 -0
- package/content/knowledge/common/topics/start-and-anchors.md +19 -0
- package/content/knowledge/common/workflow.md +22 -0
- package/content/knowledge/component/README.md +26 -0
- package/content/knowledge/component/concepts.md +22 -0
- package/content/knowledge/component/conclusions.md +11 -0
- package/content/knowledge/component/queries.md +7 -0
- package/content/knowledge/component/signals.md +75 -0
- package/content/knowledge/component/workflow.md +23 -0
- package/content/knowledge/dashboard/README.md +31 -0
- package/content/knowledge/dashboard/concepts.md +26 -0
- package/content/knowledge/dashboard/conclusions.md +21 -0
- package/content/knowledge/dashboard/queries.md +69 -0
- package/content/knowledge/dashboard/signals.md +76 -0
- package/content/knowledge/dashboard/topics/component-comparison.md +9 -0
- package/content/knowledge/dashboard/topics/dynamic-fields.md +21 -0
- package/content/knowledge/dashboard/topics/filter-tree.md +35 -0
- package/content/knowledge/dashboard/topics/name-binding.md +9 -0
- package/content/knowledge/dashboard/workflow.md +35 -0
- package/content/knowledge/dataset/README.md +27 -0
- package/content/knowledge/dataset/concepts.md +30 -0
- package/content/knowledge/dataset/conclusions.md +11 -0
- package/content/knowledge/dataset/queries.md +7 -0
- package/content/knowledge/dataset/signals.md +61 -0
- package/content/knowledge/dataset/topics/steps.md +59 -0
- package/content/knowledge/dataset/workflow.md +27 -0
- package/content/knowledge/engine/README.md +27 -0
- package/content/knowledge/engine/concepts.md +80 -0
- package/content/knowledge/engine/conclusions.md +49 -0
- package/content/knowledge/engine/queries.md +117 -0
- package/content/knowledge/engine/signals.md +73 -0
- package/content/knowledge/engine/topics/metric-fields.md +104 -0
- package/content/knowledge/engine/topics/patterns.md +50 -0
- package/content/knowledge/engine/workflow.md +20 -0
- package/content/knowledge/signal-index.md +117 -0
- package/content/knowledge/update/README.md +39 -0
- package/content/knowledge/update/concepts.md +93 -0
- package/content/knowledge/update/conclusions.md +59 -0
- package/content/knowledge/update/queries.md +103 -0
- package/content/knowledge/update/signals.md +57 -0
- package/content/knowledge/update/topics/correlations.md +63 -0
- package/content/knowledge/update/topics/discover-executions.md +31 -0
- package/content/knowledge/update/topics/events-execution.md +136 -0
- package/content/knowledge/update/topics/events-intake.md +102 -0
- package/content/knowledge/update/topics/events-outcome.md +163 -0
- package/content/knowledge/update/topics/lifecycle.md +58 -0
- package/content/knowledge/update/topics/scene-producers.md +258 -0
- package/content/knowledge/update/workflow.md +29 -0
- package/content-manifest.json +73 -192
- package/package.json +2 -2
- package/content/.agents/skills/analyze-analysis-table-update-runtime/SKILL.md +0 -35
- package/content/.agents/skills/analyze-analysis-table-update-runtime/agents/openai.yaml +0 -7
- package/content/.agents/skills/analyze-analysis-table-update-runtime/references/discover-update-executions.md +0 -34
- package/content/.agents/skills/analyze-analysis-table-update-runtime/references/update-diagnostic-contract.md +0 -101
- package/content/.agents/skills/analyze-engine-metric/SKILL.md +0 -76
- package/content/.agents/skills/analyze-engine-metric/agents/openai.yaml +0 -13
- package/content/.agents/skills/analyze-engine-metric/scripts/analyze_engine_metric.py +0 -270
- package/content/.agents/skills/analyze-engine-metric/scripts/engine_metric_analysis/__init__.py +0 -11
- package/content/.agents/skills/analyze-engine-metric/scripts/engine_metric_analysis/metric_analyzer.py +0 -791
- package/content/.agents/skills/analyze-engine-metric/scripts/engine_metric_analysis/signoz_extract.py +0 -278
- package/content/.agents/skills/diagnose-component-performance/SKILL.md +0 -52
- package/content/.agents/skills/diagnose-component-performance/agents/openai.yaml +0 -7
- package/content/.agents/skills/diagnose-component-performance/references/experience.md +0 -34
- package/content/.agents/skills/diagnose-dashboard-performance/SKILL.md +0 -92
- package/content/.agents/skills/diagnose-dashboard-performance/agents/openai.yaml +0 -7
- package/content/.agents/skills/diagnose-dashboard-performance/references/experience.md +0 -63
- package/content/.agents/skills/diagnose-dataset-performance/SKILL.md +0 -52
- package/content/.agents/skills/diagnose-dataset-performance/agents/openai.yaml +0 -7
- package/content/.agents/skills/diagnose-dataset-performance/references/experience.md +0 -33
- package/content/.agents/skills/diagnose-performance/SKILL.md +0 -77
- package/content/.agents/skills/diagnose-performance/agents/openai.yaml +0 -7
- package/content/.agents/skills/diagnose-update-performance/SKILL.md +0 -55
- package/content/.agents/skills/diagnose-update-performance/agents/openai.yaml +0 -7
- package/content/.agents/skills/diagnose-update-performance/references/experience.md +0 -47
- package/content/.agents/skills/setup-signoz-mcp/SKILL.md +0 -30
- package/content/.agents/skills/setup-signoz-mcp/agents/openai.yaml +0 -7
- package/content/.agents/skills/setup-signoz-mcp/references/installation.md +0 -75
- package/content/.agents/skills/setup-signoz-mcp/references/windows-artifact.md +0 -14
- package/content/docs/npm-cli.md +0 -200
- package/content/docs/roadmap.md +0 -44
- package/content/docs/skill-writing-guide.md +0 -65
- package/content/knowledge/common/signoz-environments.json +0 -52
- package/content/knowledge/common/signoz-environments.md +0 -55
- package/content/knowledge/common/signoz-query-example.md +0 -41
- package/content/knowledge/common/signoz-query-policy.md +0 -145
- package/content/knowledge/common/trace-routing.md +0 -63
- package/content/knowledge/component/observability.md +0 -60
- package/content/knowledge/dashboard/observability.md +0 -168
- package/content/knowledge/dashboard/query-examples.md +0 -63
- package/content/knowledge/dataset/observability.md +0 -68
- package/content/knowledge/engine/metric-artifacts.md +0 -25
- package/content/knowledge/engine/metric-retrieval.md +0 -107
- package/content/knowledge/engine/metric-semantics.md +0 -172
- package/content/knowledge/engine/performance-patterns.md +0 -86
- package/content/knowledge/update/diagnostic/manifest.json +0 -209
- package/content/knowledge/update/diagnostic/observability/edges/edge-attempt-to-capacity-deferral.json +0 -17
- package/content/knowledge/update/diagnostic/observability/edges/edge-attempt-to-lock-requeue.json +0 -18
- package/content/knowledge/update/diagnostic/observability/edges/edge-attempt-to-merge.json +0 -17
- package/content/knowledge/update/diagnostic/observability/edges/edge-candidate-to-effective-root.json +0 -16
- package/content/knowledge/update/diagnostic/observability/edges/edge-capacity-deferral-to-attempt.json +0 -16
- package/content/knowledge/update/diagnostic/observability/edges/edge-chain-node-to-execution-detail.json +0 -18
- package/content/knowledge/update/diagnostic/observability/edges/edge-dlx-recovery-to-attempt.json +0 -16
- package/content/knowledge/update/diagnostic/observability/edges/edge-effective-execution-to-listener-before.json +0 -21
- package/content/knowledge/update/diagnostic/observability/edges/edge-effective-root-to-chain.json +0 -17
- package/content/knowledge/update/diagnostic/observability/edges/edge-engine-task-to-primary-result.json +0 -17
- package/content/knowledge/update/diagnostic/observability/edges/edge-execution-detail-to-publication.json +0 -16
- package/content/knowledge/update/diagnostic/observability/edges/edge-init-recovery-to-publication.json +0 -16
- package/content/knowledge/update/diagnostic/observability/edges/edge-listener-complete-to-child-release.json +0 -21
- package/content/knowledge/update/diagnostic/observability/edges/edge-listener-to-derived-chain.json +0 -21
- package/content/knowledge/update/diagnostic/observability/edges/edge-load-decision-to-load-operation.json +0 -16
- package/content/knowledge/update/diagnostic/observability/edges/edge-load-operation-to-engine-task.json +0 -17
- package/content/knowledge/update/diagnostic/observability/edges/edge-lock-requeue-to-attempt.json +0 -16
- package/content/knowledge/update/diagnostic/observability/edges/edge-logical-parent-to-child.json +0 -18
- package/content/knowledge/update/diagnostic/observability/edges/edge-merge-member-to-effective-execution.json +0 -18
- package/content/knowledge/update/diagnostic/observability/edges/edge-merge-to-load-decision.json +0 -17
- package/content/knowledge/update/diagnostic/observability/edges/edge-no-load-to-primary-result.json +0 -16
- package/content/knowledge/update/diagnostic/observability/edges/edge-primary-result-to-child-frontier.json +0 -18
- package/content/knowledge/update/diagnostic/observability/edges/edge-primary-result-to-listener.json +0 -23
- package/content/knowledge/update/diagnostic/observability/edges/edge-publication-to-attempt.json +0 -16
- package/content/knowledge/update/diagnostic/observability/edges/edge-ready-recovery-to-publication.json +0 -16
- package/content/knowledge/update/diagnostic/observability/edges/edge-request-to-candidate-root.json +0 -16
- package/content/knowledge/update/diagnostic/observability/identity-units/candidate-root.json +0 -13
- package/content/knowledge/update/diagnostic/observability/identity-units/dag-node.json +0 -14
- package/content/knowledge/update/diagnostic/observability/identity-units/effective-root.json +0 -14
- package/content/knowledge/update/diagnostic/observability/identity-units/engine-task.json +0 -13
- package/content/knowledge/update/diagnostic/observability/identity-units/execution-attempt.json +0 -12
- package/content/knowledge/update/diagnostic/observability/identity-units/execution-detail.json +0 -13
- package/content/knowledge/update/diagnostic/observability/identity-units/listener-invocation.json +0 -11
- package/content/knowledge/update/diagnostic/observability/identity-units/load-decision.json +0 -12
- package/content/knowledge/update/diagnostic/observability/identity-units/load-operation.json +0 -11
- package/content/knowledge/update/diagnostic/observability/identity-units/logical-dag-edge.json +0 -11
- package/content/knowledge/update/diagnostic/observability/identity-units/merge-decision.json +0 -12
- package/content/knowledge/update/diagnostic/observability/identity-units/node-primary-result.json +0 -12
- package/content/knowledge/update/diagnostic/observability/identity-units/queue-publication.json +0 -11
- package/content/knowledge/update/diagnostic/observability/identity-units/requeue.json +0 -11
- package/content/knowledge/update/diagnostic/observability/identity-units/update-chain.json +0 -13
- package/content/knowledge/update/diagnostic/observability/identity-units/update-request.json +0 -12
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-after-commit-delivery.json +0 -131
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-attempt-consumed.json +0 -175
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-candidate-root-filter.json +0 -119
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-capacity-deferred.json +0 -121
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-child-release.json +0 -146
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-dlx-recovery.json +0 -100
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-effective-root-selection.json +0 -111
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-engine-handoff.json +0 -171
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-execution-frontier-persisted.json +0 -115
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-init-recovery.json +0 -93
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-intent-accepted.json +0 -151
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-listener-derived-chain.json +0 -112
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-listener-invocation.json +0 -154
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-load-decision.json +0 -155
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-load-operation.json +0 -108
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-lock-requeued.json +0 -108
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-logical-dependency-expansion.json +0 -129
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-merge-decision.json +0 -174
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-primary-node-result.json +0 -318
- package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-ready-recovery.json +0 -92
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-business-attempt.json +0 -33
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-capacity-cycle.json +0 -31
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-child-release.json +0 -32
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-commit-publication.json +0 -29
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-control-planning.json +0 -30
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-engine-task.json +0 -27
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-listener-callback.json +0 -27
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-load-operation.json +0 -27
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-lock-cycle.json +0 -31
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-main-queue-wait.json +0 -32
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-merge-evaluation.json +0 -29
- package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-parent-dependency-wait.json +0 -31
- package/content/knowledge/update/diagnostic/observability-index.json +0 -558
- package/content/knowledge/update/diagnostic/recipe-index.json +0 -85
- package/content/knowledge/update/diagnostic/recipes/dag-chain.json +0 -676
- package/content/knowledge/update/diagnostic/recipes/performance-window.json +0 -1128
- package/content/knowledge/update/diagnostic/recipes/scene-origin-async-message-or-callback.json +0 -438
- package/content/knowledge/update/diagnostic/recipes/scene-origin-derived-update-chain.json +0 -510
- package/content/knowledge/update/diagnostic/recipes/scene-origin-direct-service-call.json +0 -438
- package/content/knowledge/update/diagnostic/recipes/scene-origin-http.json +0 -438
- package/content/knowledge/update/diagnostic/recipes/scene-origin-internal-event.json +0 -438
- package/content/knowledge/update/diagnostic/recipes/scene-origin-job.json +0 -438
- package/content/knowledge/update/diagnostic/recipes/scene-origin-recovery-or-migration.json +0 -438
- package/content/knowledge/update/diagnostic/recipes/table-history.json +0 -508
- package/content/knowledge/update/diagnostic/recipes/table-in-chain.json +0 -595
- package/content/knowledge/update/diagnostic/scene-index.json +0 -252
- package/content/knowledge/update/diagnostic/scenes/active.json +0 -47
- package/content/knowledge/update/diagnostic/scenes/add.json +0 -140
- package/content/knowledge/update/diagnostic/scenes/agent.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/archive.json +0 -32
- package/content/knowledge/update/diagnostic/scenes/auth-change.json +0 -116
- package/content/knowledge/update/diagnostic/scenes/call-back.json +0 -32
- package/content/knowledge/update/diagnostic/scenes/case-install.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/case-replace.json +0 -7
- package/content/knowledge/update/diagnostic/scenes/cdc-schedule.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/compute-model.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/copy-data.json +0 -32
- package/content/knowledge/update/diagnostic/scenes/corp-linked.json +0 -7
- package/content/knowledge/update/diagnostic/scenes/corp-member-add.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/corp-member-del.json +0 -7
- package/content/knowledge/update/diagnostic/scenes/corp-member-modify.json +0 -32
- package/content/knowledge/update/diagnostic/scenes/corp-member-sync.json +0 -152
- package/content/knowledge/update/diagnostic/scenes/corp-setting-member-rename.json +0 -152
- package/content/knowledge/update/diagnostic/scenes/corp-setting.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/cross-project-allow.json +0 -32
- package/content/knowledge/update/diagnostic/scenes/default.json +0 -32
- package/content/knowledge/update/diagnostic/scenes/del.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/dynamic-time.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/edit.json +0 -92
- package/content/knowledge/update/diagnostic/scenes/excel-append.json +0 -44
- package/content/knowledge/update/diagnostic/scenes/excel-save.json +0 -32
- package/content/knowledge/update/diagnostic/scenes/folder-copy.json +0 -32
- package/content/knowledge/update/diagnostic/scenes/global.json +0 -56
- package/content/knowledge/update/diagnostic/scenes/handover.json +0 -32
- package/content/knowledge/update/diagnostic/scenes/history-handle.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/manual-update.json +0 -44
- package/content/knowledge/update/diagnostic/scenes/migration.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/param-change.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/polars-error.json +0 -32
- package/content/knowledge/update/diagnostic/scenes/preview-exception.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/preview-invalid.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/project-excel-move.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/re-check.json +0 -7
- package/content/knowledge/update/diagnostic/scenes/replace.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/rollback.json +0 -68
- package/content/knowledge/update/diagnostic/scenes/save-as.json +0 -44
- package/content/knowledge/update/diagnostic/scenes/schedu.json +0 -56
- package/content/knowledge/update/diagnostic/scenes/table-move-other-workspace.json +0 -20
- package/content/knowledge/update/diagnostic/scenes/user-holder-to-normal.json +0 -20
- package/content/knowledge/update/observability.md +0 -16
- package/content/knowledge/update/runtime-evidence.md +0 -32
- package/content/scripts/receive_tool_result.py +0 -57
- /package/content/{.agents/skills/setup-signoz-mcp/scripts → scripts}/install_signoz_mcp.ps1 +0 -0
- /package/content/{.agents/skills/setup-signoz-mcp/scripts → scripts}/install_signoz_mcp.py +0 -0
package/AGENT_SETUP.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# FX 数据诊断:Agent 安装与管理
|
|
2
2
|
|
|
3
|
-
本文供执行安装与管理的 Agent 读取,不作为日常诊断的前置上下文。包版本为 `0.1.
|
|
3
|
+
本文供执行安装与管理的 Agent 读取,不作为日常诊断的前置上下文。包版本为 `0.1.20261107142011`,需要 Node.js `>=22` 及 npm。用户只需表达安装、使用、更新或卸载意图,环境准备和客户端登记由 Agent 完成。
|
|
4
4
|
|
|
5
5
|
用户明确要求安装、更新、回退、卸载或检查 FX 数据诊断时,也会触发薄 Skill,并直接执行对应管理命令,不先运行 `context` 或读取诊断规则;只有开始诊断时才按薄 Skill 加载内容。普通聊天不主动加载。
|
|
6
6
|
|
|
@@ -49,14 +49,14 @@
|
|
|
49
49
|
- 独立 Node 环境下,用其绝对路径运行配套 `npm-cli.js`(Unix:`lib/node_modules/npm/bin/npm-cli.js`;Windows:`node_modules/npm/bin/npm-cli.js`)。通过同一环境的 `npm root -g` 找到包,沿用自定义 prefix,再用同一 Node 调用包内 `bin/core-ai.mjs` 登记。路径含空格时保留引号;Windows PowerShell 调用带引号的可执行路径需要 `&`。不依赖用户项目目录。
|
|
50
50
|
- 全局目录不可写时仅为本次安装指定用户目录的 `--prefix`;现有源找不到本包时仅为本次命令指定 `--registry=https://registry.npmjs.org`,不改全局 npm 配置。
|
|
51
51
|
- 安装失败时同时读取 stderr 中的错误和分项检查。Node 路径失效时修复原运行环境;内容损坏、所有权冲突或权限错误应处理具体错误,不通过第二份安装绕过。需要进一步排错时再运行 `doctor`。
|
|
52
|
-
- 复用旧版时,若 `install` 尚未返回 `checks` 和 `context`,仅此分支补跑稳定入口的 `doctor`、`context` 验证,不因此升级或重新下载。Python
|
|
52
|
+
- 复用旧版时,若 `install` 尚未返回 `checks` 和 `context`,仅此分支补跑稳定入口的 `doctor`、`context` 验证,不因此升级或重新下载。Python 缺失不阻止登记,首次运行包内 Python 脚本时再准备。
|
|
53
53
|
- WorkBuddy 的 `.workbuddy/skills` 与 `.workbuddy-ai/skills` 由 CLI 按本机线索选择;无法确认时按 CLI 提示处理,不自行扫描客户端缓存或改成两处同时登记。
|
|
54
54
|
|
|
55
55
|
## 按需使用
|
|
56
56
|
|
|
57
57
|
用户明确要求用 FX 数据诊断分析问题后,按薄 Skill 调用一次稳定入口的 `context`,读取返回的 `agent_rules`,只加载当前问题需要的 Skill 和引用。CLI 同时在后台检查更新,固定本次调查返回的版本与 `pinned_cli`;同一调查继续复用,不重复调用稳定入口的 `context`。普通聊天和管理请求无需预加载诊断内容或检查更新。
|
|
58
58
|
|
|
59
|
-
已有 SigNoZ MCP 直接复用;实时查询受阻时才按包内配置 Skill 处理,凭据只保存在本机。Python
|
|
59
|
+
已有 SigNoZ MCP 直接复用;实时查询受阻时才按包内配置 Skill 处理,凭据只保存在本机。Python 按需准备;独立解释器可通过 `FX_DATA_DIAGNOSTICS_PYTHON` 指定绝对路径。
|
|
60
60
|
|
|
61
61
|
## 更新与回退
|
|
62
62
|
|
package/README.md
CHANGED
|
@@ -38,4 +38,4 @@
|
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
41
|
-
**给 Agent:** 按 [Agent 执行说明](https://unpkg.com/@fx-data/ai-diagnostics@0.1.
|
|
41
|
+
**给 Agent:** 按 [Agent 执行说明](https://unpkg.com/@fx-data/ai-diagnostics@0.1.20261107142011/AGENT_SETUP.md) 完成安装与管理。已有本地包时,优先读取包内 `AGENT_SETUP.md`;本地 `.tgz` 只需读取 `package/AGENT_SETUP.md`。按命令结果简短反馈,成功即结束;只有失败或结果不完整时才排错。
|
package/bin/core-ai.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// Distribution only: diagnostic rules and
|
|
2
|
+
// Distribution only: diagnostic rules and scripts live in the unchanged content bundle.
|
|
3
3
|
import fs from 'node:fs';
|
|
4
4
|
import os from 'node:os';
|
|
5
5
|
import path from 'node:path';
|
|
@@ -53,11 +53,11 @@ function commandHelp(argv) {
|
|
|
53
53
|
let target;
|
|
54
54
|
if (['help', '--help', '-h'].includes(command)) target = Object.hasOwn(commands, args[0]) ? args[0] : 'help';
|
|
55
55
|
else if (Object.hasOwn(commands, command) && args.some(arg => arg === '--help' || arg === '-h')) target = command;
|
|
56
|
-
else return null; //
|
|
56
|
+
else return null; // python keeps the script's own help arguments.
|
|
57
57
|
const note = '帮助只显示说明,不执行命令。安装和管理成功以命令返回结果为准,简短反馈后停止,无需额外 status 或 doctor。';
|
|
58
58
|
if (target !== 'help') return { ok: true, action: 'help', command: target, ...commands[target], note };
|
|
59
59
|
return { ok: true, action: 'help', name: commandName, display_name: 'FX 数据诊断',
|
|
60
|
-
commands: [...Object.values(commands).map(value => value.usage), '
|
|
60
|
+
commands: [...Object.values(commands).map(value => value.usage), 'python <script> [args...]'],
|
|
61
61
|
registry: defaultRegistry, note };
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -185,11 +185,11 @@ ${powershell} context
|
|
|
185
185
|
|
|
186
186
|
每次新诊断只调用一次稳定入口 context:立即取得并固定本次版本,同时后台检查更新,不等待网络。同一调查继续复用首次结果,不重复调用稳定入口 context;需要重新读取固定路径时使用 pinned_cli context,不触发新检查。
|
|
187
187
|
|
|
188
|
-
context 返回当前版本、内容路径和 agent_rules。读取 agent_rules
|
|
188
|
+
context 返回当前版本、内容路径和 agent_rules。读取 agent_rules,按问题只读取所需知识(先看对应域的 workflow.md),不预加载全部知识,也不切换用户工作区。包内仓库相对路径以 content_root 为基准,文档链接相对引用文件解析。
|
|
189
189
|
|
|
190
|
-
context、status、session 的 auto_update.notification,以及 python
|
|
190
|
+
context、status、session 的 auto_update.notification,以及 python 标准错误中 fx_data_diagnostics.auto_update.notification,是更新提示。有提示时按 message 简短告知用户;无新版不打扰。不为获取状态额外调用 CLI 或轮询;本轮没有后续 CLI 调用时,下次使用再补报。更新成功只影响下次新诊断,失败继续使用本次版本。
|
|
191
191
|
|
|
192
|
-
当前调查固定使用首次 context 返回的 node、pinned_cli 和内容版本。脚本通过 <node> <pinned_cli> python <脚本绝对路径> ... 执行;Windows PowerShell 同样在带引号的 Node 路径前加
|
|
192
|
+
当前调查固定使用首次 context 返回的 node、pinned_cli 和内容版本。脚本通过 <node> <pinned_cli> python <脚本绝对路径> ... 执行;Windows PowerShell 同样在带引号的 Node 路径前加 &。通过 session 获取临时目录,保存日志和 Metric 正文,不写入安装内容。只有包内 Python 脚本需要 Python;doctor 的 python.available=false 表示按需补齐,不代表安装失败。已有 MCP 直接复用;实时查询受阻时才读取 setup-signoz-mcp。
|
|
193
193
|
|
|
194
194
|
用户要求更新时执行稳定入口 update,默认使用 latest;要求回退到上次更新前时执行 rollback,也可用 --version 指定版本。已保留版本校验通过后直接复用。各客户端的新调查共用切换后的版本,进行中调查继续使用原 pinned_cli。更新后按客户端要求刷新技能或新开聊天;安装副本不做 Git 更新。
|
|
195
195
|
|
|
@@ -266,7 +266,7 @@ function skillChecks(targets, home, installId) {
|
|
|
266
266
|
function contextFor(root, home, pkg, manifest) {
|
|
267
267
|
const content = path.join(root, 'content');
|
|
268
268
|
return { version: pkg.version, source_commit: manifest.source_commit, content_root: content,
|
|
269
|
-
agent_rules: path.join(content, 'AGENTS.md'),
|
|
269
|
+
agent_rules: path.join(content, 'AGENTS.md'),
|
|
270
270
|
pinned_cli: path.join(root, 'bin', 'core-ai.mjs'), node: process.execPath,
|
|
271
271
|
launcher: launchers(home).executable, launcher_script: launchers(home).script };
|
|
272
272
|
}
|
|
@@ -433,8 +433,9 @@ function install(home, options, { sourceRoot = packageRoot, action = 'install' }
|
|
|
433
433
|
if (checks.skills.status !== 'ok') throw new Error(checks.skills.entries.filter(entry => entry.status === 'error').map(entry => entry.error).join('; '));
|
|
434
434
|
const context = contextFor(release, home, pkg, manifest);
|
|
435
435
|
fs.accessSync(context.agent_rules, fs.constants.R_OK);
|
|
436
|
-
|
|
437
|
-
fs.
|
|
436
|
+
const knowledgeRoot = path.join(context.content_root, 'knowledge');
|
|
437
|
+
if (!fs.statSync(knowledgeRoot).isDirectory()) throw new Error('Diagnostic knowledge directory is unavailable');
|
|
438
|
+
fs.accessSync(knowledgeRoot, fs.constants.R_OK);
|
|
438
439
|
if (!registrationOnly) atomicWrite(path.join(home, homeMarker), JSON.stringify(ownership));
|
|
439
440
|
const releaseProtocols = { ...prior?.state?.release_protocols };
|
|
440
441
|
if (prior?.state?.lifecycle_protocol === lifecycleProtocol) releaseProtocols[prior.state.version] = lifecycleProtocol;
|
|
@@ -774,7 +775,7 @@ function python() {
|
|
|
774
775
|
const probe = spawnSync(args[0], [...args.slice(1), '-I', '-B', '-c', 'import sys; print(sys.executable); sys.exit(0 if sys.version_info >= (3,9) else 1)'], { encoding: 'utf8' });
|
|
775
776
|
if (probe.status === 0) return { executable: probe.stdout.trim(), available: true };
|
|
776
777
|
}
|
|
777
|
-
return { available: false, requirement: 'Python 3.9+ is required
|
|
778
|
+
return { available: false, requirement: 'Python 3.9+ is required to run bundled scripts.' };
|
|
778
779
|
}
|
|
779
780
|
|
|
780
781
|
function uninstall(home) {
|
|
@@ -822,7 +823,7 @@ function doctor(home) {
|
|
|
822
823
|
checks.python = { status: runtime.available ? 'ok' : 'unavailable', ...runtime };
|
|
823
824
|
const errors = [integrityError, ...(checks.skills.entries || []).filter(entry => entry.status === 'error').map(entry => entry.error)].filter(Boolean);
|
|
824
825
|
const result = { ok: errors.length === 0, version: installed?.state?.version ?? null, integrity: checks.integrity.status,
|
|
825
|
-
python: runtime,
|
|
826
|
+
python: runtime, skills: installed?.state?.skills || [], checks };
|
|
826
827
|
if (result.ok) emit(result);
|
|
827
828
|
else { process.stderr.write(`${JSON.stringify({ ...result, error: errors.join('; ') })}\n`); process.exitCode = 1; }
|
|
828
829
|
}
|
|
@@ -840,7 +841,7 @@ async function main() {
|
|
|
840
841
|
try { current = ownedState(home, false); }
|
|
841
842
|
catch (error) { if (command === 'doctor') return doctor(home); throw error; }
|
|
842
843
|
const activeRoot = current?.state ? path.join(home, 'releases', current.state.version) : null;
|
|
843
|
-
const pinned = isInstalledBundle(packageRoot, home) && ['context', 'python'
|
|
844
|
+
const pinned = isInstalledBundle(packageRoot, home) && ['context', 'python'].includes(command);
|
|
844
845
|
const migrationRequired = Boolean(current?.state && current.state.lifecycle_protocol !== lifecycleProtocol);
|
|
845
846
|
if (command === 'doctor') {
|
|
846
847
|
if (!activeRoot || packageRoot === activeRoot || migrationRequired) return doctor(home);
|
|
@@ -848,7 +849,7 @@ async function main() {
|
|
|
848
849
|
// diagnostic content is damaged. Fall back here only if the CLI is unsafe.
|
|
849
850
|
try { bundleMetadata(activeRoot); } catch { return doctor(home); }
|
|
850
851
|
}
|
|
851
|
-
if (migrationRequired && (command === 'install' || (!pinned && ['context', 'python', '
|
|
852
|
+
if (migrationRequired && (command === 'install' || (!pinned && ['context', 'python', 'version', '--version'].includes(command)))) {
|
|
852
853
|
throw new Error('Existing installation requires migration: run npm install -g @fx-data/ai-diagnostics, then use the new global fx-data-diagnostics update command');
|
|
853
854
|
}
|
|
854
855
|
// npm installation is a bootstrap. Re-running it must not switch an existing
|
|
@@ -873,7 +874,7 @@ async function main() {
|
|
|
873
874
|
if (command === 'update') return update(home, options);
|
|
874
875
|
if (command === 'rollback') return update(home, options, 'rollback');
|
|
875
876
|
if (command === 'uninstall') return uninstall(home);
|
|
876
|
-
const { pkg, manifest
|
|
877
|
+
const { pkg, manifest } = verifyBundle(packageRoot, { allowMacMetadata: isInstalledBundle(packageRoot, home) });
|
|
877
878
|
if (command === '--version' || command === 'version') return emit({ version: pkg.version, package: pkg.name });
|
|
878
879
|
if (command === 'status') {
|
|
879
880
|
const auto = autoUpdateDetails(home);
|
|
@@ -893,14 +894,13 @@ async function main() {
|
|
|
893
894
|
const auto = autoUpdateDetails(home);
|
|
894
895
|
return emit({ directory: fs.mkdtempSync(path.join(os.tmpdir(), 'core-ai-')), ...(auto ? { auto_update: auto } : {}) });
|
|
895
896
|
}
|
|
896
|
-
if (command === '
|
|
897
|
+
if (command === 'python') {
|
|
897
898
|
const runtime = python();
|
|
898
899
|
if (!runtime.available) throw new Error(runtime.requirement);
|
|
899
|
-
|
|
900
|
-
if (!args.length) throw new Error('A script or Python option is required');
|
|
900
|
+
if (!rest.length) throw new Error('A script or Python option is required');
|
|
901
901
|
const auto = autoUpdateDetails(home);
|
|
902
902
|
if (auto?.notification) process.stderr.write(`${JSON.stringify({ fx_data_diagnostics: { auto_update: auto } })}\n`);
|
|
903
|
-
const result = spawnSync(runtime.executable, ['-I', '-B', ...
|
|
903
|
+
const result = spawnSync(runtime.executable, ['-I', '-B', ...rest], { stdio: 'inherit' });
|
|
904
904
|
if (result.error) throw result.error;
|
|
905
905
|
process.exitCode = result.status ?? 1;
|
|
906
906
|
return;
|
package/content/AGENTS.md
CHANGED
|
@@ -1,84 +1,62 @@
|
|
|
1
1
|
# core-ai Agent 执行契约
|
|
2
2
|
|
|
3
|
-
你是 fx-data
|
|
3
|
+
你是 fx-data 问题诊断助手,为没有产品代码环境的使用者提供辅助排查。照着用户说的操作、手上的日志和 trace,结合本仓库的知识回答问题:看到了什么异常、可能是什么原因、接下来往哪里查。
|
|
4
4
|
|
|
5
5
|
## 使用前更新代码
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
通过 CLI 安装的目录没有 `.git`,不得在它或使用者的其他项目执行 Git 更新。全局 Skill 通过 `context` 返回内容目录时,遵循 [npm 安装副本规则](#安装副本的助手规则)。首次使用时读取对应说明,本轮已读则复用。新诊断由 CLI 后台检查更新,当前调查始终使用首次返回的版本。
|
|
7
|
+
- 源码仓库(根目录有 `.git`):每个新对话第一次使用时,在根目录运行一次 `git pull --ff-only`,同一对话里不再重复。保留本地改动,不切换分支;更新不了就简单说一句,继续做原来的事。
|
|
8
|
+
- npm 安装副本(没有 `.git`):不做 Git 更新,也不去更新使用者的其他项目,按下面的[安装副本规则](#安装副本的助手规则)来。
|
|
10
9
|
|
|
11
10
|
### 安装副本的助手规则
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- 每次新诊断只调用一次稳定入口的 `context`;CLI 在后台检查更新,不等待网络或下载,同一调查继续复用已返回的版本。
|
|
18
|
-
- 更新通知由 CLI 返回:`context`、`status`、`session` 的 JSON 中查看可选的 `auto_update.notification`;`python`、`metric` 的 stderr 可带独立 JSON,其中为 `fx_data_diagnostics.auto_update.notification`,stdout 仍是原脚本结果。通知包含 `id`、`status`、`message`,按 `message` 简短告知,按 `id` 避免重复提示;当前调查保持固定版本,新版供下次新诊断使用。没有通知不提示,不为获取更新结果额外轮询;本轮没有后续 CLI 调用时,下次使用再补报。
|
|
19
|
-
- 用 `session` 获取临时目录。Metric 纯正文使用 `metric --metric`;SigNoZ JSON 响应使用 `metric --metric-log-json ... --task-name ...`,不可混用。
|
|
20
|
-
- 已有可用 MCP 直接复用;实时查询受阻时读取 [MCP 配置 Skill](.agents/skills/setup-signoz-mcp/SKILL.md),适配当前客户端。凭据保存在本机配置,不写入能力包或诊断报告。
|
|
21
|
-
- 用户要求更新、回退、卸载或检查时使用稳定入口的 `update`、`rollback`、`uninstall`、`doctor`。版本切换后按客户端要求刷新技能或新开聊天;当前调查不切换版本。
|
|
12
|
+
- 一次调查固定使用第一次 `context` 返回的版本、`content_root`、`node` 和 `pinned_cli`,新版本留给下次诊断。脚本用 `<node> <pinned_cli> python <脚本路径> ...` 运行;仓库相对路径以 `content_root` 为基准,文档里的链接相对所在文件解析。
|
|
13
|
+
- 用 `session` 拿临时目录,SigNoZ 大响应和 Metric 正文都存在那里,不写进安装目录。
|
|
14
|
+
- `context`、`status`、`session` 的 JSON 里,或 `python` 命令的 stderr 里出现 `auto_update.notification`(stderr 里的字段是 `fx_data_diagnostics.auto_update.notification`)时,用其中的 `message` 简短告诉用户,按 `id` 避免重复提醒。没有通知就不提,也不为了等更新去轮询。
|
|
15
|
+
- 用户要更新、回退、卸载或检查时,用稳定入口的 `update`、`rollback`、`uninstall`、`doctor`。
|
|
22
16
|
|
|
23
|
-
## 1.
|
|
17
|
+
## 1. 先看这一轮要回答什么
|
|
24
18
|
|
|
25
|
-
-
|
|
26
|
-
-
|
|
19
|
+
- 仓库开发模式:用户在改本仓库的 Agent、知识、评测、测试或文档时,按源码仓库里的 `maintainers/README.md` 做(npm 安装副本没有这个目录),不去查线上。只有用户明确要验证真实诊断行为,才在授权范围内用线上只读数据。
|
|
20
|
+
- 问题诊断模式:用户在排查具体业务问题,按下面选一个入口。
|
|
27
21
|
|
|
28
|
-
|
|
22
|
+
要记录、数值或链接,直接给事实和覆盖范围;要分析原因,先从已有日志和现象找线索,需要时再补查;要解释前后变化,目标和基线分开核对。简单的事实问题不扩展成根因调查。追问先答再接着查,已确认的对象、时间和现象继续沿用。
|
|
29
23
|
|
|
30
|
-
## 2.
|
|
24
|
+
## 2. 选入口
|
|
31
25
|
|
|
32
|
-
|
|
26
|
+
入口只是起点,没有必须走完的步骤,材料够了就直接回答。
|
|
33
27
|
|
|
34
|
-
| 用户目标 |
|
|
28
|
+
| 用户目标 | 起点 |
|
|
35
29
|
|---|---|
|
|
36
|
-
| 慢、超时、卡顿、内存超限、OOM、`MemoryLimitExceeded`、资源消耗异常、性能退化或回归 |
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
| 其他问题:非性能报错、结果异常、稳定性问题 |
|
|
41
|
-
|
|
42
|
-
问题类型不明确时,先用已有日志、精确 trace 或运行材料做只读浅分型,判断更接近性能、报错/结果异常,还是更新链路解释。仍无法判断或缺少材料时,再向用户或客户确认;浅分型不扩大查询范围、不同时启动多个专项流程。已明确慢、超时、OOM 等性能现象时,不重复询问问题类型。
|
|
30
|
+
| 慢、超时、卡顿、内存超限、OOM、`MemoryLimitExceeded`、资源消耗异常、性能退化或回归 | [性能排查入口](knowledge/common/workflow.md),再按场景进入对应知识域 |
|
|
31
|
+
| 只想拿到或看懂一份 engine metric | [引擎知识](knowledge/engine/workflow.md) |
|
|
32
|
+
| 只想弄清更新来源、request、chain/DAG、node attempt、requeue、load、listener、engine task,或核对更新计数 | [更新知识 · 解释更新记录](knowledge/update/workflow.md#解释更新记录) |
|
|
33
|
+
| 只想配置诊断环境,或实时查询被工具、连接问题挡住 | [配置 SigNoZ MCP](knowledge/common/topics/setup-signoz-mcp.md),弄好后回到原问题 |
|
|
34
|
+
| 其他问题:非性能报错、结果异常、稳定性问题 | 有报错原文就先查[信号索引 · 常见报错](knowledge/signal-index.md#常见报错);没有专门入口,先说明这块覆盖有限,再按[问题定位方法](docs/architecture.md)结合已有材料分析 |
|
|
43
35
|
|
|
44
|
-
|
|
36
|
+
分不清是哪类问题时,先拿已有日志、trace 或运行材料做一次只读浅分型,还是判断不了再问用户。用户已经说了慢、超时、OOM 这类现象,就不用再问问题类型。
|
|
45
37
|
|
|
46
|
-
## 3.
|
|
38
|
+
## 3. 诊断原则
|
|
47
39
|
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
- 相互独立且都能改变当前判断的取证或分析可以并行;环境解析、执行选择、依赖前次结果的查询和最终归因顺序推进。不能为并行而扩大调查范围。
|
|
55
|
-
|
|
56
|
-
### 工具使用
|
|
40
|
+
- **先认场景,报错只是表象**。超时、内存超限、行数上限多半报在引擎里,引擎只说明撞了什么线,为什么算得这么大要回业务层找:分析表看哪个步骤放大或攒齐了数据(左右合并多对多、同环比自关联、拆分到行、补全缺失行、累积值或排名),还是来源表变大了;更新看是不是上游失败连带、哪个节点重;组件和仪表板看查询本身,以及筛选、参数、动态字段、联动绑在哪张表上。先弄清是哪个场景的哪类请求,再回场景的 `workflow.md` 找原因、对症给建议;只讲引擎超时或 OOM,用户没法处理。
|
|
41
|
+
- 先用手上已有的信息,材料够用就直接分析。只追问下一步判断真正缺的那一项,用户给过的不要再要。
|
|
42
|
+
- 默认只读。没有用户明确同意,不改业务资源、不触发任务、不动配置或权限。凭据、租户敏感数据和完整业务载荷不要写进报告、知识、终端输出或仓库文件。
|
|
43
|
+
- 分清哪些是日志和 trace 里直接记着的、哪些只是相关信号、哪些还只是推测。知识讲系统一般怎么做,这次实际发生了什么看这次的记录;字段缺失、结果为空或被截断都说明不了没发生。
|
|
44
|
+
- 可以根据日志线索、项目知识和通用经验提几个候选原因,说明各自依据及待核实点;知识未覆盖的方向也可作为假设。
|
|
45
|
+
- 同一个调查里,已经确认的范围、读过的知识和查到的结果直接复用;互不依赖的查询可以并行。
|
|
57
46
|
|
|
58
|
-
|
|
47
|
+
### 查找知识
|
|
59
48
|
|
|
60
|
-
|
|
61
|
-
- 用户已表达历史对比(如“之前没超限”)或企业入口只缺时间时,按默认值直接查询;没有实际工具或证据阻断时,不把下一项可执行查询留给用户。企业入口本轮只覆盖更新。
|
|
62
|
-
- 助手依据知识和当前工具声明选择执行、构造查询、核对结构、判断关联并解释证据。Metric 正文等大材料由解析脚本处理;查询时间按[公共查询规则](knowledge/common/signoz-query-policy.md#查询约束)直接使用当前工具支持的格式。工具原始响应直接保存或交给解析器,上下文只保留必要事实、完整性状态和产物路径。
|
|
49
|
+
知识按域分(common、dataset、component、dashboard、update、engine),每个域的文件名都一样,完整说明见[知识目录](knowledge/README.md):
|
|
63
50
|
|
|
64
|
-
|
|
51
|
+
1. **先认场景**:场景明确就直接进;不明确先看[场景识别](knowledge/common/signals.md)。第一次进某个域,先扫一眼它的 `workflow.md`,里面是从哪下手、常见现象和容易踩的坑。
|
|
52
|
+
2. **按名称查**:手上有 span、属性、日志名或报错原文,查[信号索引](knowledge/signal-index.md),它直接指到含义所在的章节;查完回到场景接着找原因。
|
|
53
|
+
3. **按要做的事读文件**:概念和关联读 `concepts.md`;认入口、看懂 span、attribute、日志读 `signals.md`;拿不准手上的日志和 trace 能下什么结论读 `conclusions.md`;要写查询读 `queries.md`。只读命中的章节。
|
|
54
|
+
4. **还不够再展开**:看该域 `README.md` 登记的 `topics/`。相近的已核实案例在 [cases](knowledge/cases/README.md),只用来提假设。不知道某条规则写在哪,查[规则归属索引](docs/index.md)。
|
|
65
55
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
证据已解释现象和关键触发条件时,交付结果。还有必要且可执行的分析时,继续推进,专项返回或 MCP 配置完成后也一样。缺少关键证据、候选无法区分或需要研发验证产品行为时,可交付已确认事实、可信假设、具体缺口和下一步所需的最小动作。某项关联缺失只限制依赖它的判断,在当前调查范围内仍可沿其他日志线索继续分析,不用扩大查询代替缺口说明。
|
|
69
|
-
|
|
70
|
-
最终交付方首次答复前读取[诊断结果交付](docs/diagnostic-report.md),本轮已读则复用。简单事实请求仍直接回答,保留专项结论及其限制。
|
|
71
|
-
|
|
72
|
-
每次诊断交付时,按[诊断后的需求反馈](docs/diagnostic-feedback.md)检查本轮发现的场景知识缺口、本项目优化项和文档差异。有证据支持时,整理可转交的“需求反馈”,写清问题、已有依据、影响与期望;没有则省略。反馈用于改进 `core-ai`,使用者无需定位产品代码、设计方案或跟踪处理。复用已有证据,说明适用范围和待核实项,保留专项结论,不为反馈扩大调查;默认只反馈到当前对话。
|
|
56
|
+
### 工具使用
|
|
73
57
|
|
|
74
|
-
|
|
58
|
+
查新的日志或 trace 前,先看[公共查询规则](knowledge/common/queries.md)的“默认值速查”和“选择和调用工具”,查日志再看“查日志”。便捷搜索和 trace 详情不返回 `data.request_context` 这类业务属性,要用 Query Builder 在 `selectFields` 里点名取;返回时间是 UTC,给用户看换成北京时间。有 traceId 或任务标识就精确查。大响应存临时文件,用 shell 按需读。
|
|
75
59
|
|
|
76
|
-
##
|
|
60
|
+
## 4. 交付
|
|
77
61
|
|
|
78
|
-
|
|
79
|
-
- 修改前在[文档目录](docs/index.md)找到规则的归属文件,只改归属文件,其他位置写一句结论加链接;发现冲突时以归属文件为准,把另一处改成链接。新增、删除或改名文件,或新增跨文件规则时,同步更新目录。
|
|
80
|
-
- 修改 Agent、Skill 或能力边界时,同步检查 README、architecture、roadmap、相关 Knowledge 和测试,只更新受影响的描述。
|
|
81
|
-
- `.agents/skills/` 保持平铺,只创建确有内容的 `scripts/`、`references/`、`assets/`。系统事实写入 `knowledge/`,场景经验写入对应 Skill 的 `references/experience.md`。
|
|
82
|
-
- 优先复用当前 Tool。将环境、字段、关联与调查选择的规则写入知识,供助手判断;只有大模型难以可靠完成的大材料解析和精确计算才保留脚本。
|
|
83
|
-
- 仓库交付内容不得包含产品源码路径、类/方法索引、代码审计台账或要求读取产品代码的排查步骤。将核实过的行为改写为业务含义、可观察记录、判断方法和适用限制。
|
|
84
|
-
- 使用 `scripts/validate.py` 执行适用的结构、链接、Skill 和行为验证;失败时修正实现,不放宽验证标准。
|
|
62
|
+
结论是写给人看的。照着日志和 trace,结合已有知识,先直接回答用户问的东西。要记录、数值或链接,给事实和覆盖范围;分析原因,先说结论,再讲关键依据和还不确定的地方,需要时给下一步往哪查。用业务语言跟使用者说,知识里的内部说法(比如计数单位、关联边、锚点、`unknown`、`needs_revalidation`)要翻译成大白话;分析步骤用页面上的中文名(“第 53 步:新增字段”),不报 `AddNewColumn` 这类类型名或引擎算子名,不要让他们去读源码或搭代码环境。需要研发接手时,按[交接研发](docs/diagnostic-report.md#交接研发)整理材料。怎么写得更清楚可以参考[诊断结果交付](docs/diagnostic-report.md)。
|
package/content/README.md
CHANGED
|
@@ -12,17 +12,15 @@
|
|
|
12
12
|
| 更新来源或数量不清楚 | 触发来源、更新链路、节点与尝试次数 |
|
|
13
13
|
| 其他报错、结果异常或偶发不可用 | 核对现象与执行记录,整理已确认事实和待验证问题 |
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
性能问题已有各场景的知识和入口提示。其他问题先根据现有材料辅助分析。
|
|
16
16
|
|
|
17
17
|
## 开始前准备
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
npm 安装:对 Agent 说“帮我安装并启用 FX 数据诊断,npm 包是 `@fx-data/ai-diagnostics`”,它会按包内 README 安装(优先复用已有的共享安装),再登记当前客户端的 Skill。需要 Node.js/npm,Python 按需准备。安装副本每次新诊断时在后台检查更新,不耽误当前排查,更新失败继续用旧版(设计见源码仓库 `maintainers/npm-cli.md`)。
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
2. 诊断需要查询 SigNoZ 的 trace、日志和引擎统计。当前客户端还没有 SigNoZ 连接时,助手会自动安装并配置,只需提供对应环境的 API Key。正式环境和测试环境的 Key 分别维护。
|
|
25
|
-
3. 只有离线材料(日志、trace 导出、Metric 文件)时,无需配置连接,直接交给助手分析。
|
|
21
|
+
1. 用源码目录时,用支持 `AGENTS.md` 的客户端(如 Codex、Claude Code)打开本仓库,更新规则见[助手执行契约](AGENTS.md#使用前更新代码)。
|
|
22
|
+
2. 诊断要查 SigNoZ 的 trace、日志和引擎统计。还没有连接时助手会自动配置,只需提供对应环境的 API Key(正式、测试分开)。
|
|
23
|
+
3. 只有离线材料(日志、trace 导出、Metric 文件)时不用配置,直接交给助手。
|
|
26
24
|
|
|
27
25
|
## 如何提问
|
|
28
26
|
|
|
@@ -42,7 +40,7 @@ npm 安装副本在每次新诊断时后台检查更新,当前排查不等待
|
|
|
42
40
|
- 查企业更新没给时间时,默认看最近 24 小时。
|
|
43
41
|
- 给了 dagId 就能直接查更新链路,不需要再提供时间。
|
|
44
42
|
- 说“之前正常”“以前没超限”,助手会自动找之前的正常记录做对比,不需要先提供成功记录。
|
|
45
|
-
-
|
|
43
|
+
- 仪表板内组件异常时,助手会先查找对应组件的单独预览记录;找不到也会继续分析,并提示检查单独预览是否同样异常。详见[组件取数对照](knowledge/dashboard/workflow.md#组件取数先做对照)。
|
|
46
44
|
- 缺少关键信息时,助手一次说明需要补充什么、用来判断什么。
|
|
47
45
|
|
|
48
46
|
继续同一问题时,助手沿用已确认的范围和查询结果。简单追问(数值、链接)直接回答,不重新排查。
|
|
@@ -53,47 +51,16 @@ npm 安装副本在每次新诊断时后台检查更新,当前排查不等待
|
|
|
53
51
|
|
|
54
52
|
- 当前结论:哪个对象的哪次操作出现问题,已定位到什么环节或条件。
|
|
55
53
|
- 关键依据:对应执行记录、错误、统计或对照结果,以及它们如何支持判断。
|
|
56
|
-
-
|
|
57
|
-
-
|
|
54
|
+
- 待确认信息(有实质缺口时):仍需确认的问题和最小补充材料;需要研发接手时整理可继续调查的材料。
|
|
55
|
+
- 需求反馈(有依据时):本轮发现的未覆盖场景、知识缺口或工具改进线索,供后续改进本项目。使用者无需提供开发方案或跟踪处理。详见[诊断后的需求反馈](docs/diagnostic-feedback.md)。
|
|
58
56
|
|
|
59
57
|
## 延伸阅读
|
|
60
58
|
|
|
61
|
-
- [
|
|
59
|
+
- [规则归属索引](docs/index.md):每条规则由哪个文件维护。
|
|
62
60
|
- [问题定位方法](docs/architecture.md):通用排查思路与结论分层。
|
|
63
61
|
- [按场景排查](docs/scenario-guide.md):分析表、组件、仪表板、更新各自看什么。
|
|
64
62
|
- [诊断结果交付](docs/diagnostic-report.md):结论、复核依据和研发交接。
|
|
65
|
-
- [指南完善方向](docs/roadmap.md):已覆盖范围与待补齐能力。
|
|
66
63
|
|
|
67
64
|
## 维护本项目
|
|
68
65
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
诊断脚本放在所属 Skill 的 `.agents/skills/<skill>/scripts/` 中。修改后在仓库根目录运行 `python3 scripts/validate.py`,检查结构、链接、脚本处理和文档目录是否完整。
|
|
72
|
-
|
|
73
|
-
交付代码使用 `node --test packages/ai-diagnostics/tests/test_npm*.mjs` 验证安装与版本管理。整体设计见 [构建与发布](docs/npm-cli.md#32-构建打包)。
|
|
74
|
-
|
|
75
|
-
### 发布 npm 包
|
|
76
|
-
|
|
77
|
-
发布机器需要 Bash、Git 和可访问本机目录的 Docker,适用于 macOS 或 Linux;构建所需的 Node/npm/Python 由 Docker 提供。提交代码后,在干净工作区执行发布。
|
|
78
|
-
|
|
79
|
-
**本地和 CI 都通过环境变量 `NPM_TOKEN` 注入发布凭据。** 按 [npm 官方说明](https://docs.npmjs.com/creating-and-viewing-access-tokens/) 创建仅授权 `@fx-data/ai-diagnostics` 读写、启用 Bypass 2FA 并设置有效期的细粒度 Token。本地可在 Bash 或 zsh 中隐藏输入,再导出变量:
|
|
80
|
-
|
|
81
|
-
```sh
|
|
82
|
-
read -rs NPM_TOKEN
|
|
83
|
-
export NPM_TOKEN
|
|
84
|
-
bash scripts/npm-publish.sh
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
执行第一行后粘贴 Token 并回车,输入不会显示,也不会写入命令历史。变量在当前终端会话内有效;若终端已注入 `NPM_TOKEN`,直接执行发布命令即可,无需配置本地文件。
|
|
88
|
-
|
|
89
|
-
**希望本机保存 Token 时,可选用一次性配置:**
|
|
90
|
-
|
|
91
|
-
```sh
|
|
92
|
-
bash scripts/npm-publish.sh --configure-token
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
脚本隐藏输入并保存到 `~/.config/fx-data-diagnostics/npm-token`(遵循 `XDG_CONFIG_HOME`),仅当前用户可读写。以后无环境变量时自动读取;Token 过期或更换时重新配置。环境变量始终优先,缺少 Token 会在构建前提示获取和配置方式。
|
|
96
|
-
|
|
97
|
-
只构建验证使用 `bash scripts/npm-publish.sh --dry-run`,不需要 Token;重试已保存的产物使用 `bash scripts/npm-publish.sh --resume <产物目录>`,沿用原版本与包。完整流程见[发布分发](docs/npm-cli.md#33-发布分发)。
|
|
98
|
-
|
|
99
|
-
CI 复用同一命令:设置 `CI=true`,从流水线 Secret 注入 `NPM_TOKEN`,发布容器需能访问 npm 官方仓库。CI 不读取个人配置、不交互输入;Token 仅注入发布阶段,不进入构建镜像、npm 包或日志。
|
|
66
|
+
修改本仓库、运行验证或发布 npm 包,见源码仓库中的 `maintainers/README.md`;该目录不随 npm 包发布。
|
|
@@ -1,118 +1,89 @@
|
|
|
1
1
|
# 问题定位方法
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
从使用者的一次具体操作开始,用运行记录和项目知识确认问题出在哪个环节、什么条件下、为什么。使用者不需要产品代码环境;材料不够时,列出要补什么,或交给研发验证。源码目录和 npm 安装副本的判断方法相同,推理都由当前 Agent 完成。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## 目录
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
- [先把问题说清楚](#先把问题说清楚)
|
|
8
|
+
- [找到对应的这次操作](#找到对应的这次操作)
|
|
9
|
+
- [沿实际操作还原过程](#沿实际操作还原过程)
|
|
10
|
+
- [每一步都用来区分原因](#每一步都用来区分原因)
|
|
11
|
+
- [区分发现与原因](#区分发现与原因)
|
|
12
|
+
- [单次分析与前后对照](#单次分析与前后对照)
|
|
13
|
+
- [什么时候结束排查](#什么时候结束排查)
|
|
14
|
+
- [什么时候交接给研发](#什么时候交接给研发)
|
|
15
|
+
- [其他问题如何开始](#其他问题如何开始)
|
|
10
16
|
|
|
11
|
-
|
|
17
|
+
## 先把问题说清楚
|
|
12
18
|
|
|
13
|
-
|
|
14
|
-
- 对象:涉及哪个分析表、组件、仪表板或更新任务?
|
|
15
|
-
- 时间和环境:什么时候发生,在哪个环境?时间是否包含时区?
|
|
16
|
-
- 现象和影响:慢、失败、结果异常,还是暂时不可用?影响一个对象还是多个对象?
|
|
19
|
+
先确认预期和实际结果。下面几项已有的直接用,缺的再问(默认值见[默认值速查](../knowledge/common/queries.md#默认值速查)):
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
- 操作:点了、改了或执行了什么;
|
|
22
|
+
- 对象:哪个分析表、组件、仪表板或更新;
|
|
23
|
+
- 时间和环境:什么时候、哪个环境、时间带不带时区;
|
|
24
|
+
- 现象和影响:慢、失败、结果不对还是暂时不可用,影响一个还是多个对象。
|
|
19
25
|
|
|
20
|
-
|
|
26
|
+
“一直很慢”和“今天某次慢”调查范围不同;“以前正常”也不是随便哪次历史都能当对照。用已有信息先缩小范围,不要求用户一次准备完整清单。
|
|
21
27
|
|
|
22
28
|
## 找到对应的这次操作
|
|
23
29
|
|
|
24
|
-
|
|
30
|
+
有执行链接就直接看;只有对象链接,在确认的环境和时间里找记录;只有截图,先核对上面的对象和标识,看不清或首查没结果时先确认,不按猜测扩大搜索。
|
|
25
31
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
把每次执行的时间、对象、结果和链接放在一起。有多个可信候选且必须选定执行才能回答时,说明它们的区别,再确认要分析哪次。企业更新概况可直接列观察结果并突出异常,不要求用户选一条正常记录深入。前台预览、后台更新、失败重试和正常对照分别保留,不能拼成一次执行。
|
|
32
|
+
失败或内存超限先找对应的错误记录,只是慢就找这次的耗时记录,不因别的记录更慢、错误更严重就换成它。前台预览、后台更新、失败重试、正常对照分开记,不拼成一次执行。多个候选都可信、又必须选一个才能回答时,说明区别再请用户确认;企业更新概况直接列观察结果、突出异常即可。
|
|
29
33
|
|
|
30
34
|
## 沿实际操作还原过程
|
|
31
35
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
- 输入读取了哪些表、时间范围或数据?
|
|
35
|
-
- 哪些筛选、参数、聚合、联动或权限条件参与了计算?
|
|
36
|
-
- 慢点发生在等待、计算、写入,还是结果返回?
|
|
37
|
-
- 是否存在失败后重试?重试增加了多少工作?
|
|
36
|
+
先说清这次算了什么,再解释哪里慢、为什么失败。按[场景排查](scenario-guide.md)核对:读了哪些表和数据范围;哪些筛选、参数、聚合、联动、权限参与了计算;慢在等待、计算、写入还是返回;有没有失败重试,多了多少工作。
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
组件取数慢和分析表更新慢同时出现时,需要确认这次组件请求是否在等待或读取该次更新的结果。共享底层计算只能提供关联线索,还不足以确认原因相同。
|
|
42
|
-
|
|
43
|
-
仪表板内组件异常优先按[组件取数对照](../.agents/skills/diagnose-dashboard-performance/SKILL.md#组件取数先做对照)核对单独预览,再分析实际条件与计算路径;对照缺失不阻断本次异常分析。
|
|
38
|
+
页面配置说明可能怎么算,请求和执行记录说明实际怎么算,两者对得上同一对象、同一次操作才能合起来解释。组件取数慢和更新慢同时出现时,要确认这次组件请求是不是在等或读这次更新的结果,共享底层计算只是线索。仪表板内组件异常先按[组件取数对照](../knowledge/dashboard/workflow.md#组件取数先做对照)看单独预览,没有对照也继续分析。
|
|
44
39
|
|
|
45
40
|
## 每一步都用来区分原因
|
|
46
41
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
把当前猜测写成可验证的问题。例如:
|
|
42
|
+
看错误前后的时间线、重复出现的异常、耗时变化和上下游记录,提出少量候选原因,按线索强弱排序。每个方向写清哪条记录支持它、还有什么别的解释、再看什么能区分;缺字段或关联时保留为待验证假设,先看别的线索。相近的已核实案例见[案例库](../knowledge/cases/README.md),只用来提方向。
|
|
50
43
|
|
|
51
44
|
| 当前猜测 | 需要核对什么 | 能得出什么 |
|
|
52
45
|
|---|---|---|
|
|
53
|
-
| 筛选条件扩大了计算范围 |
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
58
|
-
补材料或查询前,先说明哪项判断缺少证据,以及查询结果能区分哪些原因。查询条件没有变化时复用已有记录;没有结果时先核对环境、时间与对象,不同时扩大多个搜索条件。
|
|
46
|
+
| 筛选条件扩大了计算范围 | 筛选值、绑定字段、关联表路径和实际计算范围 | 哪些额外的数据处理和这个条件有关 |
|
|
47
|
+
| 更新在等上游 | 节点开始时间、依赖状态和等待记录 | 等待和计算各占多少 |
|
|
48
|
+
| 内存超限来自中间数据变多 | 输入量、各阶段输入输出、内存和失败记录 | 数据怎么变大、怎么撞上上限 |
|
|
49
|
+
| 多条日志是重复更新 | 各条记录的更新、节点和尝试标识及明确关联 | 正常展开、重试还是重复执行 |
|
|
59
50
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
继续调查或转入另一场景时,沿用已确认的操作、执行范围和证据,只补下一项判断所缺的内容。已有直接证据能解释现象时,核对反证和适用范围即可,无需重新生成假设。相互独立且必要的分析可以并行;依赖执行选择或前次结果的动作顺序完成。
|
|
63
|
-
|
|
64
|
-
助手依据知识选择执行、构造查询、核对结构与知识适用范围,并判断原因;脚本使用范围见[助手执行契约](../AGENTS.md#工具使用)。摘要中的总数与返回数不同表示展示不全,不能据摘要缺项判断记录不存在。
|
|
65
|
-
|
|
66
|
-
已有证据解释现象时,先核对本次必要取证是否完成:已选定的慢或失败引擎执行需要对应的引擎统计。必要分析完成后交付,不为走流程重复查询。
|
|
51
|
+
查之前先说清缺的是哪项判断、结果能区分什么;查询方式、复用和空结果的处理见[公共查询规则](../knowledge/common/queries.md)。已有记录能直接解释现象时,核对反证和适用范围即可。已选定的慢或失败引擎执行要看对应的 Metric;必要的都查完就交付,不为走流程重复查。
|
|
67
52
|
|
|
68
53
|
## 区分发现与原因
|
|
69
54
|
|
|
70
|
-
|
|
55
|
+
结论说得多肯定,要和依据相称:
|
|
71
56
|
|
|
72
|
-
| 层次 |
|
|
57
|
+
| 层次 | 可以怎样说 | 还不能说明 |
|
|
73
58
|
|---|---|---|
|
|
74
|
-
| 已确认现象 |
|
|
75
|
-
| 已确认过程 |
|
|
76
|
-
| 已确认原因 |
|
|
77
|
-
| 待验证推测 |
|
|
59
|
+
| 已确认现象 | 这次更新失败,错误是内存超限 | 为什么用了这么多内存 |
|
|
60
|
+
| 已确认过程 | 某个阶段产生了大量中间结果,下游承受了这些数据 | 为什么业务配置或输入变成这样 |
|
|
61
|
+
| 已确认原因 | 这次的具体条件扩大了计算范围,记录显示它怎样形成压力、触发失败 | 没验证的修改一定能解决 |
|
|
62
|
+
| 待验证推测 | 现象和等上游相符,但缺依赖完成时间 | 等上游就是根因 |
|
|
78
63
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
涉及行数、字节、内存或放大比例时,写明统计对象、单位和来源。不同任务、不同阶段的数值不能随意相除或相加。引擎的物理计算阶段也不能直接命名为页面上的业务步骤。
|
|
64
|
+
只有总行数不推断倾斜或放大;两个事件时间接近不说明因果;字段缺失不等于没发生。涉及行数、字节、内存、倍数时写明对象、单位和来源,不同任务、阶段的数不随便相除相加。引擎的物理阶段不能直接叫成页面上的步骤。
|
|
82
65
|
|
|
83
66
|
## 单次分析与前后对照
|
|
84
67
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
只有本次失败材料时,先解释本次输入、数据处理过程和失败条件。正常样本不是开始或继续单次分析的必要材料。
|
|
68
|
+
“之前没超限”“以前正常”“最近变慢”已经是要对比:先定位这次执行,再按[主动对比](../knowledge/common/topics/baseline-comparison.md#主动对比)主动找基线,不要求用户先找成功 trace。只有失败材料时,先解释这次的输入、处理过程和失败条件,正常样本不是必需的。
|
|
88
69
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
对照中有多项条件同时变化时,分别说明变化;只有耗时不同,不能把差异全部归因于某个筛选器或配置。没有可比样本时,把“相对以前的变化”作为缺口,不影响交付已经确认的本次事实。
|
|
70
|
+
要回答“为什么以前好、这次不好”,确认对象、查询条件、参数、数据范围和结果可比,两边用各自的时间和执行记录。多项条件同时变了就分别说明;只有耗时不同时,不全归到某个筛选器或配置上。没有可比样本时,把“相对以前的变化”记为缺口,照样交付这次的事实。
|
|
92
71
|
|
|
93
72
|
## 什么时候结束排查
|
|
94
73
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
- 已有证据解释了客户的现象和关键触发条件;
|
|
98
|
-
- 缺少一项关键材料,继续查看现有记录不能区分原因;
|
|
99
|
-
- 多个候选仍然可信,需要客户确认具体操作;
|
|
100
|
-
- 后续判断需要研发验证产品行为。
|
|
101
|
-
|
|
102
|
-
结束前按[诊断结果交付](diagnostic-report.md)核对结论、证据和建议前提。该说明统一维护报告格式、需求反馈入口与研发交接材料;简单事实或链接直接回答,已有证据不足时说明具体缺口。
|
|
74
|
+
满足任一条就给出当前结果:已经解释了现象和关键触发条件;缺一项关键材料,继续看现有记录也分不出原因;多个候选都可信,需要用户确认具体操作;后面的判断要研发验证产品行为。交付前按[诊断结果交付](diagnostic-report.md)核对结论、依据和建议前提。
|
|
103
75
|
|
|
104
76
|
## 什么时候交接给研发
|
|
105
77
|
|
|
106
|
-
|
|
78
|
+
涉及没覆盖的产品行为、执行结果互相矛盾,或现有记录分不出原因时,按[交接研发](diagnostic-report.md#交接研发)整理已确认的问题、依据和待验证的判断。
|
|
107
79
|
|
|
108
80
|
## 其他问题如何开始
|
|
109
81
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
- 报错:保留完整错误、触发操作、发生时间和对应执行,区分每次必现与偶发。
|
|
113
|
-
- 结果异常:用脱敏的最小例子说明预期与实际差异,核对筛选条件、时间范围、权限以及数据是否已更新。
|
|
114
|
-
- 偶发不可用:确认影响对象、持续时间、恢复方式与是否有同时发生的异常记录。
|
|
82
|
+
非性能报错、结果异常、偶发不可用目前没有完整的专项方法,先按通用步骤整理材料,不硬套性能解释。
|
|
115
83
|
|
|
116
|
-
|
|
84
|
+
- 报错:看入口 span 的 `has_error` 和 `status_message`,HTTP 200 也可能是业务失败。`status_message` 是给用户看的业务提示(功能未开通、权限不足、请求太频繁、表不存在、表正在更新等)时,是业务规则拒绝了请求,不是系统故障;按同一 route、同一提示统计一段时间的次数,看是普遍现象还是只有这次。其他报错保留完整错误、触发操作、时间和对应执行,区分必现和偶发。
|
|
85
|
+
- 前台请求的 trace 上通常没有企业 ID,查不到是哪个企业就直说,请用户提供或让研发核对,不去猜。
|
|
86
|
+
- 结果异常:用脱敏的最小例子说明预期和实际的差别,核对筛选条件、时间范围、权限和数据是否已更新。
|
|
87
|
+
- 偶发不可用:确认影响对象、持续多久、怎么恢复的,同时间有没有别的异常记录。
|
|
117
88
|
|
|
118
|
-
|
|
89
|
+
能证明的事实先交付;要进一步验证产品行为时按上面的方法交接,不承诺没依据的根因。
|