Repository navigation
docs(api-reference): daily api-review 2026-11-09 — RUM active-devices flag, On-call license window fields - #1173
Open
flashduty[bot] wants to merge 1 commit into
Open
flashduty[bot] wants to merge 1 commit into
flashduty[bot] wants to merge 1 commit into
Conversation
… flag, On-call license window fields Window 2026-11-05T08:02Z..2026-11-09T09:06Z. rum: RumApplicationItem gains active_devices_enabled (fc-rum types.ApplicationItem, commit d1c91659, 2026-11-08). on-call: /oncall/license/list response gains the window counters and LicensePersonItem gains status/via/acquired_at (fc-event cmd/server/controller/license/info.go + structs/license.go, merged into main 2026-11-09 as feat/license-2027).
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Window
2026-11-05T08:02:00Z → 2026-11-09T09:06Z. The 11-05 run ended with zero drift; the 11-06 run produced no PR (its runner dropped), so this window starts at the 11-05 end point and covers everything after it.Method: per repo
git log --since=<window start> origin/main, non-merge commits diffed one by one (git diff <c>^1 <c>, merge commits excluded so large fc-event merges do not inject phantom hunks), scanning^[+-][^+-].*(json:"|binding:), then filtered to the public surface (Auth == "all", not/event/push/, module nothidden). Because several long-lived branches (feat/license-2027,feat/session-data-masking,codex/blueking-itsm) were merged intomaininside this window while their commits were authored earlier, each repo was additionally checked with a whole-window net tree diff (<base>..origin/main -- '*.go'); the drifts below come from that second pass.Changes
rum (2 files + consolidated,
en/zh)RumApplicationItemgainsactive_devices_enabled(boolean, required).Evidence:
fc-rum/types/application.go—ActiveDevicesEnabled bool \json:"active_devices_enabled"`, fed bylogic/transfer.gofromconfig.ActiveDevicesEnabled(row.AccountID)(deploy.active_devices_accounts). Commitd1c91659, 2026-11-08, in window. Boolean withoutomitempty, so it is always on the wire → listed inrequired. Examples forPOST /rum/application/{info,infos,list}` updated to match.on-call (2 files + consolidated,
en/zh)POST /oncall/license/list—LicenseListResponsegainslicense_cnt,used_cnt,window_start,window_end,rule_effective,rule_effective_at,auto_grab_disabled,transferred_at;LicensePersonItemgainsstatus(fixed/active/revoked),via(auto/admin/fixed/""),acquired_at.Evidence:
fc-event/cmd/server/controller/license/info.go(licenseListOutput, and the item literal that fillsStatus/Via/AcquiredAt) andfc-event/structs/license.go(LicensePersonItem.Status/Via/AcquiredAt,LicenseStatusT). The provider commits were authored 2026-10-28 but reachedmainon 2026-11-09 (Merge pull request #3526 from flashcatcloud/feat/license-2027,b8368364c), i.e. inside the window;git merge-base --is-ancestorconfirms the code was not onmainat the window start, andgit show <base>:cmd/server/controller/license/info.goshows the old payload (total/itemsonly).Window semantics read from
fc-event/logic/resource/usage.go(LicenseWindow,licenseWindowStart, 30-dayPeriodToDays) andstructs/license.go(LicenseRuleLaunchAt= 2026-11-09 00:00 +08:00,LicenseRuleOldAccountAt= 2027-01-01 00:00 +08:00).Constructed examples
The dev API was not reachable from the run environment, so the
/oncall/license/list200 example was constructed from the handler's output struct and the Redis-backed window model (30-day window,license_cnt6,used_cnt3, one fixed seat, one auto-grabbed seat, one revoked seat). The RUM application examples already existed; onlyactive_devices_enabled: truewas added to them. Nothing in this PR was captured from a live call.Not changed, and why
structs.IncidentAction.Byline(fc-evente8b42fd1, in window): internal engine payload (TriggerAction→ notify/blueking/jira handlers). It is not in any public response and not in the registry. The publicbylineisstructs.FeedItem.Byline(authored 2026-11-03, pre-window) and is already handled by docs(api-reference): daily api-review 2026-11-04 — timeline byline, escalate layers minItems, RUM session summary flag, session credits fields #1164.preference.updateInput.EmailFromByline/structs.PreferenceItem.EmailFromByline(fc-event68c9fb41, in window):/preference/infoand/preference/updateare registry rows withAuth: "jwt"→ not app-key-callable. No public surface.GET /deploy/products+enabled_products(fc-pgya9f56091, in window): registry rowdeploy:read:productsisAuth: "none"— anonymous, notapp_key-callable, so outside the public surface per the scope filter.fc-pgy /person/app-key/*MaxKeysfield and removal of thePasswordfields on the account/member structs: all/person/app-key/*rows areAuth: "jwt"; the removedpasswordfields never appeared in any public response (the onlypasswordin the specs is theMemberResetInfoUpdatesrequest field).fc-event /oncall/license/{transfer,setting/update}and the whole/-/license/*,/incident/blueking/ticket/*,/datasource/blueking/*,/monit/*/export,/safari/skill/downloadrow sets:Auth: "jwt"/"service"— internal.fc-datasourceBlueKing ITSM plugin settings,plug_imambient_reply_enabled: integrationsettingsis modelled as a free-form object (additionalProperties: true) in the specs, so per-key additions need no schema change.IsAudit: false → trueon six public export/download operations (/insight/*/export,/enrichment/mapping/data/download,/safari/session/export,/status-page/subscriber/export): the API reference does not document the audit flag anywhere today, so this stays out rather than introducing a one-off convention.DataSourceItem.last_source_time(fc-datasource, net window): already present in the on-call split and consolidated files.json:/binding:lines is empty for the public handlers; the monit-webapi and fc-datasource matches are test fixtures and migration commands).Unresolved / open (not written into the specs)
POST /change/info— registry rowAuth: "all", butfc-eventmainregisters onlychange/list(cmd/server/routes.go:336-338) andcmd/server/controller/change/info.godefines onlyList. Still unresolved.POST /channel/incident/daily-counts— no handler onfc-eventmain(grep daily-countsempty). Still unresolved.POST /safari/session/masking/{settings/get,settings/update,preview,summary,add_terms,resolve_display}andSessionItem.masking_enabled— handlers exist onfc-safarimain(cmd/api/sessions/masking.go) and the rows areAuth: "all", but the feature is config-gated:fc-safari/etc/masking.ymlshipsenabled: falsewith "deliberately disabled unless an operator enables it", so the surface is not reachable until an operator turns it on. Registered 2026-11-03 (pre-window) and left out by the 11-04/11-05 rounds too — flagged here rather than silently skipped. A human should decide whether to document it ahead of GA.GET /monit/prometheus/api/v1/label/:label_name/values— the only registry/spec path difference left is gin:paramvs spec{param}notation; the operation is documented.Registry vs spec cross-check
400withAuth == "all",/event/push/*excluded); with the mapping fromclaude-plugins-flashduty#101applied: 0 orphans, 0 provider rejects. Note: docs(ai-sre): drop deprecated session/cancel from the public API #101 is still open, so the catalog copy ofmapping.yamlis stale in both directions — it lacks themonitors/diagnostics,monitors/dashboard,rum/data,rum/dashboard,rum/resource,/rum/fieldentries that are already on that repo'smain, and lacks docs(ai-sre): drop deprecated session/cancel from the public API #101's/integration,/route,status-page,on-call/licensefixes. Registry→spec diff after that mapping: 9 rows absent from the specs, all accounted for in "Unresolved" above.jwt/service/none/integration), sodocs.jsonand bothapi-catalog.mdxare untouched. Verified: all 392 operations are present in thedocs.jsonnav and in both catalogs.Split vs consolidated
Deep compare (key order ignored) across the five splits and both consolidated files, before and after these edits: the only differences are the two known hand-edits —
DutyError.reason(consolidated-only,x-flashduty-preserve-absence) in on-call/platform/rum/safari × en/zh, and the safaricomponents.responsesexample-label customs (BadRequest,Forbidden, plus consolidated-onlyNotFound). Left alone.ServiceUnavailableis consolidated-only in four modules but is defined in the monitors split where it is referenced — no dangling$ref.Overlap with open PRs
api-review/2026-11-04T081045Z, still open) editsFeedItem.byline, escalate-rulelayers.minItems,RumApplicationItem.session_summary_enabled, and the safari session credit fields. OnlyRumApplicationItemis shared with this PR: docs(api-reference): daily api-review 2026-11-04 — timeline byline, escalate layers minItems, RUM session summary flag, session credits fields #1164 appendssession_summary_enabledat the end of the property map /requiredlist and at the end of each application example, while this PR insertsactive_devices_enabledright afteraccount_idin all three places. Different lines, so the merge should be clean; if docs(api-reference): daily api-review 2026-11-04 — timeline byline, escalate layers minItems, RUM session summary flag, session credits fields #1164 lands first, rebase this branch and re-run the linter (its example additions are what keepsrequiredsatisfied)..mdx, noapi-reference/*.jsonconflict.Verification (actual output)