Repository navigation
Daily tech-debt sweep — 2026-11-02 - #2242
Conversation
Advance CENTRAL-105 using the existing write contract, retaining retry tags and journal amount markers. Audit confirmation outcomes instead of connector references. Close CONSENT-1 under the standing policy against controller-policy pinning tests.
Share preference filtering, copy limits and persistence between individual sends and role broadcasts while preserving their resolution scopes. Remove the redundant single-notification repository write.
Read the latest reminder stamp across each survivor's identity chain instead of ignoring stamps left on merged-away accounts. Keep historical rows and existing export and erasure behavior intact.
Keep required-consent projection in its sole service owner now that the cache delegates to it. Inline the single-use chat-terms name in its document definition and retain the existing shaping assertions through the service boundary.
Collect email and sent-stamp failures while attempting the remaining recipients, then fail the job so failed reminders can retry. Preserve best-effort in-app notices and successful reminder stamps.
Attempt every due account, then propagate collected anonymization failures for job visibility and retry. Keep post-erasure confirmation delivery failures terminal and preserve their identity-safe logging.
Count every completed sweep once, including empty candidate sets and unchanged users. Remove run-success accounting from the domain service while retaining its per-member suspension metrics.
Nightly cleanup spendEstimated Standard API list-price equivalent; not subscription billing. Each session includes its linked subagents. Cleanup —
|
PR Surface ReportCompared Summary: 287 changed file(s) | EF migrations: 1 added file(s), max 1/1 per context Reforge Surface Score
Section Deltas
Section Size & Complexity Deltas
Rule Deltas
Corpus Size & Complexity
At head: largest class Published Write Surface17 of 51 sections publish write capability, 51 interfaces (0). Interface SurfaceAdded interface methods
Diff Size
New Files
EF Migrations (OK)
|
Repaired: 5e0ad14 Audit each membership expiry within its tier mutation — Governance data-access.md now says the TierDowngraded audit follows the commit (3e17a43 moved it). Repaired: b9b320a Commit deletion requests and access revocations atomically — IAccountDeletionService XML doc no longer claims the audit commits with the marker. Fixed: dotnet format whitespace violations failing the code-quality check (10 files). Review-round: 1 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0186neA51VTAAwfAjB4ssCdZ
Debt review84 commits: 78 GOOD · 4 GOOD-superseded · 2 REPAIRED · 0 REVERTED. Round-1 commit Commit verdicts (84)
Spot-check overturned one worker REPAIR: Data migrations. No commit retires one. Live /fix triage. No review threads on the PR at round 1 — nothing to triage.
Needs Peter. CENTRAL-105 not elevated: having Issues filed: none. Ledger: 6 → 6 open rows this review (runner: 7 → 6). Rounds spent: 1 of 3 · pushed Recommendation: merge. Generated by Claude Code |
Ledger: 7 → 6 open rows. Closed CONSENT-1 as D6 hygiene. No rows added.
The original work window has ended. The final discovery pass selected no additional verified batch. The last commit is
a5fdb5388, and the working tree is clean oncodex/daily-debt/2026-11-02. Nothing was pushed or published.Pre-approved contract changes
SearchVolunteerVisibleRotas(query, eventId, max, ct)→(query, eventId, ct), allowing ranking before the caller’s limit.ExecuteAsync(string, long? = null, CancellationToken = default)→ExecuteAsync(string, long, CancellationToken = default), requiring the persisted scan timestamp.SyncAllDocumentsAsync(ct = default)→(ct = default, ICollection<Exception>? failures = null), collecting failures while completing remaining work.ApplyMemberRoleChangesAsync(changes, ct)returnsTask<IReadOnlyList<Guid>>instead ofTask<int>, identifying actual saved role changes.ClaimAsync,ReleaseAsync, andConsumeAsynceach add optionalAction<Func<CancellationToken, Task>>? afterCommit = nullafter their existing four parameters. Expenses owns the transaction; the collector keeps audit and notice logic in Preapprovals while delaying execution until commit.ShiftSignupNotices,SurveyTranslationFiller,RideshareNotices, andTeamGoogleGroupMembershipsowners. Public entry-point signatures remain unchanged; no new public interface or DI registration.IUserEmailServicemethodsGetNobodiesTeamEmailAsync,GetPrimaryEmailAsync, andGetVerifiedEmailsForUserAsyncafter checking production consumers.Needs Peter
CENTRAL-105: Expenses currently persists Holded document IDs and creates capped, multi-line purchase documents. Existing
IHoldedWritedeliberately returns outcomes without IDs, so replacing connector calls alone would break retries and reconciliation. The maintenance policy requires this ownership transition to have a dedicated scope.Yes/no: authorize a dedicated Expenses phase retaining
Task ExpenseHoldedPublisher.PublishAsync(Guid outboxEventId, ExpenseReportDto report, Instant now, CancellationToken ct)while moving publication to the key-based Holded write contract and preserving caps, attachments and retry behavior?Cumulative production changes
There are 76 net substantive improvements across 84 local commits. Counts below record validation at each commit. A means the 32 architecture checks; P means resource parity. Scoped test runs included their builds.
Finance and canonical recipient data
a41315fa7fcd4ee2dcUserInfo.Emailselection without changing raw reporting cohorts.65453074b046f003f96507a21f796fcc3a7ed59f96819568d1dae9efb088d55d4f4acebb649b814a7c9a4bba8324073b082c72b7d35d262c153fc2b82c7c420c226c96aIdentity, lifecycle and data correctness
dbe69dc5dbbc99efd7c158a91145e0ad1413217fa0825b9b320a7c104ab955d5eeb9735349088c8db4633dffb641c647e0bbe41a1a9072a13c26702eb5b256229a76f29e6277e960513be8883515248083bd230d514aab786b2f5c1290aae166a2e5450224eb002Notices, jobs and audit boundaries
8eae0cfef911b674eb62025863f60423915a1f2ec2d89bf86271f35e62d032e34b5232f988cfbf2f196db008d94918250fd4be1ad17f4fa6476014c964995be66daf01e08eab5e0ef18d52155268e2d48965aa8dfeb2f78704574c683667b2a85af3463e17a4383a5fdb5388Workflows, ownership and executable tooling
342840b4b0bc70d4f5a48ed789c4da0e24d2abf5e7b80efd49eca2b02c148cf3086f1b733e0b8462148b04e686a05e48f5a9e62f5894809c89111728d3807ed7fc08e66Superseded work, support and hygiene
9763e0cd0) and 78 (0c46f930e) added audit-exception collectors based on exceptions the real AuditLog service deliberately swallows. Round 82 removed those collectors and exception-only tests.e0080d109) and 80 (1f44d27ab) coupled file-deletion metadata with audit transactions. Round 81 restored the documented independent, best-effort audit boundary.8fb4f79fd, removed unused email projection APIs as supporting cleanup. Users 861, Tickets 462 and architecture checks passed; it is not counted separately.Migration and validation limits
Round 49 generated
20261102063239_PersistReConsentNotificationBatchesthrough EF in Consent’s ownLegalDbContext. It adds a nullable batch identifier without a backfill. Pending-model checks, generated SQL inspection, migration checksums and the required migration review passed. No migration was applied to a database.Transaction regressions verify ambient scope, completion status and ordering. Round 83 additionally exercises rollback using transaction-enlisted fake stores and forced commit rejection. Round 84 verifies commit/abort completion behavior for claim, re-stamp, release and consumption, plus all four Expenses callers. These tests do not prove PostgreSQL rollback behavior.
All new localized copy covers en, es, de, it, fr and ca. Owning invariant docs were updated. No new endpoints, public interfaces, services or privilege grants were introduced.
Humans.Integration.Testswas never run. The wrapper’s final full build and non-integration gate remain pending.Remaining rows, exclusions and batch boundaries
Total recorded work: 11h 2m 54s active, 12h 1m 18s wall time, including final verification after the deadline. The goal is complete and the checkout is ready for the wrapper’s validation/publication gate.
Runner outcome
Work deadline reached
Ledger
Open rows: 7 → 6 (net -1).
Goal time: 12h; actual worker time: 722m 34s; total run through validation: 726m 21s.
Runner validation: build pass, tests pass; Humans.Integration.Tests excluded.