Skip to content

chore: sync main into feat/ai-sre#97

Merged
ysyneu merged 54 commits into
feat/ai-srefrom
chore/sync-main-feat-ai-sre-20260722
Jul 22, 2026
Merged

chore: sync main into feat/ai-sre#97
ysyneu merged 54 commits into
feat/ai-srefrom
chore/sync-main-feat-ai-sre-20260722

Conversation

@ysyneu

@ysyneu ysyneu commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Why

Bring the latest released CLI baseline into the AI-SRE integration branch before publishing the compact audit projections.

Resolution

  • keep go-flashduty v0.5.7 as the generated API source of truth
  • regenerate all generated commands and generated skill fences
  • preserve the AI-SRE incident comment safety workflow
  • keep the corrected main-branch monitor-rule enumeration limits

Verification

  • make with the repository linter
  • go test -race -count=1 ./...
  • make check-cards
  • simplify and review-to-main equivalent reviews: no findings

ysyneu and others added 30 commits June 15, 2026 13:20
release: feat/ai-sre → main (incident list --channel-id)
… skills.sh (v1.3.15)

release: flashduty skill v1.3.15 — generated cards + withdraw from skills.sh
…1.3.16)

feat/ai-sre → main: add --fields projection to incident/alert list (v1.3.16)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Merge SDK bump into feat/api-review-auto-fix after CI passed.
…ctions/checkout-7

chore(deps): bump actions/checkout from 6 to 7
…2a-openapi

chore: update go-flashduty SDK
fix: document automation schedules as UTC
…ination

Schedule/oncall output returns `person_id`s — a different id namespace from
`member_id`. The schedule.md card and the `oncall who` help told agents to
resolve names by joining `fduty member list` on `member_id`: wrong namespace,
and it forces a full-roster scan that silently drops people on later pages.
In prod this produced a confidently-incomplete on-call answer (a responder on
page 21 of 22 was missed).

The batch resolver already exists: `fduty person infos <person_id> ...`
(POST /person/infos) returns person_id + person_name in one call. Point the
cards and the oncall help at it, and warn that person_id != member_id.

- schedule.md: replace the member_id-join flow with `person infos`
- member.md: cross-reference `person infos`; add a person_id gotcha
- oncall.go: correct the `oncall who` Long help (table already enriches names;
  use `person infos` for raw ids elsewhere)

