Repository navigation
Trace-flag reads decide on the newest successful run's row count, so an ordinary run no longer hides every enabled flag (#3999 follow-up) - #4032
Merged
Conversation
… its timestamp, so an ordinary run no longer hides every enabled flag #4030 compared MAX(trace_flags.capture_time) against the newest SUCCESS's collection_time. Darling stamps collection_log when a run ENDS, after its capture rows, so that comparison was false after every ordinary run and hid every enabled flag in get_trace_flags and the viewer grid. Lite stamps at run START, so the same SQL meant something different there. All three reads (Darling MCP, Darling viewer, Lite) now keep the newest capture unless the newest SUCCESS wrote 0 rows. Every capture writes the full list of flags that are on, so 0 means all off. No SUCCESS row, or a NULL count, keeps the pre-fix reading. - Darling live test seeded in the service's real write order (capture, then an end-stamped log): on, all off, a failed run, on again, through BOTH readers. Red-watched: #4030's SQL fails step 1 with Expected [1117], Actual []. - New Lite twin, TraceFlagsLatestRunTests, seeded in Lite's order (log stamped at start). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdmA4ND1wLSqA91ax1m4xv
erikdarlingdata
enabled auto-merge (squash)
September 23, 2026 12:52
Merged
1 task done
erikdarlingdata
added a commit
that referenced
this pull request
Sep 23, 2026
… one after verifying it (#4033) On 2026-09-23 three lane PRs opened ready (#4020, #4022, #4030) were merged from the UI before the coordinator's verification finished, and #4030 put a regression on dev (every enabled trace flag hidden; fixed in #4032). A draft can't be merged from the UI, so a lane now opens a draft, lists anything it didn't run as an unchecked box, and the coordinator readies it after the checklist read (and a review round for security PRs). Claude-Session: https://claude.ai/code/session_01GdmA4ND1wLSqA91ax1m4xv Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
erikdarlingdata
added a commit
that referenced
this pull request
Sep 26, 2026
…4438) Adds the missing [Unreleased] CHANGELOG entries for nine merged PRs. Two more need none. - Fixed: #3588, #3886, #3889, #3900, #3911, #4016, #4032 and #4042. - Changed: #4157. llms.txt and CITATION.cff now match the shipped product. - None: - #4332 adds RawChunkIntervalPlanner without wiring it in; the later PR that wires it carries its own entry. - #4398 changes tests only. - Each entry was written from its PR's diff, with a [#N] label linking the pull request.
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.
Fixes a regression #4030 put on dev.
Why
#4030 (#3999) anchored the trace-flag display reads on the collector's newest successful run by comparing timestamps: show the newest capture only if
MAX(trace_flags.capture_time) >= MAX(collection_log.collection_time)for the collector's SUCCESS rows.The service stamps a
collection_logrow when the run ENDS (DarlingObservability.LogCollectionAsyncusesDateTime.UtcNowat log time), after the run's capture rows. So after every ordinary run the newest SUCCESS is a few seconds newer than its own capture, and the comparison is false. Dev currently shows no trace flags on any server inget_trace_flagsand the viewer's Configuration grid, even with flags on. #4030's test only seeded the all-off case, never an ordinary run in the service's real write order.Lite stamps
collection_logat run START, so the same SQL happened to hold there. No timestamp comparison means the same thing in both products.What changes
DarlingCurrentConfigReader.TraceFlagsSql(MCP),ViewerDataService.TraceFlagsSql(viewer) andLocalDataService.GetLatestTraceFlagsAsync(Lite).TraceFlagsCollectorreturns its written row count in both products), so 0 means every flag was off.ORDER BY collection_time DESC NULLS LAST LIMIT 1, using the existing(server_id, collection_time)index. The trace-flags collector is daily, so the walk back is at most a day of that server's log.Test plan
TraceFlags_AnswerForTheNewestSuccessfulRun_AgainstDevPostgres(replaces Trace-flag display reads anchor on the collector's newest successful run (#3999) #4030's all-off test) is seeded in the service's real write order: the capture, then a log row stamped 3 s later. It covers 1117 on, then all off, then a failed run (the answer stays none), then 4199 on. It runs the viewer and MCP readers and asserts they agree. Live on PG 18.6 + TimescaleDB 2.30.1:ViewerConfigurationSqlTests+ViewerConfigurationLivePostgresTests17/17, none skipped.Expected: [1117], Actual: [], the regression exactly.TraceFlagsLatestRunTests, seeded in Lite's order (log stamped at start): the same four steps, plus no run record keeping the capture. 2/2.🤖 Generated with Claude Code
https://claude.ai/code/session_01GdmA4ND1wLSqA91ax1m4xv