You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 4de49a3
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: specs/tasks/M14-v3-release-repairs/TASK-199.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -22,7 +22,7 @@
22
22
23
23
**Dependencies:**
24
24
- Blocked by: TASK-198
25
-
- Blocks: TASK-185
25
+
- Blocks: TASK-200, TASK-185
26
26
**Related Requirements:** PRD-V3N-REQ-001 through PRD-V3N-REQ-038 as applicable to the complete public-capability inventory; TASK-185 native-throughput-latency inventory.
27
27
**Related Decisions:** DR-V3-001 through DR-V3-008; architecture §5 packaging and validation.
### TASK-200: Repair intermittent timer and executor teardown race
2
+
3
+
**Milestone:** M14 - v3 local release readiness repairs
4
+
**Component:** Concurrency timer ownership and executor teardown
5
+
**Estimate:** M
6
+
**Branch policy:** Current `v3` → isolated task branch → validated merge into `v3` → cleanup.
7
+
**Goal:** Resolve the observed `task_race` TSan teardown failure before the final packaged local inventory.
8
+
9
+
**Workflow:** Follow `../v3-release-repair-workflow.md`; use the Groundwork identity helper, branch from `v3`, systematic debugging, verified RED/GREEN, validation and finalization. Preserve historical receipts and unrelated worktrees.
10
+
11
+
**Action Items:**
12
+
-[ ] Read TASK-187's unresolved extra finding and immutable receipts at `build/task187-evidence/implementation-ad76a561/build/task187-implementation/tsan-off/extra-task-race-failure.log`, `focused-check.log`, and `base-task-race-identities.json`. The observed failure is `pthread_cond_destroy` versus timer-thread `manual_executor::post`, exit 66; a single equivalent unchanged base comparison passed. Treat this as unresolved intermittent behavior, not a proven production or fixture cause.
13
+
-[ ] Identify the timer, callback, task frame and executor lifetime boundary using bounded deterministic interleaving. Add a regression that fails for the demonstrated cause and cleans up all threads/owners even on failure. Do not replace a failing diagnostic with retries, sleeps, longer deadlines or a new suppression.
14
+
-[ ] Repair the proven production or fixture ownership boundary while preserving executor borrowing, cancellation, one-shot delivery and timer cleanup contracts. Use the smallest causal change; inspect public/API implications before changing a contract.
15
+
-[ ] Execute affected task/timer/resume/cancellation suites under normal, ASan/nonrecovering UBSan and TSan in TLS-off/on, with leak/stack checks and existing suppressions unchanged. Run relevant installed consumers and record assertion counts, RED/GREEN receipts and ownership conclusions.
16
+
17
+
**Acceptance Criteria:**
18
+
- A meaningful deterministic regression demonstrates and closes the observed race with exactly-once outcomes and safe executor/timer teardown.
19
+
- Required affected local sanitizer lanes and public consumers pass; no required check is waived and no race suppression is added.
20
+
- Groundwork validation passes, evidence and tracking are updated, and the task is merged/cleaned before TASK-185 resumes.
Copy file name to clipboardExpand all lines: specs/tasks/_index.md
+6-5Lines changed: 6 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,11 +9,11 @@
9
9
10
10
## v3.0 plan
11
11
12
-
104 tasks, TASK-096–TASK-199, across M8–M14. The 14 M14 repairs implement the 2026-10-10 instruction to fix all remaining local release failures and missing public capabilities; TASK-185 runs after those dependencies. See the [repair roadmap](v3-release-repair-roadmap.md). M1–M7 and TASK-001–TASK-095 remain the v2 plan. Current task states appear in the status table and task cards. Estimates are S ≈ 1 day, M ≈ 2 days, L ≈ 3 days of focused implementation and tests; interoperability work may take longer.
12
+
105 tasks, TASK-096–TASK-200, across M8–M14. The 15 M14 repairs implement the 2026-10-10 instruction to fix all remaining local release failures and missing public capabilities; TASK-185 runs after those dependencies. See the [repair roadmap](v3-release-repair-roadmap.md). M1–M7 and TASK-001–TASK-095 remain the v2 plan. Current task states appear in the status table and task cards. Estimates are S ≈ 1 day, M ≈ 2 days, L ≈ 3 days of focused implementation and tests; interoperability work may take longer.
13
13
14
14
### v3 integration branch
15
15
16
-
The base and integration branch for every TASK-096–TASK-199 is **`v3`**. Before executing a task, confirm that `v3` exists, contains the approved v3 specs and task files, and is the checked-out base branch. Create the task's branch and worktree from `v3`; validate and merge the completed task back into `v3`. If a Groundwork workflow reports another `base_branch`, stop before implementation or merge and correct the branch context. Integration of `v3` into `main` is a separate release decision.
16
+
The base and integration branch for every TASK-096–TASK-200 is **`v3`**. Before executing a task, confirm that `v3` exists, contains the approved v3 specs and task files, and is the checked-out base branch. Create the task's branch and worktree from `v3`; validate and merge the completed task back into `v3`. If a Groundwork workflow reports another `base_branch`, stop before implementation or merge and correct the branch context. Integration of `v3` into `main` is a separate release decision.
17
17
18
18
### v3 milestones
19
19
@@ -25,7 +25,7 @@ The base and integration branch for every TASK-096–TASK-199 is **`v3`**. Befor
25
25
|[M11: First HTTP/3 slice](M11-http3-first-slice/)| Owned QUIC v1 and static-QPACK HTTP/3 serve bounded GET/POST through the shared exchange. | 15 |
26
26
|[M12: Full HTTP/3](M12-http3-full/)| QUIC recovery and migration, dynamic QPACK, H3 drain, and WebSockets over H3 pass independent-client gates. | 15 |
27
27
|[M13: v3.0 release](M13-v3-release/)| Parity, cross-platform packages, resource limits, documentation, and all protocol/security release gates pass. | 7 |
28
-
|[M14: v3 local release readiness repairs](M14-v3-release-repairs/)| Complete public TLS/H2/H3 and credential integration, repair local failures, and supply native benchmarks before the final release gate. |14|
28
+
|[M14: v3 local release readiness repairs](M14-v3-release-repairs/)| Complete public TLS/H2/H3 and credential integration, repair local failures, and supply native benchmarks before the final release gate. |15|
| TASK-188 |[Eliminate peer-policy mutation starvation](M14-v3-release-repairs/TASK-188.md)| M14 | Not Started | TASK-187 |
@@ -347,6 +347,7 @@ Nominally: **13 sequential tasks**, each S–XL. Most other tasks parallelize of
347
347
| TASK-197 |[Complete public HTTP/3 lifecycle, policy and WebSocket parity](M14-v3-release-repairs/TASK-197.md)| M14 | Not Started | TASK-194, TASK-196 |
348
348
| TASK-198 |[Provide native public throughput and latency benchmarks](M14-v3-release-repairs/TASK-198.md)| M14 | Not Started | TASK-195, TASK-197 |
349
349
| TASK-199 |[Deliver packaged public-capability and benchmark adapters for release execution](M14-v3-release-repairs/TASK-199.md)| M14 | Not Started | TASK-198 |
350
+
| TASK-200 |[Repair intermittent timer and executor teardown race](M14-v3-release-repairs/TASK-200.md)| M14 | Not Started | TASK-199 |
| 16 | TASK-185 resumed | Bind new witnesses, one fresh complete packaged local inventory, validation and finalization |
24
25
25
-
Task cards are in `M14-v3-release-repairs/TASK-186.md` through `M14-v3-release-repairs/TASK-199.md`; shared Groundwork/TDD/validation/merge contract is `v3-release-repair-workflow.md`; bounded integration design/doubts are `v3-release-integration-design.md`. Copy these into the chosen repository task/spec locations with references adjusted before runner activation. Add a M14 index, update the global task index, and make primary TASK-185 depend on TASK-186..199 (or TASK-199 plus the cards' complete transitive chain). Use standard standalone `- Blocked by:` and `- Blocks:` lines so runner catalog parsing resolves the order. Root owns final TASK-185 plan/addendum and runner recovery changes.
26
+
Task cards are in `M14-v3-release-repairs/TASK-186.md` through `M14-v3-release-repairs/TASK-200.md`; shared Groundwork/TDD/validation/merge contract is `v3-release-repair-workflow.md`; bounded integration design/doubts are `v3-release-integration-design.md`. Copy these into the chosen repository task/spec locations with references adjusted before runner activation. Add a M14 index, update the global task index, and make primary TASK-185 depend on TASK-186..200 (or TASK-200 plus the cards' complete transitive chain). Use standard standalone `- Blocked by:` and `- Blocks:` lines so runner catalog parsing resolves the order. Root owns final TASK-185 plan/addendum and runner recovery changes.
26
27
27
28
## Retained failures and closure mapping
28
29
@@ -45,12 +46,16 @@ The unchanged 509-SLOC poll-backend baseline finding is not independently expand
45
46
## TASK-185 resume addendum and safe base integration
46
47
47
48
1. Before activation, snapshot/hash the existing185 dirty diff, untracked source/evidence inventory and validation coordinator ledger using the runner's supported recovery mechanism. Preserve the old plan and append/replace it with a dated authorized addendum. Do not delete receipts, rewrite historic statuses/hashes, mark acceptance complete or reset the branch.
48
-
2. Update dependencies/task plan in the selected catalog and inspect runner dry-run for TASK-185..TASK-199: all new tasks must run before185. Its parser reads selected worktree cards; ensure copied cards/index and selected root are consistent. No runner may concurrently edit primary docs while the root is changing the catalog.
49
-
3.After199 merges/cleans, resolve185 via worktree helper and inspect identity/status/runner phase. Old phase/checkpoint evidence cannot imply completion against changed scope/source. Invalidate only stale implementation/validation checkpoints via supported recovery, preserving historical findings and causal evidence. Treat changed source/archive inputs as requiring new affected reviews and final checks.
49
+
2. Update dependencies/task plan in the selected catalog and inspect runner dry-run for TASK-185..TASK-200: all new tasks must run before185. Its parser reads selected worktree cards; ensure copied cards/index and selected root are consistent. No runner may concurrently edit primary docs while the root is changing the catalog.
50
+
3.After200 merges/cleans, resolve185 via worktree helper and inspect identity/status/runner phase. Old phase/checkpoint evidence cannot imply completion against changed scope/source. Invalidate only stale implementation/validation checkpoints via supported recovery, preserving historical findings and causal evidence. Treat changed source/archive inputs as requiring new affected reviews and final checks.
50
51
4. Integrate updated `v3` into the preserved185 task branch using an explicit reviewed merge after protecting dirty repairs (commit/checkpoint task-owned repair source, or supported reversible save/apply); do not force reset/recreate/drop the worktree. Resolve conflicts preserving source/data/runner repairs and new dependencies. Verify185 still has `base_branch=v3` and the final candidate includes every dependency commit. Old artifact identities remain historical, never relabeled as new source.
51
52
5. Expand185 implementation plan to replace `v3_release_execution.py`'s hardcoded `blocked()` lambdas for `public-capabilities` and `native-throughput-latency` with the real installed public and benchmark adapters delivered by199 from193..198. Bind all executable/client/library/header/configuration/receipt provenance. Finish any installed matrix/consumer/TLS example expectation changes now necessary. Negative contracts must reject private-fixture success, wrong installed library, missing scenarios, fake benchmark samples and stale archive identities; add RED/GREEN tests before adapter changes.
52
53
6. Reuse immutable stage evidence retention, pending-platform positive control and corrected native output adapters. Run focused changed contracts and package registration first; preserve all 18 mandatory stages and existing scenario requirements, fuzz bounds, slow-peer thresholds and allowed named exclusions. No missing capability is waived or accepted by exit-zero alone.
53
54
7. Create one fresh distribution/extracted-source identity after integration and run the entire packaged TLS-off/on shared/static managed/external inventory, normal/ASan/UBSan/TSan, independent H1/H2/H3/WS, TLS, parity, resource, native benchmarks and fuzz with pinned tools/provider. All required local gates must pass on that one artifact; supplements from different archives cannot combine into completion. Record failed attempts intact and repair exact causes with TDD if fresh failures remain.
54
55
8. Reconcile current docs/card/index, close only evidence-backed validation findings, run applicable Groundwork validation and finalize185 into `v3` only after complete local acceptance. Nonlocal BSD/macOS/Windows/backend receipts remain CI/v3-PR work, and full tag readiness remains false until they arrive. No tag/push/publication/deploy is performed.
55
56
56
57
Native benchmark policy: the v3 PRD contains no absolute throughput or percentile target. TASK198 therefore requires reproducible successful measurements and existing resource thresholds, with no invented speed bar or revival of historical v2 numeric microbench claims. Any future performance regression policy needs an explicitly documented comparable baseline/threshold.
58
+
59
+
## Additional observed failure (2026-10-10)
60
+
61
+
TASK-187 affected checks and eight-domain validation pass. Its extra unchanged task_race TSan target reported an intermittent timer/manual_executor teardown race; one equivalent base comparison passed. TASK-200 owns causal diagnosis and repair after199 and before185. The original failing receipt is retained in the immutable TASK-187 archive; the passing comparison does not close it. TASK-186 also established usable local sanitizer execution outside ptrace with leak/stack checking enabled; use that execution route instead of treating the old ptrace limitation as a waiver.
0 commit comments