Repository navigation
docs(triage): the line's wording dates a sample against a merged fix — the two routing rows - #5190
Conversation
…— the two routing rows A rising counter on an auto-filed incident is not new evidence while the fix is merged and not rolled, and the strongest test of each sample is the log line's own wording, not its timestamp: a timestamp says "after the merge", the wording says which code emitted it. Adds the two rows the routing cluster produced — the back-pressure line's field rename (per-destination → per-channel) and the pod-hub leg's level+word flip (fail:/Failed → info:/ShuttingDown on a DeactivateOnIdle rejection) — beside the existing image-attribution idiom, plus the two traps the cluster produced: a closing keyword parses per issue number, and one episode can hold two fingerprints. DocumentationLinkIntegrityTest: passed 1 / failed 0 — and failed 1 with a link deliberately broken, so the sweep demonstrably reads the page. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Review comments identify unresolved inaccuracies and overstatements in the documentation.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 1
Open (1)
What changed in this PR
Docs-only update adding routing log triage guidance, measured examples, and fingerprinting/issue-closing pitfalls.
Changes:
- Documents pre-/post-fix routing log wording.
- Adds guidance for dating samples against fixes.
- Explains issue-closing and multi-fingerprint traps.
| File | Summary |
|---|---|
src/MeshWeaver.Documentation/Data/Architecture/LogWatchTriage.md |
Adds routing-specific triage procedures and examples. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| - **The same episode can hold two fingerprints.** The current identity keys on the exception type, | ||
| so one log site fills one fingerprint when the exception is captured and another when it is not; |
There was a problem hiding this comment.
Agreed — the identity is hash(WHERE, WHAT, WHICH), and the exception type is one input among the call site and the masked message, not the key. Rewording to say that capturing the same site with and without the exception changes the inputs, so one episode can land on two fingerprints; the split is a property of the inputs differing, not of the type alone. Pushing the reword now.
… is one input, not the key Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Docs only. Conserves the work product of triaging the five newest core bugs (#5176, #5177, #5146, #5175, #2886) against the two routing fixes that merged overnight and are not yet rolled (#5151 for #5009, #5174 for #2299).
What it adds
Beside the existing image-attribution idiom in
LogWatchTriage("read the LINE for the image"), the two rows that the routing cluster produced — so the next reader of aRoutingGrainincident can date every sample against the fix from the sentence it prints, before readingOps/Statusand long before trusting the counter:[ROUTE] Routing back-pressure …stream destinations queued N, deepest per-destination queue Dordered channels queued N over M stream destination(s), deepest per-channel queue D[ROUTE] Directed delivery to pod hub … failedon aDeactivateOnIdlerejectionfail:+Failedinfo:+ShuttingDownPlus the two traps the cluster produced: a closing keyword parses per issue number (PR #5174's
Closes #2299's classification halfclosed #2299 against its own body's statement that the bounce half stays open — reopened,sev:H, now carrying #5177's evidence), and one episode can hold two fingerprints (#5146 / #5177: one address, one window, one set of senders).What this measured (the dispositions this page now explains)
026442fff0,8a52945608) of which78bbf49e03is not an ancestor (control: the memex commit IS an ancestor of the fix merge, i.e. older).fail:/Failed;6b3fda2a48is not an ancestor of either running commit.ThreadSupervisorhas 0 files in core); likely downstream of RoutingGrain turns a stale pod-hub route into a sender-visible DeliveryFailure instead of re-resolving it #2299's terminal verdict, plus a Plugins-side never-reset retry budget visible in the samples.Verification
dotnet build test/MeshWeaver.Documentation.Test -c Release -warnaserror0 Warning(s),0 Error(s),Time Elapsed 00:00:24.40DocumentationLinkIntegrityTesttotal: 1, failed: 0, succeeded: 1, skipped: 0total: 1, failed: 1, succeeded: 0, log names the broken target; restored to 0 occurrencesNo What's New file (policy
whatsnew-cadence). No hard-coded decision dates or names; the dates present are measurements. No addresses to recycle: doc content only.Mirror-sync: none — no catalog key touched.
Pairs-with: none — no public surface touched.
🤖 Generated with Claude Code