Spec: Background jobs: release a stopped job's hold
Merged PR in mattpolicastro/nightshift: "Spec: Background jobs: release a stopped job's hold"
View pull requestNotes on work, tech, and life.
Spec: Background jobs: release a stopped job's hold
Merged PR in mattpolicastro/nightshift: "Spec: Background jobs: release a stopped job's hold"
View pull requestspecloop: archive mattpolicastro__nightshift-issue-34-background-jobs-release-a-stopped-job-s into openspec/specs
Pushed 842 commits to mattpolicastro/nightshift • Merge pull request #86 from mattpolicastro/spec/nightshift-issue-72-providers-fall-back-to-the-next-profile • Merge branch 'main' into spec/nightshift-issue-72-providers-fall-back-to-the-next-profile • specloop: archive nightshift-issue-72-providers-fall-back-to-the-next-profile into openspec/specs • Merge current PR base 280d18e44905de121d146f2e9d1d6774d769b95e • specloop: complete task 5.1 • specloop: task 5.1 Make the harness's verification pass on the branch head: (details: tests: expected exit 0, got 2 (FAIL, 195.33s)) • specloop: append acceptance fixes tasks • Merge current PR base 182a48d0ae6cbb1d355d1dc66e67a6d53e8529aa • specloop: complete task 4.1 • specloop: task 4.1 Replace only the existing `**Usage limits**` paragraph in `docs/specloop/README.md` with the behavior specified by this change; preserve concurrent #76 edits everywhere else. Add na • specloop: complete task 3.1 • specloop: task 3.1 Add unavailable diagnostic classification to `specloop/agents/codex.py` and `specloop/agents/claude.py`, preserving both `USAGE` expressions, their priority, and all invocation/sand • specloop: complete task 2.3 • specloop: task 2.3 Add scripted driver-continuation tests in new `tests/test_provider_fallback_continuation.py`, with any necessary bounded fixes confined to `specloop/loop.py`. Exercise implementatio • specloop: complete task 2.2 • specloop: task 2.2 Complete cooldown expiry and single-profile manual-resume compatibility in `specloop/loop.py` without modifying state, CLI or supervisor modules. Add new `tests/test_provider_cooldo • specloop: complete task 2.1 • specloop: task 2.1 Update `specloop/loop.py:_infra`, `_pick` and `_all_exhausted` together to persist 900-second unavailable deadlines, record diagnostic events, send fallback FYIs, and pause only whe • specloop: authorize task 2.1 to update the interim tests task 1.1 added (they predate the fallback) • specloop: complete task 1.2 • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.1 • specloop: task 1.1 In `specloop/loop.py`, introduce loop-local event-backed task/profile retry accounting, preserve the legacy `ts.infra` display/pause scalar and reset semantics, and add focused rest • Draft OpenSpec change nightshift-issue-72-providers-fall-back-to-the-next-profile (specloop propose, round 1) • Merge branch 'main' into spec/nightshift-issue-93-land-run-specloop-via-its-interpreter-re • Merge pull request #88 from mattpolicastro/spec/nightshift-issue-13-config-resilience-a-bad-specloop-manifes • specloop: archive nightshift-issue-13-config-resilience-a-bad-specloop-manifes into openspec/specs • Merge current PR base 182a48d0ae6cbb1d355d1dc66e67a6d53e8529aa • specloop: complete task 2.4 • specloop: task 2.4 Update only the affected enrollment/recovery/naming/limitations passages in `README.md`, `docs/specloop/README.md` and `KNOWN-LIMITATIONS.md` on top of #67. Explain all three behavi • specloop: complete task 2.3 • specloop: task 2.3 Preserve active recorded identities and add exact qualified/legacy PR lookup in `nightshift/specloop_intake.py`. Cover title edits, lost receipts, lookup failures, closed/merged PR • specloop: complete task 2.2 • specloop: task 2.2 Centralize owner-qualified generation and the unchanged branch predicate in `nightshift/specloop_intake.py`; integrate unsupported-name failures into readiness for new work. Add `te • specloop: complete task 2.1 • specloop: task 2.1 Extend only the missing-proposal identity fallback in `nightshift/touchpoints.py::collect_history` to accept exact owner-qualified and legacy prefixes derived from the validated rec • specloop: complete task 1.4 • specloop: task 1.4 Finish poll/restart recovery of switch journals in `nightshift/daemon.py`, retaining them after working disappears, reconciling remote labels/marked comments and completing outcomes • specloop: complete task 1.3 • specloop: task 1.3 Add specloop-enrollment worker reconciliation in `nightshift/daemon.py` using existing queue read/label interfaces and an atomic recovery journal before remote mutations. Release or • specloop: complete task 1.2 • specloop: task 1.2 Wire readiness at new drafting/admission boundaries in `nightshift/specloop_intake.py` and `nightshift/daemon.py`, including spec-stage revision; preserve admitted-run publication/b • specloop: complete task 1.1 • specloop: task 1.1 Implement manifest readiness and repository health in `nightshift/config.py`, `nightshift/specloop_intake.py` and `nightshift/daemon.py`: defer artifact failures, preserve shape/pat • Draft OpenSpec change nightshift-issue-13-config-resilience-a-bad-specloop-manifes (specloop propose, round 3) • Draft OpenSpec change nightshift-issue-13-config-resilience-a-bad-specloop-manifes (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-13-config-resilience-a-bad-specloop-manifes (specloop propose, round 1) • specloop: archive nightshift-issue-13-config-resilience-a-bad-specloop-manifes into openspec/specs • Merge branch 'main' into spec/nightshift-issue-89-land-treat-no-checks-reported-yet-after • Merge pull request #92 from mattpolicastro/fix/in-flight-hands-off • Merge branch 'main' into fix/in-flight-hands-off • Merge pull request #81 from mattpolicastro/spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f • Merge branch 'main' into spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f • specloop: archive nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f into openspec/specs • Merge pull request #84 from mattpolicastro/spec/nightshift-issue-74-build-timing-report-where-build-time-goe • Merge branch 'main' into spec/nightshift-issue-74-build-timing-report-where-build-time-goe • specloop: archive nightshift-issue-74-build-timing-report-where-build-time-goe into openspec/specs • propose: hands-off clauses in other runs' tasks are not planned edits • Merge current PR base 28719715027df11f6ac700eb23c81fbd95d2898b • Merge current PR base 27672f3f6d35b8f479acb431cc03c54f3820ef92 • specloop: complete task 4.1 • specloop: task 4.1 Address review feedback 1: "**mattpolicastro:**\n\nSmoke test of `python -m nightshift.arm --check` against the real armed queue. It found genuine overlaps (#34 with #47 and #52, #9 • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b • specloop: complete task 3.1 • specloop: task 3.1 Insert only the short build-timing subsection beside the touchpoint paragraph in `README.md`, preserving existing content and concurrent arming guidance; budget about 20 lines. Hono • specloop: complete task 2.2 • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.1 • specloop: task 2.1 Extend `nightshift/timings.py` with whole-run filters, `render_table`, `main` and the module guard, using one report dictionary for the single text table and JSON. Add `test_since_a • specloop: complete task 1.2 • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.1 • specloop: task 1.1 Add the simple reader and `collect_report` aggregation in new `nightshift/timings.py`, plus temporary-log fixtures and `test_phase_durations_from_event_pairs`, `test_per_change_buil • specloop: append review round 1 • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 2) • Merge current PR base cde086dc7c74e6449e3430924e5013f97ce26220 • specloop: complete task 3.3 • specloop: task 3.3 Create `docs/arming.md` with the issue template, named-test examples, discouraged wording replacements, dependency/overlap guidance, module invocation, mode and exit matrix, prerequ • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 1) • specloop: complete task 3.2 • specloop: task 3.2 Complete existing-label handling, uncertain-write reconciliation, target failure isolation, and aggregate batch outcomes in `nightshift/arm.py`; add corresponding main-boundary test • specloop: complete task 3.1 • specloop: task 3.1 Add argument parsing, checkout/repository resolution, deterministic reporting, main/module entry point, and basic mode-controlled label application in `nightshift/arm.py`; add `test • specloop: complete task 2.4 • specloop: task 2.4 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.3 • specloop: task 2.3 Add cached cycle-safe dependency reachability, combined overlap findings, and pre-write batch candidate comparison in `nightshift/arm.py`; extend `tests/test_arm.py` with `test_arm_ • specloop: complete task 2.2 • specloop: task 2.2 Add the `critic.open_pr_files` adapter and paginated PR metadata join in `nightshift/arm.py`; extend `tests/test_arm.py` to exercise all three context sources, renames, pagination, • specloop: complete task 2.1 • specloop: task 2.1 Add paginated armed-issue collection, Scope extraction via `propose.paths`, in-flight collection via `propose.in_flight`, front-door run identity, and self exclusion to `nightshift/ • specloop: complete task 1.3 • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.2 • specloop: task 1.2 Add the bounded injectable GitHub issue reader, issue cache, and direct blocker completion lint to `nightshift/arm.py`, importing `queue.blockers` without editing its owner; add sta • specloop: complete task 1.1 • specloop: task 1.1 Create the section parser, finding representation, and pure wording lint in `nightshift/arm.py`; create fixture-driven `tests/test_arm.py` with `test_arm_flags_missing_sections`, `t • Draft OpenSpec change nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f (specloop propose, round 1) • Merge pull request #92 from mattpolicastro/fix/in-flight-hands-off • Merge branch 'main' into fix/in-flight-hands-off • propose: hands-off clauses in other runs' tasks are not planned edits • Merge branch 'main' into fix/in-flight-hands-off • Merge pull request #81 from mattpolicastro/spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f • Merge branch 'main' into spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f • specloop: archive nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f into openspec/specs • Merge pull request #84 from mattpolicastro/spec/nightshift-issue-74-build-timing-report-where-build-time-goe • Merge branch 'main' into spec/nightshift-issue-74-build-timing-report-where-build-time-goe • specloop: archive nightshift-issue-74-build-timing-report-where-build-time-goe into openspec/specs • Merge current PR base 28719715027df11f6ac700eb23c81fbd95d2898b • Merge current PR base 27672f3f6d35b8f479acb431cc03c54f3820ef92 • specloop: complete task 4.1 • specloop: task 4.1 Address review feedback 1: "**mattpolicastro:**\n\nSmoke test of `python -m nightshift.arm --check` against the real armed queue. It found genuine overlaps (#34 with #47 and #52, #9 • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b • specloop: complete task 3.1 • specloop: task 3.1 Insert only the short build-timing subsection beside the touchpoint paragraph in `README.md`, preserving existing content and concurrent arming guidance; budget about 20 lines. Hono • specloop: complete task 2.2 • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.1 • specloop: task 2.1 Extend `nightshift/timings.py` with whole-run filters, `render_table`, `main` and the module guard, using one report dictionary for the single text table and JSON. Add `test_since_a • specloop: complete task 1.2 • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.1 • specloop: task 1.1 Add the simple reader and `collect_report` aggregation in new `nightshift/timings.py`, plus temporary-log fixtures and `test_phase_durations_from_event_pairs`, `test_per_change_buil • specloop: append review round 1 • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 2) • Merge current PR base cde086dc7c74e6449e3430924e5013f97ce26220 • specloop: complete task 3.3 • specloop: task 3.3 Create `docs/arming.md` with the issue template, named-test examples, discouraged wording replacements, dependency/overlap guidance, module invocation, mode and exit matrix, prerequ • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 1) • specloop: complete task 3.2 • specloop: task 3.2 Complete existing-label handling, uncertain-write reconciliation, target failure isolation, and aggregate batch outcomes in `nightshift/arm.py`; add corresponding main-boundary test • specloop: complete task 3.1 • specloop: task 3.1 Add argument parsing, checkout/repository resolution, deterministic reporting, main/module entry point, and basic mode-controlled label application in `nightshift/arm.py`; add `test • specloop: complete task 2.4 • specloop: task 2.4 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.3 • specloop: task 2.3 Add cached cycle-safe dependency reachability, combined overlap findings, and pre-write batch candidate comparison in `nightshift/arm.py`; extend `tests/test_arm.py` with `test_arm_ • specloop: complete task 2.2 • specloop: task 2.2 Add the `critic.open_pr_files` adapter and paginated PR metadata join in `nightshift/arm.py`; extend `tests/test_arm.py` to exercise all three context sources, renames, pagination, • specloop: complete task 2.1 • specloop: task 2.1 Add paginated armed-issue collection, Scope extraction via `propose.paths`, in-flight collection via `propose.in_flight`, front-door run identity, and self exclusion to `nightshift/ • specloop: complete task 1.3 • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.2 • specloop: task 1.2 Add the bounded injectable GitHub issue reader, issue cache, and direct blocker completion lint to `nightshift/arm.py`, importing `queue.blockers` without editing its owner; add sta • specloop: complete task 1.1 • specloop: task 1.1 Create the section parser, finding representation, and pure wording lint in `nightshift/arm.py`; create fixture-driven `tests/test_arm.py` with `test_arm_flags_missing_sections`, `t • Draft OpenSpec change nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f (specloop propose, round 1) • Merge pull request #81 from mattpolicastro/spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f • Merge branch 'main' into spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f • specloop: archive nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f into openspec/specs • Merge current PR base 28719715027df11f6ac700eb23c81fbd95d2898b • Merge current PR base 27672f3f6d35b8f479acb431cc03c54f3820ef92 • specloop: complete task 4.1 • specloop: task 4.1 Address review feedback 1: "**mattpolicastro:**\n\nSmoke test of `python -m nightshift.arm --check` against the real armed queue. It found genuine overlaps (#34 with #47 and #52, #9 • specloop: append review round 1 • Merge current PR base cde086dc7c74e6449e3430924e5013f97ce26220 • specloop: complete task 3.3 • specloop: task 3.3 Create `docs/arming.md` with the issue template, named-test examples, discouraged wording replacements, dependency/overlap guidance, module invocation, mode and exit matrix, prerequ • specloop: complete task 3.2 • specloop: task 3.2 Complete existing-label handling, uncertain-write reconciliation, target failure isolation, and aggregate batch outcomes in `nightshift/arm.py`; add corresponding main-boundary test • specloop: complete task 3.1 • specloop: task 3.1 Add argument parsing, checkout/repository resolution, deterministic reporting, main/module entry point, and basic mode-controlled label application in `nightshift/arm.py`; add `test • specloop: complete task 2.4 • specloop: task 2.4 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.3 • specloop: task 2.3 Add cached cycle-safe dependency reachability, combined overlap findings, and pre-write batch candidate comparison in `nightshift/arm.py`; extend `tests/test_arm.py` with `test_arm_ • specloop: complete task 2.2 • specloop: task 2.2 Add the `critic.open_pr_files` adapter and paginated PR metadata join in `nightshift/arm.py`; extend `tests/test_arm.py` to exercise all three context sources, renames, pagination, • specloop: complete task 2.1 • specloop: task 2.1 Add paginated armed-issue collection, Scope extraction via `propose.paths`, in-flight collection via `propose.in_flight`, front-door run identity, and self exclusion to `nightshift/ • specloop: complete task 1.3 • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.2 • specloop: task 1.2 Add the bounded injectable GitHub issue reader, issue cache, and direct blocker completion lint to `nightshift/arm.py`, importing `queue.blockers` without editing its owner; add sta • specloop: complete task 1.1 • specloop: task 1.1 Create the section parser, finding representation, and pure wording lint in `nightshift/arm.py`; create fixture-driven `tests/test_arm.py` with `test_arm_flags_missing_sections`, `t • Draft OpenSpec change nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f (specloop propose, round 1) • Merge branch 'main' into spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f • Merge pull request #84 from mattpolicastro/spec/nightshift-issue-74-build-timing-report-where-build-time-goe • Merge branch 'main' into spec/nightshift-issue-74-build-timing-report-where-build-time-goe • specloop: archive nightshift-issue-74-build-timing-report-where-build-time-goe into openspec/specs • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b • specloop: complete task 3.1 • specloop: task 3.1 Insert only the short build-timing subsection beside the touchpoint paragraph in `README.md`, preserving existing content and concurrent arming guidance; budget about 20 lines. Hono • specloop: complete task 2.2 • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.1 • specloop: task 2.1 Extend `nightshift/timings.py` with whole-run filters, `render_table`, `main` and the module guard, using one report dictionary for the single text table and JSON. Add `test_since_a • specloop: complete task 1.2 • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.1 • specloop: task 1.1 Add the simple reader and `collect_report` aggregation in new `nightshift/timings.py`, plus temporary-log fixtures and `test_phase_durations_from_event_pairs`, `test_per_change_buil • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 1) • specloop: archive nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f into openspec/specs • Merge pull request #84 from mattpolicastro/spec/nightshift-issue-74-build-timing-report-where-build-time-goe • Merge branch 'main' into spec/nightshift-issue-74-build-timing-report-where-build-time-goe • specloop: archive nightshift-issue-74-build-timing-report-where-build-time-goe into openspec/specs • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b • specloop: complete task 3.1 • specloop: task 3.1 Insert only the short build-timing subsection beside the touchpoint paragraph in `README.md`, preserving existing content and concurrent arming guidance; budget about 20 lines. Hono • specloop: complete task 2.2 • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.1 • specloop: task 2.1 Extend `nightshift/timings.py` with whole-run filters, `render_table`, `main` and the module guard, using one report dictionary for the single text table and JSON. Add `test_since_a • specloop: complete task 1.2 • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.1 • specloop: task 1.1 Add the simple reader and `collect_report` aggregation in new `nightshift/timings.py`, plus temporary-log fixtures and `test_phase_durations_from_event_pairs`, `test_per_change_buil • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 1) • Merge branch 'main' into spec/nightshift-issue-74-build-timing-report-where-build-time-goe • Merge pull request #87 from mattpolicastro/spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow • Merge branch 'main' into spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow • Merge pull request #91 from mattpolicastro/fix/deploy-test-atime • tests: leave access time out of deploy's no-write snapshots • tests: run #73's fixture steps unwrapped outside specloop's sandbox • specloop: archive nightshift-issue-73-evidence-gates-route-mutants-to-their-ow into openspec/specs • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b • specloop: complete task 4.3 • specloop: task 4.3 Update only Section evidence in `docs/specloop/README.md` with route/placeholder syntax, mutation-only commands, per-sequence baselines, confirmation and timeout semantics, receipt • specloop: complete task 4.2 • specloop: task 4.2 Update `examples/specloop/self-hosting.toml` with its Python route and mutation-only selector command, preserving existing verification, negative-control and coverage commands. Add • specloop: complete task 4.1 • specloop: task 4.1 Add stdlib-only `examples/specloop/select_tests.py` with the function/CLI interface, AST import matching, package/relative-import handling, deterministic output and empty-output fal • specloop: complete task 3.3 • specloop: task 3.3 Complete route/phase lifecycle coverage in `tests/test_mutation_narrowing.py` and `tests/test_mutation_routes.py`, making only necessary execution-helper fixes in `specloop/evidence • specloop: complete task 3.2 • specloop: task 3.2 Add coordinator-owned `mutation-runs.json` receipts in `specloop/evidence.py` following the design's schema, preserving existing evidence and step receipt formats. Retain initial an • specloop: complete task 3.1 • specloop: task 3.1 Implement narrowed execution and full confirmation in `specloop/evidence.py:_mutate_one`, using copied manifests, the same mutated source, fresh confirmation preparation/builds and • specloop: complete task 2.3 • specloop: task 2.3 Isolate immutable per-sequence prepare/step budget derivation in `specloop/evidence.py`, retaining original full-baseline ceilings and the existing floor/factor/cap/fallback formula • specloop: complete task 2.2 • specloop: task 2.2 Integrate resolved routes into `specloop/evidence.py:mutate`: group by ordered step IDs, run used full baselines serially before workers, reuse identical sequences, assign each muta • specloop: complete task 2.1 • specloop: task 2.1 Add a pure route/step resolver in `specloop/evidence.py`, using case-sensitive fnmatch on relative POSIX paths, first-match precedence, route step order and legacy fallback declarat • specloop: complete task 1.3 • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.2 • specloop: task 1.2 Add frozen `MutationRoute`, default-empty `Manifest.mutation_routes`, and ordered route parsing/validation in `specloop/manifest.py:_gates`. Require a nonempty fallback when routes • specloop: complete task 1.1 • specloop: task 1.1 Add mutation-only `Step` parsing and `Manifest.mutation_step` in `specloop/manifest.py`, resolve fallback mutation IDs against both step namespaces, validate collisions, and supply • Draft OpenSpec change nightshift-issue-73-evidence-gates-route-mutants-to-their-ow (specloop propose, round 1) • Merge current PR base 28719715027df11f6ac700eb23c81fbd95d2898b • Merge pull request #87 from mattpolicastro/spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow • Merge current PR base 27672f3f6d35b8f479acb431cc03c54f3820ef92 • Merge branch 'main' into spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow • Merge pull request #91 from mattpolicastro/fix/deploy-test-atime • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b • tests: leave access time out of deploy's no-write snapshots • specloop: complete task 1.1 • specloop: task 1.1 Update `nightshift/land.py` with the exact registration-response predicate, pending classification, local wait-state tracking, and specific deadline refusal; preserve bracketing hea • tests: run #73's fixture steps unwrapped outside specloop's sandbox • specloop: archive nightshift-issue-73-evidence-gates-route-mutants-to-their-ow into openspec/specs • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b • specloop: complete task 4.3 • specloop: task 4.3 Update only Section evidence in `docs/specloop/README.md` with route/placeholder syntax, mutation-only commands, per-sequence baselines, confirmation and timeout semantics, receipt • specloop: complete task 4.2 • specloop: task 4.2 Update `examples/specloop/self-hosting.toml` with its Python route and mutation-only selector command, preserving existing verification, negative-control and coverage commands. Add • Merge pull request #82 from mattpolicastro/spec/nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me • specloop: complete task 4.1 • specloop: task 4.1 Add stdlib-only `examples/specloop/select_tests.py` with the function/CLI interface, AST import matching, package/relative-import handling, deterministic output and empty-output fal • specloop: archive nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me into openspec/specs • Merge current PR base eaa7e808503b51c407549bacded2e9a3ad806df7 • specloop: complete task 3.3 • specloop: complete task 6.1 • specloop: task 3.3 Complete route/phase lifecycle coverage in `tests/test_mutation_narrowing.py` and `tests/test_mutation_routes.py`, making only necessary execution-helper fixes in `specloop/evidence • specloop: task 6.1 Create only `docs/deploy.md` for invocation/no-sync/bootstrap, flags/defaults, exit codes, quiet-window responsibility, specloop-only background-job guard, marker and empty-reload s • specloop: complete task 3.2 • specloop: task 3.2 Add coordinator-owned `mutation-runs.json` receipts in `specloop/evidence.py` following the design's schema, preserving existing evidence and step receipt formats. Retain initial an • specloop: complete task 3.1 • specloop: task 3.1 Implement narrowed execution and full confirmation in `specloop/evidence.py:_mutate_one`, using copied manifests, the same mutated source, fresh confirmation preparation/builds and • specloop: complete task 5.1 • specloop: task 5.1 Wire all helpers into complete check/apply orchestration in `nightshift/deploy.py`, reporting independent check failures, refreshing each step, using post-pull HEAD, stopping later • specloop: complete task 2.3 • specloop: task 2.3 Isolate immutable per-sequence prepare/step budget derivation in `specloop/evidence.py`, retaining original full-baseline ceilings and the existing floor/factor/cap/fallback formula • specloop: complete task 4.2 • specloop: complete task 2.2 • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 4 after its evidence check • specloop: task 2.2 Integrate resolved routes into `specloop/evidence.py:mutate`: group by ordered step IDs, run used full baselines serially before workers, reuse identical sequences, assign each muta • specloop: complete task 2.1 • specloop: task 2.1 Add a pure route/step resolver in `specloop/evidence.py`, using case-sensitive fnmatch on relative POSIX paths, first-match precedence, route step order and legacy fallback declarat • specloop: complete task 4.1 • specloop: task 4.1 Add process-age probes and a shared bounded restart helper in `nightshift/deploy.py`, using existing heartbeat/status shapes, local job inventory, fresh activity guards, labels, for • specloop: complete task 1.3 • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.2 • specloop: task 1.2 Add frozen `MutationRoute`, default-empty `Manifest.mutation_routes`, and ordered route parsing/validation in `specloop/manifest.py:_gates`. Require a nonempty fallback when routes • specloop: complete task 1.1 • specloop: task 1.1 Add mutation-only `Step` parsing and `Manifest.mutation_step` in `specloop/manifest.py`, resolve fallback mutation IDs against both step namespaces, validate collisions, and supply • specloop: complete task 3.1 • specloop: task 3.1 Add presence-only pending reporting and reload handling in `nightshift/deploy.py`: default/override/empty command, reload whenever marked, remove only after success, and concrete sh • specloop: complete task 2.1 • specloop: task 2.1 Add committed manifest comparison, safe staging, the empty marker before renames, simple directory swap, and three-copy retention in `nightshift/deploy.py`. Add `test_check_reports_ • specloop: complete task 1.1 • specloop: task 1.1 Create `nightshift/deploy.py` with module entry point, flags/defaults, injectable runner/context, checkout discovery/fetch/refusal and conditional fast-forward, plus frozen environm • Draft OpenSpec change nightshift-issue-73-evidence-gates-route-mutants-to-their-ow (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1) • Merge pull request #87 from mattpolicastro/spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow • Merge branch 'main' into spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow • tests: run #73's fixture steps unwrapped outside specloop's sandbox • specloop: archive nightshift-issue-73-evidence-gates-route-mutants-to-their-ow into openspec/specs • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b • specloop: complete task 4.3 • specloop: task 4.3 Update only Section evidence in `docs/specloop/README.md` with route/placeholder syntax, mutation-only commands, per-sequence baselines, confirmation and timeout semantics, receipt • specloop: complete task 4.2 • specloop: task 4.2 Update `examples/specloop/self-hosting.toml` with its Python route and mutation-only selector command, preserving existing verification, negative-control and coverage commands. Add • specloop: complete task 4.1 • specloop: task 4.1 Add stdlib-only `examples/specloop/select_tests.py` with the function/CLI interface, AST import matching, package/relative-import handling, deterministic output and empty-output fal • specloop: complete task 3.3 • specloop: task 3.3 Complete route/phase lifecycle coverage in `tests/test_mutation_narrowing.py` and `tests/test_mutation_routes.py`, making only necessary execution-helper fixes in `specloop/evidence • specloop: complete task 3.2 • specloop: task 3.2 Add coordinator-owned `mutation-runs.json` receipts in `specloop/evidence.py` following the design's schema, preserving existing evidence and step receipt formats. Retain initial an • specloop: complete task 3.1 • specloop: task 3.1 Implement narrowed execution and full confirmation in `specloop/evidence.py:_mutate_one`, using copied manifests, the same mutated source, fresh confirmation preparation/builds and • specloop: complete task 2.3 • specloop: task 2.3 Isolate immutable per-sequence prepare/step budget derivation in `specloop/evidence.py`, retaining original full-baseline ceilings and the existing floor/factor/cap/fallback formula • specloop: complete task 2.2 • specloop: task 2.2 Integrate resolved routes into `specloop/evidence.py:mutate`: group by ordered step IDs, run used full baselines serially before workers, reuse identical sequences, assign each muta • specloop: complete task 2.1 • specloop: task 2.1 Add a pure route/step resolver in `specloop/evidence.py`, using case-sensitive fnmatch on relative POSIX paths, first-match precedence, route step order and legacy fallback declarat • specloop: complete task 1.3 • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.2 • specloop: task 1.2 Add frozen `MutationRoute`, default-empty `Manifest.mutation_routes`, and ordered route parsing/validation in `specloop/manifest.py:_gates`. Require a nonempty fallback when routes • specloop: complete task 1.1 • specloop: task 1.1 Add mutation-only `Step` parsing and `Manifest.mutation_step` in `specloop/manifest.py`, resolve fallback mutation IDs against both step namespaces, validate collisions, and supply • Draft OpenSpec change nightshift-issue-73-evidence-gates-route-mutants-to-their-ow (specloop propose, round 1) • Merge branch 'main' into spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow • Merge pull request #91 from mattpolicastro/fix/deploy-test-atime • tests: leave access time out of deploy's no-write snapshots • Merge pull request #91 from mattpolicastro/fix/deploy-test-atime • tests: leave access time out of deploy's no-write snapshots • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b • specloop: complete task 3.1 • specloop: task 3.1 Insert only the short build-timing subsection beside the touchpoint paragraph in `README.md`, preserving existing content and concurrent arming guidance; budget about 20 lines. Hono • specloop: complete task 2.2 • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.1 • specloop: task 2.1 Extend `nightshift/timings.py` with whole-run filters, `render_table`, `main` and the module guard, using one report dictionary for the single text table and JSON. Add `test_since_a • Merge pull request #82 from mattpolicastro/spec/nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me • specloop: archive nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me into openspec/specs • specloop: complete task 1.2 • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • Merge current PR base eaa7e808503b51c407549bacded2e9a3ad806df7 • specloop: complete task 6.1 • specloop: task 6.1 Create only `docs/deploy.md` for invocation/no-sync/bootstrap, flags/defaults, exit codes, quiet-window responsibility, specloop-only background-job guard, marker and empty-reload s • Merge pull request #83 from mattpolicastro/spec/nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel • specloop: complete task 1.1 • specloop: task 1.1 Add the simple reader and `collect_report` aggregation in new `nightshift/timings.py`, plus temporary-log fixtures and `test_phase_durations_from_event_pairs`, `test_per_change_buil • specloop: archive nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel into openspec/specs • Merge current PR base 42115e4016d85112f0b9b4ff507c9cce55081724 • specloop: complete task 5.1 • specloop: complete task 7.1 • specloop: task 5.1 Wire all helpers into complete check/apply orchestration in `nightshift/deploy.py`, reporting independent check failures, refreshing each step, using post-pull HEAD, stopping later • specloop: task 7.1 Write new `docs/landing.md` with command examples, flags, prerequisites, check sources, attestation marker semantics, single-invocation guidance, three-round/shared-timeout behavior • specloop: complete task 4.2 • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 4 after its evidence check • specloop: complete task 6.2 • specloop: task 6.2 Wire the guarded merge commit command, merged-state confirmation and useful success/refusal output. Add stable-base success, competing push, protection rejection, queued-but-open re • specloop: complete task 6.1 • specloop: complete task 4.1 • specloop: task 6.1 Add source/head/run revalidation before finish and before the final main read, refusing concurrent changes and newly added checks; add scripted tests that inject each change at both • specloop: task 4.1 Add process-age probes and a shared bounded restart helper in `nightshift/deploy.py`, using existing heartbeat/status shapes, local job inventory, fresh activity guards, labels, for • specloop: complete task 5.2 • specloop: task 5.2 Wire initial base-ancestry checking and the three-round controller, retaining the pre-update baseline during update observation and the same deadline across rounds. Add `test_land_u • Merge pull request #85 from mattpolicastro/spec/nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti • specloop: complete task 5.1 • specloop: task 5.1 Add the REST update helper with `expected_head_sha`, an immediate pre-update main read, asynchronous head observation and exact ordered two-parent validation. Add tests for REST arg • specloop: archive nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti into openspec/specs • specloop: complete task 4.2 • specloop: complete task 3.1 • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: task 3.1 Add presence-only pending reporting and reload handling in `nightshift/deploy.py`: default/override/empty command, reload whenever marked, remove only after success, and concrete sh • specloop: strengthen section 4 after its evidence check • specloop: complete task 4.1 • specloop: task 4.1 Add expected-head CI polling, JSON/exit-status classification and the injected shared deadline. Add `test_land_refuses_failing_ci` and pending-to-green, empty/all-skipped, cancellat • specloop: complete task 1.2 • specloop: task 1.2 Extend only checklist items 1 and 7 in `specloop/critic.py: PROMPT` with strictly-more-than-eight / docs-only-more-than-two advisory merge findings and blast-radius-scaled retry rem • specloop: complete task 2.1 • specloop: task 2.1 Add committed manifest comparison, safe staging, the empty marker before renames, simple directory swap, and three-copy retention in `nightshift/deploy.py`. Add `test_check_reports_ • specloop: complete task 3.2 • specloop: complete task 1.1 • specloop: task 3.2 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: task 1.1 Extend only the `tasks.md` rules in `specloop/propose.py: PROMPT` with same-file/same-concern grouping, one or two docs-only tasks in one section, the normal six-task target, depend • specloop: strengthen section 3 after its evidence check • specloop: complete task 3.1 • specloop: task 3.1 Wire refreshed run eligibility, plain finish invocation, post-finish head validation and done-run continuation behind the human-check gate. Add `test_land_finishes_only_at_human_che • specloop: complete task 1.1 • specloop: task 1.1 Create `nightshift/deploy.py` with module entry point, flags/defaults, injectable runner/context, checkout discovery/fetch/refusal and conditional fast-forward, plus frozen environm • specloop: complete task 2.3 • Draft OpenSpec change nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti (specloop propose, round 1) • specloop: task 2.3 Add stable head-specific attestation creation/PATCH and paginated reconciliation before creates and after lost responses; ensure the production runner does not blindly retry POST. A • specloop: complete task 2.2 • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1) • specloop: task 2.2 Add authenticated actor lookup and in-place checkbox edits for `--checks-done`, with tests for one write per changed source, unchanged complete sources, and partial-write recovery. • specloop: complete task 2.1 • specloop: task 2.1 Add paginated trusted publication-comment selection and task-list detection for the body and selected comment by the design's line rule (task-list lines count anywhere, including in • specloop: count task-list lines by a line rule, not Markdown parsing (descope after four review rounds of Markdown edge cases) • specloop: complete task 1.2 • specloop: task 1.2 Add version-1 status discovery and pre-mutation run eligibility validation, with tests for no match, duplicate matches, malformed status and error rows. Add `test_daemon_and_supervi • specloop: complete task 1.1 • specloop: task 1.1 Add the parser, injectable subprocess runner and clock boundary, config loading, PR identity resolution and enrollment validation in new `nightshift/land.py`; create the scripted-ru • Draft OpenSpec change nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1) • specloop: archive nightshift-issue-73-evidence-gates-route-mutants-to-their-ow into openspec/specs • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b • specloop: complete task 4.3 • specloop: task 4.3 Update only Section evidence in `docs/specloop/README.md` with route/placeholder syntax, mutation-only commands, per-sequence baselines, confirmation and timeout semantics, receipt • specloop: complete task 4.2 • specloop: task 4.2 Update `examples/specloop/self-hosting.toml` with its Python route and mutation-only selector command, preserving existing verification, negative-control and coverage commands. Add • Merge pull request #82 from mattpolicastro/spec/nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me • specloop: complete task 4.1 • specloop: task 4.1 Add stdlib-only `examples/specloop/select_tests.py` with the function/CLI interface, AST import matching, package/relative-import handling, deterministic output and empty-output fal • specloop: archive nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me into openspec/specs • Merge current PR base eaa7e808503b51c407549bacded2e9a3ad806df7 • specloop: complete task 3.3 • specloop: complete task 6.1 • specloop: task 3.3 Complete route/phase lifecycle coverage in `tests/test_mutation_narrowing.py` and `tests/test_mutation_routes.py`, making only necessary execution-helper fixes in `specloop/evidence • specloop: task 6.1 Create only `docs/deploy.md` for invocation/no-sync/bootstrap, flags/defaults, exit codes, quiet-window responsibility, specloop-only background-job guard, marker and empty-reload s • specloop: complete task 3.2 • Merge pull request #83 from mattpolicastro/spec/nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel • specloop: task 3.2 Add coordinator-owned `mutation-runs.json` receipts in `specloop/evidence.py` following the design's schema, preserving existing evidence and step receipt formats. Retain initial an • specloop: archive nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel into openspec/specs • specloop: complete task 3.1 • specloop: task 3.1 Implement narrowed execution and full confirmation in `specloop/evidence.py:_mutate_one`, using copied manifests, the same mutated source, fresh confirmation preparation/builds and • Merge current PR base 42115e4016d85112f0b9b4ff507c9cce55081724 • specloop: complete task 5.1 • specloop: complete task 7.1 • specloop: task 5.1 Wire all helpers into complete check/apply orchestration in `nightshift/deploy.py`, reporting independent check failures, refreshing each step, using post-pull HEAD, stopping later • specloop: task 7.1 Write new `docs/landing.md` with command examples, flags, prerequisites, check sources, attestation marker semantics, single-invocation guidance, three-round/shared-timeout behavior • specloop: complete task 2.3 • specloop: task 2.3 Isolate immutable per-sequence prepare/step budget derivation in `specloop/evidence.py`, retaining original full-baseline ceilings and the existing floor/factor/cap/fallback formula • specloop: complete task 4.2 • specloop: complete task 2.2 • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 4 after its evidence check • specloop: task 2.2 Integrate resolved routes into `specloop/evidence.py:mutate`: group by ordered step IDs, run used full baselines serially before workers, reuse identical sequences, assign each muta • specloop: complete task 6.2 • specloop: task 6.2 Wire the guarded merge commit command, merged-state confirmation and useful success/refusal output. Add stable-base success, competing push, protection rejection, queued-but-open re • specloop: complete task 2.1 • specloop: task 2.1 Add a pure route/step resolver in `specloop/evidence.py`, using case-sensitive fnmatch on relative POSIX paths, first-match precedence, route step order and legacy fallback declarat • specloop: complete task 6.1 • specloop: complete task 4.1 • specloop: task 6.1 Add source/head/run revalidation before finish and before the final main read, refusing concurrent changes and newly added checks; add scripted tests that inject each change at both • specloop: task 4.1 Add process-age probes and a shared bounded restart helper in `nightshift/deploy.py`, using existing heartbeat/status shapes, local job inventory, fresh activity guards, labels, for • specloop: complete task 1.3 • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 1 after its evidence check • specloop: complete task 5.2 • specloop: task 5.2 Wire initial base-ancestry checking and the three-round controller, retaining the pre-update baseline during update observation and the same deadline across rounds. Add `test_land_u • Merge pull request #85 from mattpolicastro/spec/nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti • specloop: complete task 5.1 • specloop: complete task 1.2 • specloop: task 5.1 Add the REST update helper with `expected_head_sha`, an immediate pre-update main read, asynchronous head observation and exact ordered two-parent validation. Add tests for REST arg • specloop: archive nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti into openspec/specs • specloop: task 1.2 Add frozen `MutationRoute`, default-empty `Manifest.mutation_routes`, and ordered route parsing/validation in `specloop/manifest.py:_gates`. Require a nonempty fallback when routes • specloop: complete task 1.1 • specloop: task 1.1 Add mutation-only `Step` parsing and `Manifest.mutation_step` in `specloop/manifest.py`, resolve fallback mutation IDs against both step namespaces, validate collisions, and supply • specloop: complete task 4.2 • specloop: complete task 3.1 • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: task 3.1 Add presence-only pending reporting and reload handling in `nightshift/deploy.py`: default/override/empty command, reload whenever marked, remove only after success, and concrete sh • specloop: strengthen section 4 after its evidence check • specloop: complete task 4.1 • specloop: task 4.1 Add expected-head CI polling, JSON/exit-status classification and the injected shared deadline. Add `test_land_refuses_failing_ci` and pending-to-green, empty/all-skipped, cancellat • specloop: complete task 1.2 • specloop: task 1.2 Extend only checklist items 1 and 7 in `specloop/critic.py: PROMPT` with strictly-more-than-eight / docs-only-more-than-two advisory merge findings and blast-radius-scaled retry rem • specloop: complete task 2.1 • specloop: task 2.1 Add committed manifest comparison, safe staging, the empty marker before renames, simple directory swap, and three-copy retention in `nightshift/deploy.py`. Add `test_check_reports_ • specloop: complete task 3.2 • specloop: complete task 1.1 • specloop: task 3.2 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: task 1.1 Extend only the `tasks.md` rules in `specloop/propose.py: PROMPT` with same-file/same-concern grouping, one or two docs-only tasks in one section, the normal six-task target, depend • specloop: strengthen section 3 after its evidence check • specloop: complete task 3.1 • specloop: task 3.1 Wire refreshed run eligibility, plain finish invocation, post-finish head validation and done-run continuation behind the human-check gate. Add `test_land_finishes_only_at_human_che • specloop: complete task 1.1 • specloop: task 1.1 Create `nightshift/deploy.py` with module entry point, flags/defaults, injectable runner/context, checkout discovery/fetch/refusal and conditional fast-forward, plus frozen environm • specloop: complete task 2.3 • Draft OpenSpec change nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti (specloop propose, round 1) • specloop: task 2.3 Add stable head-specific attestation creation/PATCH and paginated reconciliation before creates and after lost responses; ensure the production runner does not blindly retry POST. A • specloop: complete task 2.2 • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1) • specloop: task 2.2 Add authenticated actor lookup and in-place checkbox edits for `--checks-done`, with tests for one write per changed source, unchanged complete sources, and partial-write recovery. • specloop: complete task 2.1 • specloop: task 2.1 Add paginated trusted publication-comment selection and task-list detection for the body and selected comment by the design's line rule (task-list lines count anywhere, including in • specloop: count task-list lines by a line rule, not Markdown parsing (descope after four review rounds of Markdown edge cases) • specloop: complete task 1.2 • specloop: task 1.2 Add version-1 status discovery and pre-mutation run eligibility validation, with tests for no match, duplicate matches, malformed status and error rows. Add `test_daemon_and_supervi • specloop: complete task 1.1 • specloop: task 1.1 Add the parser, injectable subprocess runner and clock boundary, config loading, PR identity resolution and enrollment validation in new `nightshift/land.py`; create the scripted-ru • Draft OpenSpec change nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1) • Merge pull request #82 from mattpolicastro/spec/nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me • specloop: archive nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me into openspec/specs • Merge current PR base eaa7e808503b51c407549bacded2e9a3ad806df7 • specloop: complete task 6.1 • specloop: task 6.1 Create only `docs/deploy.md` for invocation/no-sync/bootstrap, flags/defaults, exit codes, quiet-window responsibility, specloop-only background-job guard, marker and empty-reload s • specloop: complete task 5.1 • specloop: task 5.1 Wire all helpers into complete check/apply orchestration in `nightshift/deploy.py`, reporting independent check failures, refreshing each step, using post-pull HEAD, stopping later • specloop: complete task 4.2 • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 4 after its evidence check • specloop: complete task 4.1 • specloop: task 4.1 Add process-age probes and a shared bounded restart helper in `nightshift/deploy.py`, using existing heartbeat/status shapes, local job inventory, fresh activity guards, labels, for • specloop: complete task 3.1 • specloop: task 3.1 Add presence-only pending reporting and reload handling in `nightshift/deploy.py`: default/override/empty command, reload whenever marked, remove only after success, and concrete sh • specloop: complete task 2.1 • specloop: task 2.1 Add committed manifest comparison, safe staging, the empty marker before renames, simple directory swap, and three-copy retention in `nightshift/deploy.py`. Add `test_check_reports_ • specloop: complete task 1.1 • specloop: task 1.1 Create `nightshift/deploy.py` with module entry point, flags/defaults, injectable runner/context, checkout discovery/fetch/refusal and conditional fast-forward, plus frozen environm • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1) • specloop: archive nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me into openspec/specs • Merge pull request #83 from mattpolicastro/spec/nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel • specloop: archive nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel into openspec/specs • Merge current PR base 42115e4016d85112f0b9b4ff507c9cce55081724 • specloop: complete task 7.1 • specloop: task 7.1 Write new `docs/landing.md` with command examples, flags, prerequisites, check sources, attestation marker semantics, single-invocation guidance, three-round/shared-timeout behavior • specloop: complete task 6.2 • specloop: task 6.2 Wire the guarded merge commit command, merged-state confirmation and useful success/refusal output. Add stable-base success, competing push, protection rejection, queued-but-open re • specloop: complete task 6.1 • specloop: task 6.1 Add source/head/run revalidation before finish and before the final main read, refusing concurrent changes and newly added checks; add scripted tests that inject each change at both • specloop: complete task 5.2 • specloop: task 5.2 Wire initial base-ancestry checking and the three-round controller, retaining the pre-update baseline during update observation and the same deadline across rounds. Add `test_land_u • specloop: complete task 5.1 • specloop: task 5.1 Add the REST update helper with `expected_head_sha`, an immediate pre-update main read, asynchronous head observation and exact ordered two-parent validation. Add tests for REST arg • specloop: complete task 4.2 • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 4 after its evidence check • specloop: complete task 4.1 • specloop: task 4.1 Add expected-head CI polling, JSON/exit-status classification and the injected shared deadline. Add `test_land_refuses_failing_ci` and pending-to-green, empty/all-skipped, cancellat • specloop: complete task 3.2 • specloop: task 3.2 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 3 after its evidence check • specloop: complete task 3.1 • specloop: task 3.1 Wire refreshed run eligibility, plain finish invocation, post-finish head validation and done-run continuation behind the human-check gate. Add `test_land_finishes_only_at_human_che • specloop: complete task 2.3 • specloop: task 2.3 Add stable head-specific attestation creation/PATCH and paginated reconciliation before creates and after lost responses; ensure the production runner does not blindly retry POST. A • specloop: complete task 2.2 • specloop: task 2.2 Add authenticated actor lookup and in-place checkbox edits for `--checks-done`, with tests for one write per changed source, unchanged complete sources, and partial-write recovery. • specloop: complete task 2.1 • specloop: task 2.1 Add paginated trusted publication-comment selection and task-list detection for the body and selected comment by the design's line rule (task-list lines count anywhere, including in • specloop: count task-list lines by a line rule, not Markdown parsing (descope after four review rounds of Markdown edge cases) • specloop: complete task 1.2 • specloop: task 1.2 Add version-1 status discovery and pre-mutation run eligibility validation, with tests for no match, duplicate matches, malformed status and error rows. Add `test_daemon_and_supervi • specloop: complete task 1.1 • specloop: task 1.1 Add the parser, injectable subprocess runner and clock boundary, config loading, PR identity resolution and enrollment validation in new `nightshift/land.py`; create the scripted-ru • Draft OpenSpec change nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel (specloop propose, round 1) • specloop: archive nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel into openspec/specs • Merge current PR base 42115e4016d85112f0b9b4ff507c9cce55081724 • specloop: complete task 7.1 • specloop: task 7.1 Write new `docs/landing.md` with command examples, flags, prerequisites, check sources, attestation marker semantics, single-invocation guidance, three-round/shared-timeout behavior • specloop: complete task 6.2 • specloop: task 6.2 Wire the guarded merge commit command, merged-state confirmation and useful success/refusal output. Add stable-base success, competing push, protection rejection, queued-but-open re • specloop: complete task 6.1 • specloop: task 6.1 Add source/head/run revalidation before finish and before the final main read, refusing concurrent changes and newly added checks; add scripted tests that inject each change at both • specloop: complete task 5.2 • specloop: task 5.2 Wire initial base-ancestry checking and the three-round controller, retaining the pre-update baseline during update observation and the same deadline across rounds. Add `test_land_u • Merge pull request #85 from mattpolicastro/spec/nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti • specloop: complete task 5.1 • specloop: task 5.1 Add the REST update helper with `expected_head_sha`, an immediate pre-update main read, asynchronous head observation and exact ordered two-parent validation. Add tests for REST arg • specloop: archive nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti into openspec/specs • specloop: complete task 4.2 • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 4 after its evidence check • specloop: complete task 4.1 • specloop: task 4.1 Add expected-head CI polling, JSON/exit-status classification and the injected shared deadline. Add `test_land_refuses_failing_ci` and pending-to-green, empty/all-skipped, cancellat • specloop: complete task 1.2 • specloop: task 1.2 Extend only checklist items 1 and 7 in `specloop/critic.py: PROMPT` with strictly-more-than-eight / docs-only-more-than-two advisory merge findings and blast-radius-scaled retry rem • specloop: complete task 3.2 • specloop: complete task 1.1 • specloop: task 3.2 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: task 1.1 Extend only the `tasks.md` rules in `specloop/propose.py: PROMPT` with same-file/same-concern grouping, one or two docs-only tasks in one section, the normal six-task target, depend • specloop: strengthen section 3 after its evidence check • specloop: complete task 3.1 • specloop: task 3.1 Wire refreshed run eligibility, plain finish invocation, post-finish head validation and done-run continuation behind the human-check gate. Add `test_land_finishes_only_at_human_che • specloop: complete task 2.3 • Draft OpenSpec change nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti (specloop propose, round 1) • specloop: task 2.3 Add stable head-specific attestation creation/PATCH and paginated reconciliation before creates and after lost responses; ensure the production runner does not blindly retry POST. A • Merge pull request #70 from mattpolicastro/spec/nightshift-issue-67-docs-bring-the-specloop-guide-and-known • specloop: archive nightshift-issue-67-docs-bring-the-specloop-guide-and-known into openspec/specs • specloop: complete task 2.2 • specloop: task 2.2 Add authenticated actor lookup and in-place checkbox edits for `--checks-done`, with tests for one write per changed source, unchanged complete sources, and partial-write recovery. • specloop: complete task 2.1 • tests: keep docs checks generic so later doc edits don't break them (drop pinned citations, phrases and limitation text) • specloop: task 2.1 Add paginated trusted publication-comment selection and task-list detection for the body and selected comment by the design's line rule (task-list lines count anywhere, including in • specloop: count task-list lines by a line rule, not Markdown parsing (descope after four review rounds of Markdown edge cases) • Merge current PR base 53478607141bbb9aa3222799db0bcedc3eb4165a • specloop: complete task 7.2 • specloop: task 7.2 Add tagged tests covering `specloop-documentation/documentation-integrity/references-and-reader-checks-are-reviewable`, `specloop-documentation/documentation-integrity/scope-and-reg • specloop: strengthen section 7 after its evidence check • specloop: complete task 7.1 • specloop: task 7.1 Reconcile wording and local links across `docs/specloop/README.md`, `KNOWN-LIMITATIONS.md` and the scoped parts of `README.md`; check PR citations against local merge history and th • specloop: complete task 6.1 • specloop: task 6.1 Reconcile `KNOWN-LIMITATIONS.md` with the preceding documentation and the design's fix/remaining-gap map. Remove only demonstrated fixes, split partially fixed bullets, retain unres • Merge pull request #71 from mattpolicastro/spec/nightshift-issue-68-factory-page-show-how-long-each-run-has • specloop: complete task 1.2 • specloop: complete task 5.1 • specloop: archive nightshift-issue-68-factory-page-show-how-long-each-run-has into openspec/specs • specloop: task 1.2 Add version-1 status discovery and pre-mutation run eligibility validation, with tests for no match, duplicate matches, malformed status and error rows. Add `test_daemon_and_supervi • specloop: task 5.1 Add concise operations guidance in `docs/specloop/README.md` and links or summaries in the specloop portions of `README.md`: job controls and supervisor boundaries, touchpoint comma • specloop: complete task 1.1 • specloop: task 1.1 Add the parser, injectable subprocess runner and clock boundary, config loading, PR identity resolution and enrollment validation in new `nightshift/land.py`; create the scripted-ru • specloop: compute done once so status typing matches the baseline • Merge current PR base 8c7a17529fe703415c19446f654d2a17a3df1271 • specloop: complete task 4.1 • specloop: complete task 4.2 • specloop: task 4.1 Update evidence guidance in `docs/specloop/README.md` for concurrency, timeout scoring, prose/comment exclusions, `mutation_skip`, measured versus skipped evidence, and both guard-c • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 4 after its evidence check • specloop: complete task 3.1 • specloop: complete task 4.1 • specloop: task 4.1 Render separate waiting text beside the preserved status/progress block in `plugins/nightshift/client/factory.tsx`, using the existing render/refresh lifecycle and current theme. Ad • specloop: task 3.1 Reconcile front-door sections in `docs/specloop/README.md` and `README.md` with dependencies, label authorization, consumed feedback IDs and legacy initialization, idea files and is • specloop: complete task 2.4 • specloop: task 2.4 Add tagged tests covering `specloop-documentation/spec-drafting-guidance/concurrent-files-inform-a-draft`, `specloop-documentation/spec-drafting-guidance/drafting-rules-preserve-fea • specloop: complete task 2.3 • specloop: task 2.3 Add tagged tests covering `specloop-documentation/spec-critic-guidance/critic-checklist-is-complete`, `specloop-documentation/spec-critic-guidance/critic-outcome-is-actionable`, fix • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.2 • specloop: complete task 3.1 • specloop: task 2.2 Extend the same guide's proposal sequence with the independent critic, all eight checklist items, both concurrent-file sources, single correction and contradiction/risk outcomes, ci • specloop: task 3.1 Add the pure `factoryWaitingTime` helper in `plugins/nightshift/client/factory-model.ts` and new `plugins/nightshift/tests/factory-waiting-model.test.ts`. Test exact-zero eligibilit • specloop: complete task 2.1 • specloop: task 2.1 Update drafting guidance in `docs/specloop/README.md` for the in-flight map, normalized paths, overlap feedback, four-round default, human-task lint and preserved spec guarantees; a • specloop: complete task 2.1 • specloop: task 2.1 Extend `plugins/nightshift/shared/factory.ts` with the optional nullable pause fields and minimally update the existing projection in `plugins/nightshift/server/factory.ts` to copy • specloop: complete task 1.2 • specloop: complete task 1.1 • specloop: task 1.2 Add tagged tests covering `specloop-documentation/publication-guidance/base-moves-before-publication`, `specloop-documentation/publication-guidance/base-preparation-pauses`, fixing • specloop: task 1.1 Implement the best-effort latest-pause lookup and additive `since` field in `specloop/cli.py` for normal and synthetic non-null pauses, leaving text status and state persistence unc • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.1 • specloop: task 1.1 Update publication in `docs/specloop/README.md` and the specloop flow in `README.md` from the landed base-sync behavior: driver preparation, publish handoff, pauses and recovery, sa • Draft OpenSpec change nightshift-issue-68-factory-page-show-how-long-each-run-has (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-68-factory-page-show-how-long-each-run-has (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-67-docs-bring-the-specloop-guide-and-known (specloop propose, round 1) • specloop: archive nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti into openspec/specs • Merge current PR base cde086dc7c74e6449e3430924e5013f97ce26220 • specloop: complete task 3.3 • specloop: task 3.3 Create `docs/arming.md` with the issue template, named-test examples, discouraged wording replacements, dependency/overlap guidance, module invocation, mode and exit matrix, prerequ • specloop: complete task 3.2 • specloop: task 3.2 Complete existing-label handling, uncertain-write reconciliation, target failure isolation, and aggregate batch outcomes in `nightshift/arm.py`; add corresponding main-boundary test • specloop: complete task 3.1 • Merge pull request #70 from mattpolicastro/spec/nightshift-issue-67-docs-bring-the-specloop-guide-and-known • specloop: task 3.1 Add argument parsing, checkout/repository resolution, deterministic reporting, main/module entry point, and basic mode-controlled label application in `nightshift/arm.py`; add `test • specloop: archive nightshift-issue-67-docs-bring-the-specloop-guide-and-known into openspec/specs • specloop: complete task 2.4 • tests: keep docs checks generic so later doc edits don't break them (drop pinned citations, phrases and limitation text) • specloop: task 2.4 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 2 after its evidence check • Merge current PR base 53478607141bbb9aa3222799db0bcedc3eb4165a • specloop: complete task 7.2 • specloop: task 7.2 Add tagged tests covering `specloop-documentation/documentation-integrity/references-and-reader-checks-are-reviewable`, `specloop-documentation/documentation-integrity/scope-and-reg • specloop: complete task 2.3 • specloop: task 2.3 Add cached cycle-safe dependency reachability, combined overlap findings, and pre-write batch candidate comparison in `nightshift/arm.py`; extend `tests/test_arm.py` with `test_arm_ • specloop: complete task 2.2 • specloop: strengthen section 7 after its evidence check • specloop: task 2.2 Add the `critic.open_pr_files` adapter and paginated PR metadata join in `nightshift/arm.py`; extend `tests/test_arm.py` to exercise all three context sources, renames, pagination, • specloop: complete task 7.1 • specloop: task 7.1 Reconcile wording and local links across `docs/specloop/README.md`, `KNOWN-LIMITATIONS.md` and the scoped parts of `README.md`; check PR citations against local merge history and th • specloop: complete task 2.1 • specloop: task 2.1 Add paginated armed-issue collection, Scope extraction via `propose.paths`, in-flight collection via `propose.in_flight`, front-door run identity, and self exclusion to `nightshift/ • specloop: complete task 6.1 • specloop: task 6.1 Reconcile `KNOWN-LIMITATIONS.md` with the preceding documentation and the design's fix/remaining-gap map. Remove only demonstrated fixes, split partially fixed bullets, retain unres • Merge pull request #71 from mattpolicastro/spec/nightshift-issue-68-factory-page-show-how-long-each-run-has • specloop: complete task 1.3 • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: complete task 5.1 • specloop: strengthen section 1 after its evidence check • specloop: archive nightshift-issue-68-factory-page-show-how-long-each-run-has into openspec/specs • specloop: task 5.1 Add concise operations guidance in `docs/specloop/README.md` and links or summaries in the specloop portions of `README.md`: job controls and supervisor boundaries, touchpoint comma • specloop: compute done once so status typing matches the baseline • specloop: complete task 1.2 • specloop: task 1.2 Add the bounded injectable GitHub issue reader, issue cache, and direct blocker completion lint to `nightshift/arm.py`, importing `queue.blockers` without editing its owner; add sta • specloop: complete task 1.1 • Merge current PR base 8c7a17529fe703415c19446f654d2a17a3df1271 • specloop: task 1.1 Create the section parser, finding representation, and pure wording lint in `nightshift/arm.py`; create fixture-driven `tests/test_arm.py` with `test_arm_flags_missing_sections`, `t • specloop: complete task 4.1 • specloop: complete task 4.2 • specloop: task 4.1 Update evidence guidance in `docs/specloop/README.md` for concurrency, timeout scoring, prose/comment exclusions, `mutation_skip`, measured versus skipped evidence, and both guard-c • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 4 after its evidence check • specloop: complete task 3.1 • specloop: complete task 4.1 • specloop: task 4.1 Render separate waiting text beside the preserved status/progress block in `plugins/nightshift/client/factory.tsx`, using the existing render/refresh lifecycle and current theme. Ad • specloop: task 3.1 Reconcile front-door sections in `docs/specloop/README.md` and `README.md` with dependencies, label authorization, consumed feedback IDs and legacy initialization, idea files and is • specloop: complete task 2.4 • specloop: task 2.4 Add tagged tests covering `specloop-documentation/spec-drafting-guidance/concurrent-files-inform-a-draft`, `specloop-documentation/spec-drafting-guidance/drafting-rules-preserve-fea • specloop: complete task 2.3 • specloop: task 2.3 Add tagged tests covering `specloop-documentation/spec-critic-guidance/critic-checklist-is-complete`, `specloop-documentation/spec-critic-guidance/critic-outcome-is-actionable`, fix • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.2 • specloop: complete task 3.1 • specloop: task 2.2 Extend the same guide's proposal sequence with the independent critic, all eight checklist items, both concurrent-file sources, single correction and contradiction/risk outcomes, ci • specloop: task 3.1 Add the pure `factoryWaitingTime` helper in `plugins/nightshift/client/factory-model.ts` and new `plugins/nightshift/tests/factory-waiting-model.test.ts`. Test exact-zero eligibilit • specloop: complete task 2.1 • specloop: task 2.1 Update drafting guidance in `docs/specloop/README.md` for the in-flight map, normalized paths, overlap feedback, four-round default, human-task lint and preserved spec guarantees; a • specloop: complete task 2.1 • specloop: task 2.1 Extend `plugins/nightshift/shared/factory.ts` with the optional nullable pause fields and minimally update the existing projection in `plugins/nightshift/server/factory.ts` to copy • specloop: complete task 1.2 • specloop: complete task 1.1 • specloop: task 1.2 Add tagged tests covering `specloop-documentation/publication-guidance/base-moves-before-publication`, `specloop-documentation/publication-guidance/base-preparation-pauses`, fixing • specloop: task 1.1 Implement the best-effort latest-pause lookup and additive `since` field in `specloop/cli.py` for normal and synthetic non-null pauses, leaving text status and state persistence unc • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.1 • specloop: task 1.1 Update publication in `docs/specloop/README.md` and the specloop flow in `README.md` from the landed base-sync behavior: driver preparation, publish handoff, pauses and recovery, sa • Draft OpenSpec change nightshift-issue-68-factory-page-show-how-long-each-run-has (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-68-factory-page-show-how-long-each-run-has (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-67-docs-bring-the-specloop-guide-and-known (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1) • tests: keep docs checks generic so later doc edits don't break them (drop pinned citations, phrases and limitation text) • specloop: archive nightshift-issue-68-factory-page-show-how-long-each-run-has into openspec/specs • Merge current PR base 8c7a17529fe703415c19446f654d2a17a3df1271 • specloop: complete task 4.2 • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 4 after its evidence check • specloop: complete task 4.1 • specloop: task 4.1 Render separate waiting text beside the preserved status/progress block in `plugins/nightshift/client/factory.tsx`, using the existing render/refresh lifecycle and current theme. Ad • specloop: complete task 3.1 • specloop: task 3.1 Add the pure `factoryWaitingTime` helper in `plugins/nightshift/client/factory-model.ts` and new `plugins/nightshift/tests/factory-waiting-model.test.ts`. Test exact-zero eligibilit • specloop: complete task 2.1 • specloop: task 2.1 Extend `plugins/nightshift/shared/factory.ts` with the optional nullable pause fields and minimally update the existing projection in `plugins/nightshift/server/factory.ts` to copy • specloop: complete task 1.1 • specloop: task 1.1 Implement the best-effort latest-pause lookup and additive `since` field in `specloop/cli.py` for normal and synthetic non-null pauses, leaving text status and state persistence unc • Merge pull request #69 from mattpolicastro/ci/mypy-baseline • queue: annotate the feedback dedupe map so the type gate passes on current main • Merge branch 'main' into ci/mypy-baseline • CI: fail on new mypy errors against a committed baseline • Merge pull request #69 from mattpolicastro/ci/mypy-baseline • queue: annotate the feedback dedupe map so the type gate passes on current main • Merge branch 'main' into ci/mypy-baseline • CI: fail on new mypy errors against a committed baseline • queue: annotate the feedback dedupe map so the type gate passes on current main • Merge branch 'main' into ci/mypy-baseline • Merge pull request #61 from mattpolicastro/spec/nightshift-issue-6-revision-feedback-include-comments-poste • specloop: archive nightshift-issue-6-revision-feedback-include-comments-poste into openspec/specs • Merge current PR base 5b66c89764709d60e06ce0a098c15c58fac1f967 • specloop: complete task 6.1 • specloop: task 6.1 Update `README.md` around line 114 to explain per-PR consumed comment IDs instead of branch-tip time, comments arriving during a revision remaining available, relabelling not replay • specloop: complete task 5.2 • specloop: task 5.2 Preserve #5 authorization ahead of feedback reads and receipt writes, and add `real_trust` integration coverage in the new recovery/consumption test files for unauthorized empty/non • specloop: complete task 5.1 • specloop: task 5.1 Complete legacy pending-job/delivery recovery in `revise_pending` using the persisted baseline from tasks 2.2 and 3.1. Preserve payloads and original markers with the explicit legac • specloop: complete task 4.2 • specloop: task 4.2 Handle a newer authorized label event without discarding the previous running/completed round, and recheck the current event before removing a revision label. Extend `tests/test_rev • specloop: complete task 4.1 • specloop: task 4.1 Complete revision-only recovery ordering for saved results and consumption writes. Add `tests/test_revision_feedback_recovery.py` tests across both stages for deferred background re • specloop: complete task 3.3 • specloop: task 3.3 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 3 after its evidence check • specloop: complete task 3.2 • specloop: task 3.2 Complete spec-stage snapshot delivery and acknowledge only after successful push, keeping the existing idea-file, branch, and head checks. Extend `tests/test_revision_feedback_consu • specloop: complete task 3.1 • specloop: task 3.1 Wire automatic legacy initialization before collection/replacement, the structured reader, and durable snapshots into `revise_pending` and acknowledge admitted revisions before noti • specloop: complete task 2.2 • specloop: task 2.2 Add revision-only automatic legacy initialization helpers in `nightshift/specloop_intake.py`: read recorded `saved_at` (or `updated_at` alias), inclusively seed all trusted IDs by c • specloop: complete task 2.1 • specloop: task 2.1 Add revision-only receipt validation, snapshot, replacement, and idempotent acknowledgement helpers in `nightshift/specloop_intake.py`, reusing `_save` without changing shared job A • specloop: complete task 1.2 • specloop: task 1.2 Extend `nightshift/queue.py::_reconcile_intake_comment` to recognize `revise` alongside draft/admit/publish markers. Add `tests/test_revision_comment_retry.py` using real `queue._gh • specloop: complete task 1.1 • specloop: task 1.1 Add `FeedbackItem` and the paginated, strict `pr_feedback_items` reader in `nightshift/queue.py`, preserving the existing `pr_feedback` interface. Share strict raw-record enumeratio • Draft OpenSpec change nightshift-issue-6-revision-feedback-include-comments-poste (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-6-revision-feedback-include-comments-poste (specloop propose, round 1) • Merge pull request #61 from mattpolicastro/spec/nightshift-issue-6-revision-feedback-include-comments-poste • specloop: archive nightshift-issue-6-revision-feedback-include-comments-poste into openspec/specs • Merge current PR base 5b66c89764709d60e06ce0a098c15c58fac1f967 • specloop: complete task 6.1 • specloop: task 6.1 Update `README.md` around line 114 to explain per-PR consumed comment IDs instead of branch-tip time, comments arriving during a revision remaining available, relabelling not replay • specloop: complete task 5.2 • specloop: task 5.2 Preserve #5 authorization ahead of feedback reads and receipt writes, and add `real_trust` integration coverage in the new recovery/consumption test files for unauthorized empty/non • specloop: complete task 5.1 • specloop: task 5.1 Complete legacy pending-job/delivery recovery in `revise_pending` using the persisted baseline from tasks 2.2 and 3.1. Preserve payloads and original markers with the explicit legac • specloop: complete task 4.2 • specloop: task 4.2 Handle a newer authorized label event without discarding the previous running/completed round, and recheck the current event before removing a revision label. Extend `tests/test_rev • specloop: complete task 4.1 • specloop: task 4.1 Complete revision-only recovery ordering for saved results and consumption writes. Add `tests/test_revision_feedback_recovery.py` tests across both stages for deferred background re • specloop: complete task 3.3 • specloop: task 3.3 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 3 after its evidence check • specloop: complete task 3.2 • specloop: task 3.2 Complete spec-stage snapshot delivery and acknowledge only after successful push, keeping the existing idea-file, branch, and head checks. Extend `tests/test_revision_feedback_consu • specloop: complete task 3.1 • specloop: task 3.1 Wire automatic legacy initialization before collection/replacement, the structured reader, and durable snapshots into `revise_pending` and acknowledge admitted revisions before noti • specloop: complete task 2.2 • specloop: task 2.2 Add revision-only automatic legacy initialization helpers in `nightshift/specloop_intake.py`: read recorded `saved_at` (or `updated_at` alias), inclusively seed all trusted IDs by c • specloop: complete task 2.1 • specloop: task 2.1 Add revision-only receipt validation, snapshot, replacement, and idempotent acknowledgement helpers in `nightshift/specloop_intake.py`, reusing `_save` without changing shared job A • specloop: complete task 1.2 • specloop: task 1.2 Extend `nightshift/queue.py::_reconcile_intake_comment` to recognize `revise` alongside draft/admit/publish markers. Add `tests/test_revision_comment_retry.py` using real `queue._gh • specloop: complete task 1.1 • specloop: task 1.1 Add `FeedbackItem` and the paginated, strict `pr_feedback_items` reader in `nightshift/queue.py`, preserving the existing `pr_feedback` interface. Share strict raw-record enumeratio • Draft OpenSpec change nightshift-issue-6-revision-feedback-include-comments-poste (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-6-revision-feedback-include-comments-poste (specloop propose, round 1) • specloop: archive nightshift-issue-6-revision-feedback-include-comments-poste into openspec/specs • Merge pull request #64 from mattpolicastro/spec/nightshift-issue-33-mutation-operators-negate-bare-condition • specloop: archive nightshift-issue-33-mutation-operators-negate-bare-condition into openspec/specs • Merge current PR base 5b66c89764709d60e06ce0a098c15c58fac1f967 • Merge current PR base 1dc8d8965ff6f50620a6363be6a1db1b9b5cc258 • specloop: complete task 1.3 • specloop: task 1.3 Add `test_gate_measures_a_guard_clause_change` in `tests/test_specloop_evidence.py` with real base/head commits adding only the two guard lines, real generation and dispatch, and a • specloop: complete task 1.2 • specloop: task 1.2 Extend the generation helpers in `specloop/evidence.py` with `drop-return`: a last return directly in an `if`/`elif`/`else` branch whose owning `if` has a following statement in its • specloop: complete task 1.1 • specloop: task 1.1 After #21 has landed, add source-aware `negate-condition` candidate generation and the shared Python analysis needed for it in `specloop/evidence.py`, preserving the `generate` inte • Draft OpenSpec change nightshift-issue-33-mutation-operators-negate-bare-condition (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-33-mutation-operators-negate-bare-condition (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-33-mutation-operators-negate-bare-condition (specloop propose, round 1)
View commitsprompts: existing tests predate the change; test docs by structure, not wording
Merged PR in mattpolicastro/nightshift: "prompts: existing tests predate the change; test docs by structure, not wording"
View pull requestSpec: Portability: make host paths configurable
Merged PR in mattpolicastro/nightshift: "Spec: Portability: make host paths configurable"
View pull requestSpec: Providers: fall back to the next profile when one is unavailable
Merged PR in mattpolicastro/nightshift: "Spec: Providers: fall back to the next profile when one is unavailable"
View pull requestSpec: land: run specloop via its interpreter; reconcile branch updates with unparseable responses
Merged PR in mattpolicastro/nightshift: "Spec: land: run specloop via its interpreter; reconcile branch updates with unparseable responses"
View pull requestSpec: Config resilience: a bad specloop manifest must not stop worker repositories
Merged PR in mattpolicastro/nightshift: "Spec: Config resilience: a bad specloop manifest must not stop worker repositories"
View pull requestSpec: land: treat 'no checks reported yet' after a push as pending
Merged PR in mattpolicastro/nightshift: "Spec: land: treat 'no checks reported yet' after a push as pending"
View pull requestpropose: in-flight map ignores other runs' hands-off clauses
Merged PR in mattpolicastro/nightshift: "propose: in-flight map ignores other runs' hands-off clauses"
View pull requestSpec: nightshift.arm: lint an issue and check file overlap before arming
Merged PR in mattpolicastro/nightshift: "Spec: nightshift.arm: lint an issue and check file overlap before arming"
View pull request