Surfaced by /audit-ai-sre-sessions (run audit-2026-06-26):
sess_8fKpUejeyKfHt2hx5XNSsc, sess_UtK6eDMFY4TVZCSAj64gKF.
…id 0`, never via fired alerts

`rule-counter-status` 400s "too many rules" on large accounts, and a guessed
`--folder-id N` 400s "Folder not found". With both paths blocked, a prod agent
fell back to FIRED alerts (`insight top-alerts 90d`) as a proxy for CONFIGURED
rules and produced a confidently-wrong coverage report — marking P0 checks as
"missing" when it had only verified them as not-fired-in-90d.

The enumerate-all path already exists: `rule-list-basic --folder-id 0` returns
every configured rule with no folder id needed. Make it the documented path,
add the two-error fallback, and add a hard CONFIGURED != FIRED warning.

monit.md only (skill card; edits are outside the GENERATED fence).

Note: `rule-counter-status` itself cannot be scoped/paginated from the CLI —
the SDK `ReadCounterStatus(ctx)` and `POST /monit/rule/counter/status` take no
params; making it not 400 on large accounts is backend work, out of scope here.

Surfaced by /audit-ai-sre-sessions (run audit-2026-06-26): sess_DiRDzjygi4NuYyAcsgzB6o.
… list

The first commit on this branch claimed `rule-list-basic --folder-id 0` lists
all rules. That is FALSE — verified against the live API (400 "Folder not
found") and confirmed in monit-webapi: ListRuleBasic -> SafeFolder ->
GetByID(0) -> nil -> 400. `rule-list-basic` also returns only a folder's
DIRECT rules, not its descendants, and there is no account-wide rule list;
`rule-counter-status`/`rule-status` abort with "too many rules" past a server
cap (default 100).

Corrected guidance: enumerate by walking the folder tree (rule-counter-status
-> rule-status -> rule-list-basic per node); past the cap, report the limit
honestly ("cannot fully enumerate configured rules on this account") instead of
fabricating a completeness %. Kept the CONFIGURED != FIRED guardrail. The
generated `--folder-id` help ("0 to list all accessible rules") is a known
SDK/OpenAPI bug, flagged for a backend round.

Surfaced by /audit-ai-sre-sessions (run audit-2026-06-26): sess_DiRDzjygi4NuYyAcsgzB6o.
…it-agent probes

P6 — incident-summary.sh dumped ~80K chars of toon per incident (81042/79075
in the audited sessions), most of it empty boilerplate, overflowing the inline
output cap and forcing 3-4 sequential reads to page it back in. Root cause: the
script appended `--output-format toon` to every command, which takes each verb's
machine-readable branch and marshals the full raw response object (every empty
field on `incident detail`, plus heavy blobs like a change's `labels.steps`).
The DEFAULT (table/summary) renderer of each of these read verbs is a curated
projection of exactly the summary-relevant fields (id/severity/status/title/
channel/timestamps/ai_summary/root_cause/…). Fix: drop `--output-format toon`
from run() so each command uses its lean default renderer; that default IS the
field projection a fault summary needs. Kept all six commands, set -uo pipefail,
and the read-only "print real output" intent.

P8 — monit-agent.md: parallelizing multiple probes against the SAME host hit the
per-target concurrency limit and returned `code=overloaded`, forcing an identical
retry that re-sent the growing context. Added a Gotchas line steering fan-out to
serialize probes per target (batch a host's tools into one `invoke`) and
parallelize only across distinct targets.

Evidence: audit run audit-2026-06-26, sessions sess_TRdrnq5oA345qF66GgbYrY (P6)
and sess_QmoruPkRjrwA2tcHvEbNvT (P8). Surfaced by /audit-ai-sre-sessions.

These two files are kept byte-identical with their embedded copies in fc-safari
(logic/runtime/bootstrap/skills/flashduty/); mirrored there in a linked PR.
ysyneu and others added 24 commits July 2, 2026 01:06
…space-disambiguation-main

docs(skill): disambiguate Flashcat workspace spaces
Bumps [golang.org/x/term](https://github.com/golang/term) from 0.44.0 to 0.45.0.
- [Commits](golang/term@v0.44.0...v0.45.0)

---
updated-dependencies:
- dependency-name: golang.org/x/term
  dependency-version: 0.45.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…g.org/x/term-0.45.0

chore(deps): bump golang.org/x/term from 0.44.0 to 0.45.0
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 6 to 7.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](actions/setup-go@v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
`monit-agent.md` ran `host.top` / `host.disk` and `monit.md` ran `host.cpu` /
`host.mem`. None of the four exist. monit-agent v0.0.7 registers exactly:
host → os.overview, os.top_processes, net.tcp_ping, http.get, shell.exec;
mysql → mysql.overview, mysql.lock_contention, mysql.query.

An agent copying these gets `unknown_tool`, and the `host.top` example also
passed `limit`, which is not a parameter of anything (`os.top_processes` takes
`top_n` / `sort_by`, and the agent validates with `additionalProperties:false`,
so a wrong key is a hard `invalid_args`, not a silent no-op).

The generated help in this repo (zz_generated_diagnostics.go,
zz_generated_response_help.go) was already correct — only these hand-written
cards drifted, because nothing checks their JSON bodies against the registry.

Replacements verified live against a real dev target. Deliberately kept
separate from the SDK-bump branch so it can land without waiting on that.
fix(skills): monit 卡片里四个工具名不存在
Picks up go-flashduty 4d5816a (PR #31), which regenerates the SDK from the
corrected monit OpenAPI spec (flashduty-docs #190).

monit contract — the reason for this bump:
  monit-webapi d0d1ef4 turned /monit/tools/invoke and /monit/tools/catalog
  into sparse-field responses (omit instead of null) and flattened the
  single-tool result envelope. The CLI's generated response-help still
  documented the old nested/nullable shape, telling callers to expect
  "data": null and "error": null placeholders that the server no longer
  sends. Now aligned: data/summary/truncated/tool_version/error/target/
  target_kinds/next_cursor/output_shape are all documented as present-only.

Carried along — unrelated SDK work already merged upstream that this regen
necessarily picks up (the dep bump and the regen must be one commit or CI's
cligen drift check fails):

  New commands
    flashduty licenses ...
    flashduty session-replay ...

  Breaking flag changes
    a2a-agent create/update: --description removed, --instructions now
      required (the API deprecated description in favour of instructions)
    session list/info: entry_kind enum value scheduled -> automation

  New flags
    a2a-agent: --allow-insecure-oauth-http, --allow-insecure-tls-skip-verify,
      --environment-id, --environment-kind, --query
    a2a-agent list: --scope enum all|personal|team -> all|account|team
    automation create: --cron-expr no longer marked required

Cards regenerated via `make gen-cards`; monit-agent.md / monit.md are
unchanged here because PR #91 already landed those fixes.

make check green: gofmt+gci clean, golangci-lint 0 issues, go test -race all
packages ok, build ok.
chore(sdk): bump go-flashduty, regenerate CLI for the monit sparse-field contract
release: v1.3.27 — monit sparse-field contract + regenerated CLI surface
…ctions/setup-go-7

chore(deps): bump actions/setup-go from 6 to 7
…eway-err

chore: bump go-flashduty to v0.5.7 for clearer gateway-timeout errors
@ysyneu
ysyneu merged commit 2f2af9d into feat/ai-sre Jul 22, 2026
14 checks passed
@ysyneu
ysyneu deleted the chore/sync-main-feat-ai-sre-20260722 branch July 22, 2026 06:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants