Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -3653,7 +3653,8 @@
"pages": [
"zh/rum/analytics/web",
"zh/rum/analytics/native",
"zh/rum/analytics/miniprogram"
"zh/rum/analytics/miniprogram",
"zh/rum/analytics/custom-dashboards"
]
},
{
Expand Down Expand Up @@ -3857,7 +3858,8 @@
"icon": "gears",
"pages": [
"zh/monitors/engine/engine",
"zh/monitors/engine/engine-lost-alert"
"zh/monitors/engine/engine-lost-alert",
"zh/monitors/engine/self-monitoring"
]
},
{
Expand Down Expand Up @@ -5409,7 +5411,8 @@
"pages": [
"en/rum/analytics/web",
"en/rum/analytics/native",
"en/rum/analytics/miniprogram"
"en/rum/analytics/miniprogram",
"en/rum/analytics/custom-dashboards"
]
},
{
Expand Down Expand Up @@ -5613,7 +5616,8 @@
"icon": "gears",
"pages": [
"en/monitors/engine/engine",
"en/monitors/engine/engine-lost-alert"
"en/monitors/engine/engine-lost-alert",
"en/monitors/engine/self-monitoring"
]
},
{
Expand Down
2 changes: 2 additions & 0 deletions en/ai-sre/im.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ Once you hand AI SRE an investigation, every message that appears in the group i
- **Result**: an answer to your concrete question, or an actionable interim finding.
- **Progress**: a one-or-two-sentence update while work is still going on: confirmed progress, what it is waiting on, a real blocker. A progress message is **not the answer**: it does not finish the turn, and the result is posted separately as usual.

When AI SRE hands the work to a background Subagent (or an A2A delegation) and nothing has been sent to the chat yet in that turn, it first posts a short **acknowledgement** saying what it dispatched and that the conclusion will follow when the Subagent reports back, so the group is not left silent until the child finishes. This is a progress message too: it does not end the turn.

This reply style applies only to **human-initiated IM requests**: console sessions still answer with streaming text, and war-room auto-diagnosis is an unattended background turn that also keeps native streaming output.

<Note>
Expand Down
14 changes: 14 additions & 0 deletions en/ai-sre/sessions.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,20 @@ As a conversation grows, AI SRE automatically summarizes older history while kee

Progress is shown while compacting; afterwards the **Context** percentage in the chat header drops (hover for token usage).

A summary paraphrases the conversation, but the text before it is not lost: the messages and tool results it replaced are still stored exactly as they were returned. When an investigation depends on an exact value (an ID, a host, a metric value, a threshold, a log line, the text of an error, a command), the agent calls the built-in `session_transcript` tool to write that text into the `.history/<session_id>/` directory of its execution environment, then searches it with `grep` / `read` instead of repeating the summary's wording. If the value really is not there, it says so plainly rather than guessing.

| File | Content |
| --- | --- |
| `seg_NNN.md` | The text replaced by the Nth summary |
| `tail.md` | Everything after the latest summary (always present, may be empty) |
| `index.md` | How many rows each file covers and its time span |

What gets recorded is **what the agent was given at the time**: images and attachments leave only an `[inline …]` / `[file …]` placeholder, a truncated result keeps only the `file_path` of its full output, and a Subagent's internal steps stay in its own session rather than in these files.

<Note>
This recall only works for agents that **have the tool**: the main session and a Subagent with full tools can use it, while a restricted Subagent such as a read-only one does not have the tool and can only go by the summary after compaction.
</Note>

## Choosing a runtime environment

When creating a session, choose the **runtime environment** in the input area to decide where the agent's tools, Skills and MCP run: Auto (default), the cloud sandbox, or an online self-hosted BYOC Runner. For the selection order, offline handling, and why the environment is fixed once the session is created, see [Environments · Selecting an environment in a session](/en/ai-sre/environments#selecting-an-environment-in-a-session).
Expand Down
2 changes: 1 addition & 1 deletion en/ai-sre/skills.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ Use `venues` for skills that depend on one kind of environment. For example, a s

Tools can be specified in two ways:

- **Built-in tools**: write the tool name directly. Available built-in tools include `read`, `write`, `edit`, `bash`, `grep`, `glob`, `skill`, `mcp`, `todo`, `time`, `webfetch`, `web_search`, and others.
- **Built-in tools**: write the tool name directly. Available built-in tools include `read`, `write`, `edit`, `bash`, `grep`, `glob`, `skill`, `mcp`, `todo`, `time`, `webfetch`, `web_search`, `session_transcript`, and others.
- **MCP tools**: write them as `mcp:server/tool` (for example, `mcp:my-server/query`). At upload time, only the existence of the MCP server is validated; the specific tool name is verified when the MCP is loaded during a session.

## Related pages
Expand Down
36 changes: 31 additions & 5 deletions en/changelog/changelog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,32 @@ description: "This page documents important updates and feature releases for Fla
keywords: ["Changelog", "Product Release", "Feature Updates", "Flashduty", "Version History"]
---

<Update label="2026-10-19" description="📊 RUM custom dashboards, a redesigned template detail page with send test, native Feishu tables, hosted access domains for WeCom apps, Feishu apps created by QR code">

### RUM custom dashboards: build your own under Insights

The Insights tab bar no longer holds only the built-in dashboards: the **+** menu at its right end offers **New dashboard** (requires the **Dashboards Manage** permission) and **Manage dashboards**, and a custom dashboard opens as an extra tab (up to 100 tabs are listed); **Save to dashboard** on an analytics chart also turns the current question into one full-width panel. A panel asks the same aggregation question as the explorer — application (or the built-in `$app` variable, which follows the page's current application), event type, aggregation and field, group by and top N, plus a DQL filter — and draws as a time series, table, stat or text panel. Dashboard variables come in field-value and custom kinds, referenced in a panel's DQL as `${name}`, and a new dashboard starts with `env` / `service` / `version` field variables. Every save leaves a revision (the last 20 are kept), and a deleted dashboard goes to the trash for 30 days and can be restored from the manage page. See [RUM custom dashboards](/en/rum/analytics/custom-dashboards).

### A redesigned template detail page, with send test

The preview on the right of the template detail page renders by content block: native and Markdown tables are counted separately, and the bottom line gives the channel's format and its used / limit bytes; when the channel does not render Markdown tables or the content exceeds its limit, a yellow notice above the preview says so (the send fails, is truncated, or falls back to a compact summary). A built-in template, and any member without edit permission, opens read-only — **Built-in · Read-only** next to its name, with **Copy as new template** as the primary action; when you can edit, the old **Edit** button becomes **Template settings** and delete moves into **More actions**.

The preview header gains **Send test**: it renders the editor's current content (including unsaved edits) with the incident you pick and really sends it — to your own direct chat for an IM app, or to a group the bot has joined (a WeCom app has no group option), to a robot address you type in for this one send, or to your account's email; SMS and voice are not offered. A test message's title carries a `[Test]` prefix and the last line names the template and the sender, and its card buttons only answer "this is a test message, its buttons do not change any incident"; each member can send 5 per minute. A template syntax error makes a real notification fall back to the built-in template silently, while a test send reports it. See [Notification templates](/en/on-call/configuration/templates).

### Feishu apps: native tables instead of Markdown tables

Templates gain a **Native tables** switch (`feishu_app_card_v2_table_enabled`, off by default): when it is on, a GFM Markdown table in the template renders as a Feishu Card 2.0 native table component, so the recipient sees a table rather than the Markdown source. One card carries at most 5 native tables, each with at most 8 columns, 100 rows, 10 rows per page and 2000 bytes per cell; exceeding any of them, or a card over 30 KB, makes every table in the content go out as a Markdown table instead, and the preview says why. Apart from Feishu apps and the WeCom bot's markdown_v2, no channel renders Markdown tables, and the preview warns that the recipient will see the table source. See [Notification templates](/en/on-call/configuration/templates).

### WeCom self-built apps: Flashduty hosts the access domain

Integrating a self-built WeCom app needs one required field, **Access domain** (the bare domain, and it must sit under a subject filed by your enterprise). After you save, step 1 of the detail page hands you the DNS records: one certificate-hosting dns-01 delegation that proves the domain is yours, from which Flashduty issues and renews the HTTPS certificate, and one access CNAME — the mainland entry points at `cn.wecom.flashduty.com`, the international one at `wecom.flashduty.com`, and either one alone serves the domain — after which Flashduty proxies the domain directly, with no Nginx of your own and no certificate to apply for. Step 2 downloads `WW_verify_xxx.txt` from WeCom's **Set trusted domain → Apply for domain verification** and uploads it to the detail page, where Flashduty serves it from the domain's root path (WeCom does not follow redirects, so both http and https must answer). A domain a status page or another Flashduty account already holds cannot be hosted, and self-hosted deployments have no step 1. See [WeCom](/en/on-call/integration/instant-messaging/wecom).

### Feishu integrations: create a Flashduty-managed app by QR code

Creating a Feishu integration now offers three choices: **Create a new app (recommended)** / **Use an existing app** / **Enter credentials manually**. With either of the first two, saving shows a Feishu QR code; once you scan it, Flashduty creates (or takes over) the app in your Feishu tenant and finishes all of its configuration — the event and callback encryption strategy and request URLs, the bot and web app abilities, the scopes the features you enabled need — then publishes a new version; the credentials stay with Flashduty, so the detail page shows only the App ID, the current version and the state. Feishu asks its admin to approve twice (the app first, then the configuration version), and the detail page and integration list show that as "Pending admin review (1/2)", "Configuration pending review (2/2)", "New version in review" and so on, re-checking every 10 seconds, with **Copy message for admin** at hand. An integration set up by hand can click **Switch to Flashduty-managed** to scan and upgrade, with the App Secret and push URL unchanged and no gap in notifications; a self-hosted deployment cannot reach Feishu's QR endpoints and keeps manual credentials only. See [Feishu/Lark](/en/on-call/integration/instant-messaging/lark).

</Update>

<Update label="2026-10-16" description="🤖 AI SRE automations can run in the IM chat that created them, RUM Issue gains a resolve mode, DingTalk and Feishu integrations link members automatically on save">

### AI SRE automations gain an execution place: rules can be bound to the IM chat that created them
Expand All @@ -12,12 +38,12 @@ Each automation rule now has an **execution place**, fixed at creation: **Web**

Every run of an IM rule opens a new session in the original chat and posts the conclusion back to that chat. If the chat's scope or session has changed by the time the rule fires (for example after `/scope` or `/new`), the run is **skipped** (reason `chat_scope_mismatch`) and the rule stays enabled. The rule list gains an **Execution place** column. See [AI SRE automations](/en/ai-sre/automations#execution-place-where-a-rule-runs).

### RUM Issue resolve mode: Resolved / Resolve in next release
### RUM Issue resolve mode: Reopen on recurrence / Reopen in a new version

The **Resolved** and **Resolve in next release** options in the issue status dropdown are two ways of handling recurrence for the same resolved state:
The **Reopen on recurrence** and **Reopen in a new version** options in the issue status dropdown are two ways of handling recurrence for the same resolved state:

- **Resolved**: if the error occurs again, even in the same version, the issue is reopened as pending and marked **regression**.
- **Resolve in next release** (default): the issue reopens only when the error appears in a version the issue has not seen before; repeats within the same version do not reopen it.
- **Reopen on recurrence**: if the error occurs again, even in the same version, the issue is reopened as pending and marked **regression**.
- **Reopen in a new version** (default): the issue reopens only when the error appears in a version the issue has not seen before; repeats within the same version do not reopen it.

You can switch between the two at any time. See [Issue status management](/en/rum/error-tracking/issue-status).

Expand Down Expand Up @@ -98,7 +124,7 @@ Labels whose value is an http(s) link and not an image no longer stay in the lis

### Dashboards: global search, panel query mode and template checks

The dashboard list page gains a **Global search** at the top right: it searches dashboards across every folder the account can read (permission is filtered server-side), matches title or description, takes several keywords separated by spaces, labels each result with its folder path so duplicate titles can be told apart, shows 20 per page and offers a retry on failure. Its search state lives only inside the dialog — it neither affects the list page's "search the current folder" nor is written into the page address.
The dashboard list page gains a **Global search** at the top right: it searches dashboards across every folder the account can read (permission is filtered server-side), matches title or description, takes several keywords separated by spaces, labels each result with its folder path so duplicate titles can be told apart, shows 20 per page and offers a retry on failure. Its search state lives only inside the search box that expands in place, and closing it discards the search — it neither affects the list page's "search the current folder" nor is written into the page address.

In the panel editor's query **Options**, a Loki **table** or **stat** panel now lets you choose the **Query mode** yourself: **Range** computes point by point along the step to draw a trend, **Instant** computes a single value over the whole time range (`[$__auto]` takes the whole range) — table defaults to instant and stat to range. Loki time series stay fixed at range, and Loki instant does not accept a **min step**. Query-type template variables now get a form shaped by the data source: MySQL writes SQL, Loki fills a stream selector plus a label name, and other data sources use the Prometheus label form. The query is now pre-checked in the editor for the three patterns the backend refuses on save — a multi-select or "all" variable inside an exact matcher, a reference to an undefined variable, and a built-in variable unavailable for the current data source and query mode — and the exact-matcher one comes with a one-click **Switch to regex match**. **Preview candidates** now runs with the current variable selections and the panel's time range, so the preview matches what the dashboard actually renders. See [Dashboards](/en/monitors/dashboards/dashboards).

Expand Down
Loading
Loading