<!-- Add the related story/sub-task/bug number, like Resolves#123, or
remove if NA -->
**Related issue:** Resolves#42156
The core change: instead of loading AppConfig, HostFeatures,
TeamMDMConfig, and rebuilding the detail query map **independently
inside each call** to `directIngestDetailQuery` and `ingestDetailQuery`
(so ~2N times per check-in with N detail results), we load everything
**once** into a `hostDetailQueryConfig` struct and pass it through.
## Before
```
SubmitDistributedQueryResults loop:
for each query result:
→ ingestQueryResults
→ directIngestDetailQuery: loads AppConfig, HostFeatures, TeamMDMConfig, builds detail query map
→ ingestDetailQuery: loads AppConfig, HostFeatures, TeamMDMConfig, builds detail query map
after loop:
loads AppConfig for labels/policies
loads AppConfig AGAIN for deferred host save
```
## After
```
SubmitDistributedQueryResults loop:
on first detail query result:
→ loadHostDetailQueryConfig: loads AppConfig, HostFeatures, TeamMDMConfig, builds detail query map ONCE
for each query result:
→ ingestQueryResults (receives pre-loaded config)
→ directIngestDetailQuery: just looks up the query in the cached map
→ ingestDetailQuery: just looks up the query in the cached map
after loop:
loads AppConfig once for labels/policies/deferred host save
```
The detail config is **lazy-loaded** — if a check-in only has
label/policy results and no detail queries, the
HostFeatures/TeamMDMConfig calls are skipped entirely.
## Other changes bundled in
1. **`serialUpdateHost`** now receives the request context and uses
`context.WithoutCancel(ctx)` instead of `context.Background()`, so the
background goroutine preserves OTEL traces and logging context without
being subject to request cancellation.
2. **Deferred save host** at the end of `SubmitDistributedQueryResults`
reuses the already-loaded AppConfig instead of loading it a third time.
The old code silently skipped the host save if that third load failed.
# Checklist for submitter
If some of the following don't apply, delete the relevant line.
- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
## Testing
- [x] QA'd all new/changed functionality manually
- Ran a local load test with osquery perf
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Performance**
* Optimized distributed query result processing by preloading
configuration once per request instead of repeatedly per query result,
reducing redundant database calls and improving overall query
performance.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->