docs: field-note ledger for the post-D5.4-step-2 Polly oracle re-run - #141
Conversation
The maintenance rule in field-notes-patterns.md requires every oracle run's oracle-only findings to be triaged and recorded. This adds entry 7 — a run ledger (not a new idiom; entries 1-4 already cover Polly's patterns) for the Polly re-run after D5.4 step 2 shipped the ctor-adopt alias_join: - Buckets unchanged: Own.NET 0 / Agree 0 / Own.NET-only 0 / oracle-only 16. The new alias_join emission produced ZERO own-only findings on real code. - All 16 oracle-only accounted for (each an oracle FP or by-design), mapped to the existing entries: Infer# TimedLock struct-using x12 (entry 4), a strategy ctor allocation (1/2), CodeQL BulkheadSemaphoreFactory x2 (entry 1), callback-deferred CTS (entry 2), pooled-CTS-return (entry 3). - Pins the recall boundary: BulkheadSemaphoreFactory is the factory-returns + store-in-owning-field (deferred T4b) shape, NOT step 2's construction-site ctor-adopt — so step 2 correctly leaves it silent and CodeQL's FPs there stay oracle-only (flagging them would be a false positive). own-only-0 on Polly is principled, not luck; the next recall lever is the deferred field-store adopt. Verified against the pinned Polly source (App-vNext/Polly@976983f), not just the SARIF excerpts. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fmwk5ruExKy5fQ77CJ2NtF
📝 WalkthroughWalkthroughRefines one notebook entry on struct-based scoped locks and adds a new run ledger for a Polly oracle re-run, including ChangesNotebook note updates
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~2 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Triage detail behind this ledgerBoth CodeQL
#pragma warning disable CA2000
var source = new CancellationTokenSource();
context.AddReloadToken(source.Token);
context.OnPipelineDisposed(() => { registration?.Dispose(); source.Dispose(); });CodeQL doesn't follow the lambda capture into the registration. Flagging it would be a false positive → entry 2.
Why nothing is fixable here without an FP. The two CodeQL Recall boundary for next time: the evidence-backed lever for this family is the deferred field-store-to- Generated by Claude Code |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 24081a2d82
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| **Own.NET-only 0**; oracle-only **16**. The new `alias_join` path produced **zero** | ||
| own-only findings on real code — the precision floor held end-to-end. | ||
|
|
||
| **The 16 oracle-only, each accounted for (all oracle FP or by-design):** |
There was a problem hiding this comment.
Reconcile the oracle-only total
This ledger claims there are 16 oracle-only findings, but the newly added table totals 17 findings (12 TimedLock + 1 strategy ctor + 2 Bulkhead + 1 callback CTS + 1 pooled CTS). Since this note is the required audit record for the run, either the bucket total or one row/count is wrong, leaving readers unable to tell which findings were actually present.
Useful? React with 👍 / 👎.
…2 (Codex) The entry-7 table totalled 17 (12+1+2+1+1) but the run had 16 oracle-only. The CircuitBreakerResilienceStrategy ctor finding is ONE OF the 12 Infer# leaks, not additional: 11 TimedLock + 1 strategy ctor = 12 Infer#; + 4 CodeQL = 16. Fix the TimedLock row to 11 (with the per-file breakdown) and tighten entry 4's parenthetical to match (11 struct-using + 1 strategy ctor). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fmwk5ruExKy5fQ77CJ2NtF
Что и зачем
Добавляет в
docs/notes/field-notes-patterns.mdзапись 7 — журнал прогона (только документация) для повторного oracle-прогона Polly после D5.4 step 2 (ctor-adoptalias_join). Файл сам требует записывать триажoracle-onlyнаходок каждого прогона; это закрывает требование для step-2 re-run и фиксирует, что новая эмиссияalias_joinосталась точной (own-only-0 на реальном коде).Записанный результат: бакеты без изменений — Own.NET 0 / Agree 0 / Own.NET-only 0 / oracle-only 16; все 16 разложены на существующие записи (11 TimedLock struct-
using→ запись 4, 1 strategy-ctor → 1/2, 2 BulkheadSemaphoreFactory → 1, 1 callback-CTS → 2, 1 pooled-CTS → 3), каждая — oracle FP или by-design. Зафиксирована граница recall:BulkheadSemaphoreFactory— это отложенная форма T4b (factory-returns + store-in-owning-field), а не construction-site ctor-adopt из step 2, поэтому step 2 корректно молчит, и пометить их было бы ложным срабатыванием. Диспозиции сверены с закреплённым исходникомApp-vNext/Polly@976983f.Тип изменения
Как проверено
.md; поведение анализатора не меняетсяpython tests/run_tests.py— не требуется (нет изменений кода)Связанные issue
Нет связанного issue. Refs: D5.4 step 2 (PR #137),
docs/notes/d5-ownership-transfer.md§7/§11.Чеклист
docs:)🤖 Generated with Claude Code
https://claude.ai/code/session_01Fmwk5ruExKy5fQ77CJ2NtF