Repository navigation
fix(epic): clear the eight review residuals left by the bugs-2026-09-06 run - #836
Merged
Merged
Conversation
… review-residuals epic The promoted potential records for issues 813, 815, 817, 821, 822, 823, 824, 825 and 826 exist only on the unpushed session branch TaskMaster-wt-2026-09-06T17-16 and are absent from origin/main, so a preparation child branched from this integration branch cannot resolve a promotion source. Restore all nine. Issues 824, 825 and 826 additionally still carried an unpromoted duplicate under docs/features/potential/ on main; the promoted copy supersedes it byte-for-byte apart from the promotion metadata block, so the duplicate is removed here and git records the pair as a rename. No record content is lost. Attribution note: the orchestration-bookkeeping staging exemption in enforce-orchestration-preimplementation-gate-helpers.ps1 denies any git commit whose command text contains an angle bracket, so the Co-Authored-By trailer for Claude Opus 5 cannot be expressed on this commit path. Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Eight open bug issues filed on 2026-09-08 from the reviews of items 809, 810, 811 and 812, decomposed one feature per issue. The dependency graph carries exactly one edge: issue 826 depends on issue 825, because both edit the GetTableInViewAsync method of OlTableExtensions.TableAccess.cs. Waves are 0 for the other seven and 1 for 826. The manifest records the in-flight branch check, the csproj contention that must not become a dependency edge, and the execution-authorization note for the two build-configuration files feature 826 edits. issue_num values are final; the feature_folder values are placeholders and are back-filled from each preparation child's promotion receipt. Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…ation double-count Promotes issue #815 into an active full-bug feature folder as child F815 of the review-residuals-2026-09-08 epic. The potential record and the GitHub issue both already existed, so only the active folder was created; no duplicate issue was filed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…down review residuals Creates the full-bug active folder for issue 823 as child F823 of the review-residuals-2026-09-08 epic. Promotion of the potential entry and the GitHub issue were both performed by an earlier run; only the active folder is created here, so no duplicate issue is filed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…symbol residuals Seeds issue.md, the spec template and the canonical plan path for feature F826 of the review-residuals-2026-09-08 epic. Issue #826 and its promoted potential record already existed on the integration branch, so no new potential entry or issue was filed for this preparation run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
… memory Commits the spec.md and plan scaffolds that the active-folder tooling generated but did not report in its receipt, so the later authored versions read as a diff against a known baseline. Corrects the orchestrator memory on the PowerShell batch budget. The hook now worktree-scopes its state file and drops out-of-root entries on load, so the stale paths in the tracked default state file no longer exhaust a fresh worktree cap. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…defect Establishes that the defective aggregation is inline prose in delivered atomic plan documents rather than committed script code, and that the de-duplicated arithmetic in Get-CoberturaClassLineSummary is already correct. Refutes the issue's headline magnitude claim. Measured on two committed Cobertura documents, the all-descendant selection inflates all four counts by roughly two times while moving the derived percentages by 0.0000 and 0.3239 percentage points on branches, so it cannot have produced the reported 2.35 point swing. The provenance of the 77.03 figure is recorded as unknown because the underlying report is not committed. Recommends exposing a de-duplicated, allowlist-scoped aggregation as a tested function so plan authors call it by name instead of pasting a snippet, and supplies a falsifiable fixture with computed pre-fix and post-fix figures. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…t rates Captures the reconciled measurement behind issue 815 so a future reader does not re-accept the refuted magnitude claim, and records the depth-anchored counting technique that substitutes for a PowerShell run when the shell is unavailable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Corrects three facts the issue body carries: the item-1 population is 33 files carrying 34 live statements rather than roughly 24 classes, the two production diagnostics sit at lines 79 and 97 rather than 78 and 96, and five test projects are affected rather than six. Establishes that RS0030 severity promotion is unreachable without bulk suppression, that TimeoutAfter is the repository-local determinism seam rather than a bannable BCL member, and that the two TreeNode test files carry a CS0169/CS0414 hazard under the nullable gate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Records the completed research for the six batched residual entries and the specification that dispositions them: R1, R3 and R4 as code changes, R2 as a decision deferring the relocated throw to issue 813, R5 as an observation-only flake watch, and R6 as deferred upstream because everything under the agent configuration tree is pushed down from a separate governance repository. Every diff-based acceptance criterion is anchored to the integration branch head rather than to the origin/main commit that branch was cut from. The latter is an ancestor of this branch, so a three-dot diff against it degenerates to two-dot and bills the epic manifest and nine sibling promoted records to this feature. Measured on this branch: 11 paths under the wrong anchor, 1 under the right one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
… criteria States the root cause as the absence of a committed, tested, callable de-duplicated first-party aggregation rather than broken arithmetic in the existing helpers, and traces one duplicated row from the document through the unkeyed descendant-axis selection to the gate figure it corrupts. Records three corrections to the issue text: the raw Cobertura report it cites as committed evidence does not exist in the tree, the defect moves counts rather than rates, and the reported 2.35 point branch swing cannot be produced by this mechanism. No criterion is gated on reproducing either disputed percentage. Writes the analyzer criterion against a recorded baseline rather than a zero count, and routes the coverage criterion to a direct Pester JaCoCo run because the bundled artifact measures no path under the scripts tree. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…duals Records the corrected item-1 population of 33 files carrying 34 live statements, anchors the item-2 edit on literal statement text because feature 825 owns the surrounding timeout mechanics, and scopes item 3 to eight banned-symbol additions at unchanged RS0030 severity. Documents why severity promotion is unreachable without bulk suppression, why TimeoutAfter and the parameterless WaitOne overload are excluded, and carries sixteen acceptance criteria including a positive-observation requirement with a mandatory control for the analyzer diagnostics. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…om 826 Separated from the feature commits so it can be dropped independently if a parallel sibling conflicts on the shared memory index. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…a second isolating-child data point Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…ft on disk Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…down guard enumeration gaps
… hygiene residuals Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…deadline mechanics Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…ive-root guard Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
AC20 requires every file under docs/features/** other than this feature's own documents to be absent from the diff. AC35 required the GetTableInViewAsync reachability observation to be filed through the promotion lifecycle, which writes a record under docs/features/potential/promoted/. The two could not both hold on this branch. AC35 is now discharged by an evidence artifact under this feature's own evidence/other/ folder plus a follow-up handoff for the epic to file after this feature merges, with no on-branch promotion. The Assumptions reachability note and the Rollout follow-up preamble are amended to match. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…obals static race Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…split plan Corrects a stale cross-worktree CLAUDE.md path in P0-T1, adds the required evidence-schema fields to P0-T6, and scopes P0-T17's git diff to the evidence/ subtree so it is not falsified by the prior committed docs-restoration commit. Confirmed PREFLIGHT: ALL CLEAR on the following round; plan validator reports ok:true. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Complete the seven-phase plan the interrupted planner left as a draft, and replace its fixed c713d2a diff anchor with an execution-time self-anchor recorded by [P0-T2]. The fixed literal had gone stale: the epic-planner fanned sibling preparation for issues 815 and 826 into the integration branch after the anchor was chosen, so a three-dot diff against it listed 21 paths rather than 1 and billed sibling-owned and agent-memory paths to this feature's footprint criteria. A recorded HEAD cannot degenerate under any later integration-branch state. Amend the eight diff-anchored acceptance criteria in spec.md to match; the AC1..AC29 inventory is unchanged. Also repair six defects found by the planner's adversarial self-review, including a vacuous absence gate that searched BreadcrumbPopupOwnerRegistry.cs for a token only QfcFormViewer.cs carries. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…tomic plan The planner measured a conflict between AC6, AC20 and the spec Non-goals: threading the caller TimeProvider into GetTableInViewAsync makes the table-acquisition deadline create a timer on the ArmingBarrierTimeProvider that DfDeedleEtlTimeoutTests.cs line 135 consumes in a fixed order, so that test's Advance(250) would run before the ETL timer exists and the call would never complete. The barrier latch drops a signal when two timers arm inside one await window, so the ordering cannot be recovered by adding awaits alone. Adjudicated in favour of threading the provider and updating the one affected test. AC6, AC20, the Non-goals bullet, the Test Strategy bullet, the Write Set and the files-to-change summary are amended accordingly. The alternative, not forwarding the provider from DfDeedle.cs line 148, was rejected because it falsifies the AC34 invariant and leaves the production deadline on the system clock, which is the defect item 2 exists to close. The amendments are applied during preparation rather than by the executor, because acceptance criteria are authored by planning agents and an executor that can rewrite its own gates is not gated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Rounds 2-5 of atomic-executor preflight (resumed session) found and fixed: an unsatisfiable whole-file broader-catch grep in P6-T1, a wrong AssignFolderComboBox line span in that same fix, a minor line-count mislabel in P1-T1, and a false claim that no SDIL reader file exists in the tree (three production files do, and are now named explicitly in P6-T3's scope-boundary gate). Round 5 returned PREFLIGHT: ALL CLEAR. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Close six blocking defects, all instances of an acceptance condition that could not fail or that would have been marked satisfied on evidence not establishing it: - separate the committed-diff, untracked-addition and modified-tracked .claude/ path sets, so the AC26 gate tests what AC26 actually forbids; - scope the AC28 subtraction to the paths AC28 ranges over and surface the untracked residual instead of absorbing it; - require CONFIRMING-FAILED: 0 for AC25, which its text demands; - replace AC7's repo-wide search, unsatisfiable because the token is quoted in six documents including three the D22 fence freezes, with a source-scoped form plus a classified repo-wide record; - reserve a site-unique literal for the [P2-T6] Arrange rewrite that an earlier task could otherwise pre-satisfy; - stop mandating TOTAL: 29 of 29, which forced the summary to claim full satisfaction even when a criterion was legitimately left unchecked. Also apply five advisories and four coherence repairs for sibling invalidation the deltas themselves introduced. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Removes the three executor-side spec-amendment tasks, since the AC6, AC20 and AC35 amendments were applied during preparation by the orchestrator; acceptance criteria are authored by planning agents, and an executor that can rewrite the criterion it is judged against is not gated by it. Phase 3 is renumbered contiguously and every cross-reference reconciled. Also: adds a read-only Phase 3 guard that the executor is working against the amended spec; pins the pre-change FakeTimeProvider count so the later assertion is a transition rather than an absolute; requires the missing-using and unrestored-packages causes of CS1061 to be ruled out before that diagnostic may be read as refuting the TimeProvider extension member; and adds explicit staging or porcelain-status spans to the three name-listing diffs the plan gate flagged. The plan validator now passes with zero warnings. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…structor Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…kbox Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Records the policy audit, code review and feature audit for the ILGlobals static-publication fix. Zero blocking findings; all twelve acceptance criteria evaluated PASS against the committed evidence. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…chronised-static-race-824-exec fix(824): publish ILGlobals opcode tables from an explicit static constructor
… gate Feature 824 merged as PR #833 (merge commit 96fd3dd), verified against gh pr view and the remote integration tip; the fan-in introduced zero deletions. The integration CI run dispatched after 823's merge concluded success, and a sixth run is dispatched against 96fd3dd. Feature 825 is the last of wave 0 and the load-bearing dependency for the single wave-1 feature, so wave 1 does not open until its merge is durably confirmed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Six residual items from issue #825, none a regression introduced by #811. Item 1 records why the 250 ms per-row ETL budget is unchanged. A comment at the expression states that the value rests on no recorded measurement, that no measurement is obtainable in this environment, and names the live-Outlook capture route by LogTableTiming payload and log4net root level. The value itself is untouched. Item 2 puts the table-acquisition deadline under caller control. GetTableInViewAsync gains a trailing optional TimeProvider parameter, resolves its deadline source once so an explicitly supplied timeoutSourceFactory still wins, and DfDeedle.GetEmailDataInViewAsync now forwards its provider. The TimeoutException retry propagates the caller's timeoutMs instead of the literal 2000, so both attempts are governed by the same caller-visible value on the same caller-supplied clock. Proven at build time rather than assumed: a settling call site was compiled and produced no CS1061, so TimeProviderTaskExtensions.CreateCancellationTokenSource is available. Item 3 changes EtlAsync's declared return type so its first tuple element is object[,]?, and deletes the null-forgiving suppression on the return. The TimeoutException swallow, the tokenSource.Cancel call and the DfDeedle null guard are all unchanged, so no consumer observes a behavioural difference. Item 4 deletes the two inert (int, int) TimeoutAfter overloads, EtlAsyncOld, and their three tests. All three exits of the inner provider overload return a Task and none throws synchronously, so the catch clauses in the deleted overloads could never execute. This takes TimeOutTask.cs from 1011 lines to 966. That is a reduction of the 500-line cap violation, not a resolution of it; the file remains 466 lines above the cap and reducing it further is a separate change. Item 5 corrects the stale DfDeedle.QfcColumns.cs doc comment, which named a TableEtlInvoker seam that no longer exists, to name DefaultTableEtl. The CS1769 rationale sentence is retained. Item 6 removes [DoNotParallelize] from OlTableExtensions_Tests and replaces its class comment, which had claimed a population of tests the class does not contain. The justification is the item 2 change rather than observed repeated runs: the one test that armed a real timed CancellationTokenSource now supplies a FakeTimeProvider, so no wall-clock deadline governs the class. TimeOutTask_Tests keeps its attribute and gains the verified reason it lacked, naming the two real wall-clock races in that class. Four regression tests are added in a new file with one compile item added to the test project. DfDeedleEtlTimeoutTests.cs receives a bounded timer-ordering update, permitted by the 2026-09-09 AC6 amendment: threading the provider inserts the acquisition timer as the first arming signal on a latch-based barrier, so each timer now arms inside its own await window. No assertion in that class was added or removed. Toolchain: csharpier format and check clean at 1623 files; both MSBuild gates pass with /t:Rebuild at 0 warnings and 0 errors, with zero CoreCompile skips and four csc invocations for the Write Set projects; 7213 tests pass with coverage. Repository first-party line coverage moves from 85.62% to 85.67%, and changed-line coverage is 90.9%. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Two artifacts that could not be inside the preceding commit, because each records the state that commit produced. evidence/qa-gates/ac18-commit-language.md records the commit sha, the zero-line porcelain result, the commit-language checks, both directions of the Write Set accounting, and the confirming check that none of the five committed MSBuild logs contains the host account name. evidence/other/review-handoff.md indexes every artifact this plan produced with a one-line purpose, and names the adjudicated design conflict section of the plan as the first item a reviewer must read. It also states, for sibling feature 826, the end state of the exception that escapes TimeOutTask.RunWithTimeout. The plan checklist is updated to reflect the tasks these two artifacts complete. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Records the policy audit, code review and feature audit for the ETL deadline mechanics follow-ups. blocking_count is 0 and all 35 acceptance criteria in spec.md evaluate PASS, so no remediation cycle is opened. Also carries the P9-T6 plan check-off, which the plan itself records as the single permitted residual because it is written after the commit the task makes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…ow-ups-825-exec fix(825): close the residual ETL deadline mechanics left by #811
Feature 825 merged as PR #834 (merge commit 049c142), verified against gh pr view and the remote integration tip; the fan-in introduced zero deletions. That completes wave 0: 813, 815, 817, 821, 823, 824 and 825 are all merged and durably confirmed. Six dispatched integration CI runs, six successes. Also records a redundant resume of feature 825. The first orchestrator for that feature notified with a narrative progress report rather than the agreed bounded return shape, and the parent's idleness probes -- no live test process, a coverage file identical across two samples -- measured the workload rather than the agent. The original merged twenty-three seconds after that read. The double-delegation is bounded because a merge cannot be repeated, and wave 1 was held until the redundant agent exited. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Twenty-four memory files written by the wave-0 children and by the epic parent, left uncommitted in the session worktree because a child must not commit in the epic parent's fan-in home. They cover, among other things, CS1769 forcing reflection for Outlook-returning APIs, an epic child branch anchoring its diff on origin/main, Cobertura post-processing exiting zero independently of the test result, and two parent-side traps: a trailing parenthesis on a feature-folder path token defeating the delegation hooks, and a completed task-notification not proving a child has finished. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Wave 1 was held until dependency 825 was confirmed merged from gh pr view and from ancestry of the wave-1 worktree HEAD, not from a completion notification. The epic checkpoint validation, which reported the expected wave-barrier line for 826 throughout wave 0, now returns ok with no findings. Records that feature 825's fourth gate, unresolved at merge time, was later confirmed green on evidence by an independent re-run at the same head: 7213 tests, 7213 passed, 85.67% line and 79.84% branch coverage, clearing the 85% and 75% floors. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…agnostics through log4net, extend BannedSymbols Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…cklist Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…d-symbol residuals Adds the policy-audit, code-review and feature-audit artifacts for issue #826. Verdict: 0 blocking findings, 16 of 16 acceptance criteria PASS. The review records one gap the feature itself did not close: no plan task or evidence artifact captured a branch-coverage figure, though C# is branch-capable and the uniform floor is 75 percent. It was closed during review by parsing both Cobertura roots. The raw merged root reports 66.49 percent branch across 23 packages because it includes the test assemblies and five vendor packages, while the post-processed first-party denominator reports 79.87 percent across 9. The first-party figure is the policy-conformant one and is what the repository's own threshold assert uses, so both floors clear and no verdict changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
…banned-symbol-promotion-826-exec fix(826): remove Console output aggressors and promote four timing primitives to banned symbols
Eight memory files from the wave-1 child and its delegates, left uncommitted in the session worktree because a child must not commit in the epic parent's fan-in home. They cover feature 826's factory-outside-try reachability seams, a branch-coverage denominator trap in raw Cobertura, and a note that an epic manifest's ALL CLEAR table is a claim rather than evidence. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
Feature 826 merged as PR #835 (merge commit 219804e), verified against gh pr view and the remote integration tip; the fan-in introduced zero deletions. All eight features in the epic are now merged. Records what this epic does NOT close. collect_pr_context emits a long author-asserted auto-close list scraped from commit messages and feature documentation; those are prose references, not deliveries. In particular #181 remains open by design: feature 826 was authorized to promote RS0030 to warning but not to break the build to obtain it, so it delivered the reachable subset by extending BannedSymbols.txt from seven entries to fifteen and left the severity at suggestion with the blocking precondition documented in-file. That comment also corrects the manifest's figure, re-measuring 153 textual hits and noting they are not comparable to the earlier diagnostic count. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01URyGon15RvDXcUEo96tvyh
This was referenced Sep 10, 2026
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.
Suggested title
fix(epic): clear the eight review residuals left by the bugs-2026-09-06 run
Summary
bugs-2026-09-06parallel run filed on 2026-09-08: issues 813, 815, 817, 821, 823, 824, 825and 826. Each was deliberately excluded from the item that surfaced it to hold that item's blast
radius to a bugfix.
CleanuponQfcHomeControllerinvoked theribbon-release callback again, and
ProgressViewercancellation threw when the shared tokensource was null or already disposed.
ILGlobals.LoadOpcodes.figure again equals an independent de-duplicated recomputation from the same Cobertura report.
QfcItemController.FolderHandling, which threw on theUI dispatcher when the archive root was unset; it now degrades to no preselection.
OlTableExtensionsandTimeOutTask, and restoresConsole.Outhygiene across test classes that installed a writer and never restored it.BannedSymbols.txtfrom seven entries to fifteen.RS0030deliberately stays atsuggestion— see Backward Compatibility.17 production C# files change. The remainder of the diff is tests, evidence, and feature
documentation.
Why
These eight issues were promoted from potential records captured on 2026-09-08 during the reviews
and executions of items 809, 810, 811 and 812. Every one of them was already known and already
located; none had an owner. Left alone they would be rediscovered by every future review of the
QuickFiler teardown, UtilitiesCS concurrency, and coverage-tooling subsystems.
The coverage item is the one with leverage beyond its own defect: while first-party aggregation
double-counted method rows, every quality gate downstream of it was measuring something other than
the quantity it claimed to measure.
All nine promoted records existed only on an unpushed local session branch and were absent from
origin/main; they were restored onto the integration branch so each child could resolve apromotion source.
What Changed
QuickFiler teardown and UI robustness
QuickFiler/Controllers/QfcHomeController.cs,EfcHomeController.cs— parent cleanup no longerreleases the ribbon twice.
UtilitiesCS/Threading/ProgressViewer.cs,ProgressPane.cs— cancellation is safe when theshared token source is null or disposed.
QuickFiler/Controllers/QfcItemController.FolderHandling.cs— guarded archive-root read.QuickFiler/Viewers/BreadcrumbDropDownHost.Open.cs,BreadcrumbPopupOwnerRegistry.cs,QfcFormViewer.cs, andUtilitiesCS/OutlookObjects/Store/StoreWrapper*.cs— teardown residuals.UtilitiesCS concurrency and ETL
UtilitiesCS/NewtonsoftHelpers/SDIL Reader/ILGlobals.cs— synchronised opcode initialisation.UtilitiesCS/OutlookObjects/Table/OlTableExtensions.Etl.cs,.TableAccess.cs,UtilitiesCS/Threading/TimeOutTask.cs— deadline and retry mechanics.UtilitiesCS/Extensions/DfDeedle*.cs.Tooling
scripts/vscode/Invoke-MSTestWithCoverage*.ps1— first-party coverage aggregation no longerdouble-counts method rows, with a new 271-line Pester suite covering the corrected arithmetic.
Policy configuration
BannedSymbols.txt— addsCancelAfter(both overloads), both deadlineCancellationTokenSourceconstructors, and all four timedWaitOneoverloads..editorconfig—RS0030documented and held atsuggestion.Tests and documentation
.csfiles total, includingConsole.Outrestoration across test classes in six testprojects; 434 Markdown files of specs, plans, audits and gate evidence.
Architecture / How It Fits Together
Delivered as an epic across two waves on a shared integration branch, one independently mergeable
child feature per issue. Wave 0 carried seven features with no dependency edges. Wave 1 carried
issue 826 alone, which depends on 825 because both edit
GetTableInViewAsyncinOlTableExtensions.TableAccess.cs.That single edge is load-bearing at execution time rather than merely declarative: 826's
[P1-T1]re-measures
Console.WriteLinereachability against the post-825 tree and records a branchselection from that measurement, so 826 could not correctly start before 825 had merged.
Verification
Completed
CSharpier, MSBuild analyzers, MSBuild nullable, then vstest — using
/t:Rebuildthroughout,because a warm
/t:Buildreturns exit 0 having skipped every compile.runs concluded, all successful. The authoritative final run
(34420821429) targeted
86caef4a, the exact head this pull request carries, and concluded success.85.67% line and 79.84% branch coverage, clearing the repository floors of 85% and 75%.
git diff --diff-filter=Dagainst the previous integration tip andwas additions-only, so no merge silently dropped work the branch had gained.
gh pr viewstate and from the remote tip, not from thechild's own report.
A gap worth stating plainly:
.github/workflows/ci.ymltriggerspull_requestonly on[main, development]. Every child pull request here was based on the integration branch andtherefore received zero CI runs. Merge-on-green would have silently become merge-on-nothing.
The dispatched integration runs above are the compensating gate. No workflow file was edited to
obtain a trigger. This pull request, targeting
main, is the first in the epic to receive CIautomatically.
Recommended
dotnet tool run csharpier check .msbuild TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=truemsbuild TaskMaster.sln /t:Rebuild /m /p:Configuration=Debug "/p:Platform=Any CPU" /p:TreatWarningsAsErrors=truevstest.console.exe <test-assembly-paths> /EnableCodeCoverageBackward Compatibility / Migration Notes
No public API is removed or renamed. The behavioural changes are all defect corrections in the
direction of not throwing and not double-releasing.
RS0030is deliberately NOT promoted, and issue #181 stays open. Feature 826 was authorized topromote
dotnet_diagnostic.RS0030.severityfromsuggestiontowarning, but that authorizationexplicitly did not extend to breaking the build to obtain it. Toolchain step 3 promotes every
warning to a build error, so promotion remains blocked until the pre-existing call sites are
cleared. The feature delivered the reachable subset — the
BannedSymbols.txtextension — andrecorded the blocking precondition in
.editorconfig.That comment also corrects a figure carried in the epic manifest. The manifest cited roughly 143
pre-existing usages. Re-measured at implementation time the surface is 153 textual hits
(
DateTime.Now53,DateTime.UtcNow20,Random.Shared5,Thread.Sleep15,Task.Delay60).Textual hits are not diagnostics and the earlier figure was a diagnostic count, so the two numbers
are not comparable.
Because the new
BannedSymbols.txtentries are analysed atsuggestion, they surface assuggestions rather than build breaks.
Risks and Mitigations
tests added per feature, with fail-before evidence recorded before each fix.
Transaction_SecondCallerCannotInstallUntilTheFirstRestores, is knownto fail roughly one run in four. It was deliberately not stabilised with a sleep, a retry, or
a timing tolerance, which the epic lists as a prohibited remedy; it is recorded as a flake watch.
before. No threshold was lowered to accommodate the corrected denominator, and no production file
was added to a coverage exclusion list.
the integration branch.
Review Guide
.csfiles listed under What Changed — the actual behavioural surface.scripts/vscode/Invoke-MSTestWithCoverage*.ps1and its new Pester suite — the correctedcoverage arithmetic.
.editorconfigandBannedSymbols.txt— the two authorized configuration edits.of the 536 changed files are Markdown.
Follow-ups
Four defects were surfaced during preparation but fall outside this epic's blast radius, and are to
be filed through the promotion lifecycle once this merges:
GetTableInViewAsyncsilently returns null on timeout instead of throwing. It callsTimeOutTask.RunWithTimeoutwithmaxAttempts: 1andstrict: false; on the ordinary timeoutpath
RunWithTimeoutabsorbs theTaskCanceledException, exhausts its internal retry, andreturns
default(TResult), so neither catch block is entered and the method returnstable!asnull to its caller.
QfcHomeController.CreateCancellationToken()has no production caller, so the synchronousInit()path passes a null_tokenSourcetoQfcFormControllerLoaderandLoadItems/LoadItemsAsyncsilently do nothing.SubjectMapSco.Orchestration.cs:228andProgressPackage.cs:25are never disposed by any holder.ProgressTrackerAsyncis dormant production code with no construction site outside its owntests.
Also outstanding:
C:/Users/DanMoisan/repos/TaskMaster-wt/rr0908-*could not beremoved: the parallel worktree-removal gate requires a parallel checkpoint
items[]record,which an epic run does not maintain, so it has no jurisdiction here yet fails closed. They are
clean and fully merged; reclaim with
scripts/bash/cleanup-worktrees.sh.docs/features/epics/review-residuals-2026-09-08/epic-status.mdrecords the final state, but itsclosing entry for this merge necessarily lands in a follow-up commit, since a document cannot
record the merge commit of the pull request that carries it.
GitHub Auto-close
None. The PR-context bundle reports GitHub CLI validation unavailable and no verified closing
issues, so no
Closeskeyword is emitted here.This is the safe outcome rather than merely a procedural one. The bundle's author-asserted list
over-collects by scraping issue numbers from commit messages and feature documentation, and
includes #181 — which this work explicitly does not resolve. Close issues 813, 815, 817, 821,
823, 824, 825 and 826 manually after merge, and leave the rest open.