From 6ac65c376eabb5b47657f94c8cec131798106fa6 Mon Sep 17 00:00:00 2001 From: Tom Softreck Date: Thu, 29 Oct 2026 19:36:10 +0100 Subject: [PATCH] test: decouple radar success fixtures from startup timing (ticket-259) --- project/TICKETS.md | 1 + project/ticket-259/README.md | 22 +++++++++ project/ticket-259/intent.json | 81 ++++++++++++++++++++++++++++++++++ tests/test_ticket_radar.py | 6 +++ 4 files changed, 110 insertions(+) create mode 100644 project/ticket-259/README.md create mode 100644 project/ticket-259/intent.json diff --git a/project/TICKETS.md b/project/TICKETS.md index 5fe9f795..7e5f668d 100644 --- a/project/TICKETS.md +++ b/project/TICKETS.md @@ -159,4 +159,5 @@ This file indexes governance tickets without taking ownership of | **ticket-254** | [`README.md`](./ticket-254/README.md) | - | - | - | - | - | | **ticket-256** | [`README.md`](./ticket-256/README.md) | - | - | - | - | - | | **ticket-257** | [`README.md`](./ticket-257/README.md) | - | - | - | - | - | +| **ticket-259** | [`README.md`](./ticket-259/README.md) | - | - | - | - | - | diff --git a/project/ticket-259/README.md b/project/ticket-259/README.md new file mode 100644 index 00000000..3375d12b --- /dev/null +++ b/project/ticket-259/README.md @@ -0,0 +1,22 @@ +# Ticket 259: Bound success-fixture patience independently of radar timeout policy + +- **ID**: ticket-259 +- **Owner**: agent:codex +- **Status**: IN_PROGRESS +- **Workflow state**: PUBLICATION +- **Created**: 2026-10-29 + +## Goal and scope + +SESSION_EXECUTION_AUTHORIZATION: continue autonomous repair, tests and independent publication. This is the bounded CI dependency of native258 / PR319 / Planfile316 / parentPLF-20347. Preserve the frozen dependent source and the foreign governance checkout255. + +Protected Python3.10 verification of head14409c0/base6b3ec5f failed2 existing creation-advisory cases while1937 passed and12 skipped. Hosted3.10/3.13 succeeded. The fake child failed to return within production's1s deadline under host load. Prior257 addressed another instance of this scheduler-sensitive test pattern. + +Give non-deadline success fixtures generous but finite assessment and bulk budgets. Explicit malformed-output, stalled-input, descendant-cleanup and bulk-deadline tests retain their short overrides and assertions. Change no production source or protected check. + +## Acceptance criteria + +- [x] AC-01: All radar contracts pass, including explicit timeout/cleanup/bulk deadline tests; success semantics no longer depend on1s subprocess startup. +- [ ] AC-02: Governance and exact-head/current-base protected CI pass, independent publication is read back, and frozen dependent PR319 is reconciled on the new base. + +Local validation: all80 radar contracts passed through Testless with outcome accounting and targeted coverage at load average above130. Ruff and the managed session-start gate passed. Protected matrix publication remains pending. diff --git a/project/ticket-259/intent.json b/project/ticket-259/intent.json new file mode 100644 index 00000000..d5d72a6e --- /dev/null +++ b/project/ticket-259/intent.json @@ -0,0 +1,81 @@ +{ + "schema": "new-project.intent/v3", + "ticket": "ticket-259", + "summary": "Bound success-fixture patience independently of radar timeout policy", + "workstream": "application", + "classification": { + "kind": "BUG", + "priority": "P1", + "origin": "regression" + }, + "allowedPaths": [ + "project/ticket-259/**", + "TODO.md", + "project/TICKETS.md", + "tests/test_ticket_radar.py" + ], + "forbiddenPaths": [ + "project/ticket-*/user-*.md" + ], + "stacks": [ + "python" + ], + "dependsOn": [], + "conflictsWith": [], + "integrationTicket": null, + "delivery": { + "acceptedBaseSha": "6b3ec5f54e1945d5d7f6695ab3cea33db4fe7180", + "targetBranch": "main", + "outcome": "Success fixtures for advisory persistence use a generous bounded test budget so host scheduling does not decide semantic assertions; explicit timeout, process cleanup and bulk deadline cases retain their own short budgets. Production1s/5s policy remains unchanged.", + "nonGoals": [ + "No production timeout or transport change, skipped tests, check waivers or source258 edits.", + "This is a technical CI dependency of existing Planfile316 / native258 PR319." + ], + "complexity": "S", + "estimatedMinutes": 30, + "budgets": { + "maxImplementationFiles": 1, + "maxAffectedComponents": 1, + "maxPublicInterfaceChanges": 0, + "maxRuntimeDependencies": 0 + }, + "architecture": { + "status": "accepted", + "decision": "Adjust only the shared fake-radar fixture defaults; contract tests that target timing continue to override both constants explicitly. Verify under current loaded host and protected matrix.", + "components": [ + { + "name": "radar-contract-fixtures", + "paths": [ + "tests/test_ticket_radar.py" + ] + } + ], + "responsibilityChanges": false, + "interfaceChanges": [], + "dataChanges": [], + "ui": { + "impact": "none", + "states": [], + "evidence": [] + }, + "rollback": "Revert this isolated test-only slice through protected publication." + }, + "runtimeDependencies": [], + "validation": [ + { + "criterion": "AC-01", + "commands": [ + "python -m pytest -q tests/test_ticket_radar.py" + ], + "evidence": "All success/failure/authority fixtures pass without altering production budgets or dropping deadline assertions." + }, + { + "criterion": "AC-02", + "commands": [ + "./project/governance-check.sh" + ], + "evidence": "Native governance, protected exact-head/current-base matrix and independent publication; rerun frozen dependent319 after this base change." + } + ] + } +} diff --git a/tests/test_ticket_radar.py b/tests/test_ticket_radar.py index 32a8a460..c6c3bd61 100644 --- a/tests/test_ticket_radar.py +++ b/tests/test_ticket_radar.py @@ -42,6 +42,12 @@ @pytest.fixture(autouse=True) def fake_radar(tmp_path, monkeypatch): """Never invoke a developer's installed radar in these tests.""" + # Success contracts test persistence and validation, not interpreter startup + # speed under a loaded CI host. Keep their finite fixture budgets separate + # from production's 1s/5s policy. Timing/cleanup tests below explicitly set + # their own short assessment and bulk deadlines. + monkeypatch.setattr(radar, "ASSESSMENT_SECONDS", 10.0) + monkeypatch.setattr(radar, "BULK_SECONDS", 20.0) executable_dir = tmp_path / "bin" executable_dir.mkdir() monkeypatch.setenv("PATH", str(executable_dir))