Plaits Lab SDK: a single-engine VCV Rack 2 test bench
Merged PR in lylepmills/eurorack: "Plaits Lab SDK: a single-engine VCV Rack 2 test bench"
View pull requestNotes on work, tech, and life.
Plaits Lab SDK: a single-engine VCV Rack 2 test bench
Merged PR in lylepmills/eurorack: "Plaits Lab SDK: a single-engine VCV Rack 2 test bench"
View pull requestWorklog: pin the project
Pushed 10 commits to mattpolicastro/mutable-instruments-eurorack • Worklog and the VCV test bench's OpenSpec change • Phreak v2: seven telephone tone systems, a modem table and a line control • Merge sdk-vcv-test-bench: the single-engine VCV Rack test bench offered upstream • Merge upstream master: Lyle's merged SDK audition fixes • Plaits Lab SDK: a single-engine VCV Rack 2 test bench • Plaits Lab SDK: expect 98 catalog models in the stereo audit test • Plaits Lab SDK: find em++ on PATH so Windows uses em++.bat • Plaits Lab SDK: live Plucked strikes report TRIG patched • Plaits Lab SDK: link live-audition wasm with em++
View commitsMerge current PR base 5b66c89764709d60e06ce0a098c15c58fac1f967
Pushed 571 commits to mattpolicastro/nightshift • 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 • Merge pull request #65 from mattpolicastro/spec/nightshift-issue-49-de-flake-test-parallel-mutants-respect-t • 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: archive nightshift-issue-49-de-flake-test-parallel-mutants-respect-t into openspec/specs • 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 • Merge current PR base 1dc8d8965ff6f50620a6363be6a1db1b9b5cc258 • 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 • Merge pull request #59 from mattpolicastro/spec/nightshift-issue-46-before-publishing-merge-the-current-base • specloop: complete task 1.1 • specloop: archive nightshift-issue-46-before-publishing-merge-the-current-base into openspec/specs • specloop: task 1.1 After #21 lands, update and validate only `test_parallel_mutants_respect_time_box` and its decorators in `tests/test_specloop_evidence.py` in this same implementation session: add t • 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: merge current main into the run (manual): brings PR #63's fix • specloop: drop prose equivalence markers that #21 now forbids • specloop: merge current main into the run before merging (manual; #46 automates this once landed) • 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 4.3 • specloop: task 4.3 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 • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 1) • specloop: strengthen section 4 after its evidence check • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 2) • 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 4.2 • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 1) • specloop: complete task 2.1 • specloop: task 4.2 Complete persisted-baseline/revision and comparison-conflict handling with tests in `tests/test_specloop_base_evidence.py`; run the focused new files and `uv run pytest`, resolving • Merge pull request #63 from mattpolicastro/chore/drop-prose-annotation • 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 • Fix main: drop a prose annotation inside a touchpoints docstring • Merge pull request #48 from mattpolicastro/spec/nightshift-issue-21-mutation-testing-skip-cosmetic-literals • specloop: complete task 4.1 • specloop: task 4.1 Add the section comparison-baseline helper and wire only the `evidence.gather` call boundary in `specloop/loop.py`, reusing disposable merge construction without changing run refs o • Merge pull request #53 from mattpolicastro/spec/nightshift-issue-50-touchpoint-report-count-human-interventi • specloop: archive nightshift-issue-21-mutation-testing-skip-cosmetic-literals into openspec/specs • 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: archive nightshift-issue-50-touchpoint-report-count-human-interventi into openspec/specs • 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 • specloop: complete task 3.7 • specloop: task 3.7 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 5.2 • specloop: task 5.2 Extend `tests/test_mutation_measurement.py` with host-independent `gather` and `section_evidence` integration tests for filtered selection at concurrency 1 and 2, prepared/unprepare • specloop: complete task 3.6 • Merge pull request #62 from mattpolicastro/fix/critic-blocking-classes • specloop: complete task 5.1 • specloop: task 3.6 Add receipt-recovery regressions in `tests/test_specloop_base_publication.py` for a lost stable publish response and comment failure before/after delivery, using the fixtures from 3 • specloop: task 5.1 Change `Evidence.unmeasured` and equivalent-aware `Evidence.summary` in `specloop/evidence.py`. Add `tests/test_mutation_measurement.py` with `test_equivalent_and_timeout_only_evide • Spec critic: block on unplanned migrations, retry gaps and stale operator docs • specloop: complete task 3.5 • specloop: complete task 4.2 • specloop: task 3.5 Implement retryable fetch-failure handling in `_publish` and add timeout/failure and CLI format regressions in the new test files, asserting the 20-second fetch budget without waiti • specloop: task 4.2 Add read-only/offline invariant assertions in `tests/test_touchpoints.py` around file bytes and directory contents, forbid external calls, and exercise both output modes; run `uv ru • Merge pull request #60 from mattpolicastro/spec/nightshift-issue-58-in-flight-file-map-parse-file-py-functio • specloop: complete task 4.1 • specloop: archive nightshift-issue-58-in-flight-file-map-parse-file-py-functio into openspec/specs • specloop: complete task 3.4 • specloop: task 4.1 After #8 has merged (an admission prerequisite), remove prose-only annotations in `nightshift/specloop_job.py`, `nightshift/specloop_client.py`, `specloop/state.py`, and `specloop/e • specloop: task 3.4 Extend new publication integration tests for repeated base advancement and push failure followed by another advance. Verify each publish only fetches and schedules, each preparation • specloop: complete task 3.3 • specloop: task 3.3 Add local publication fixtures and handoff/restart regressions in new `tests/test_specloop_base_publication.py`, driving unchanged `publish_pending` through real CLI status/publish • specloop: complete task 4.1 • specloop: complete task 1.2 • specloop: complete task 3.2 • specloop: task 1.2 Extend `paths(text, root=None)` and wire the resolved source root from `in_flight()` in `specloop/propose.py`. In `tests/test_specloop_in_flight_paths.py`, add `test_root_level_file • specloop: task 4.1 Complete record/directory failure isolation and source-location diagnostics in `nightshift/touchpoints.py`; add `test_unreadable_records_are_reported_not_fatal` and compatibility te • specloop: task 3.2 Wire `cli._publish` after `_remote` to fetch once with a 20-second timeout and use a read-only ancestry/obligation predicate. If preparation is needed, atomically save running statu • specloop: complete task 1.1 • specloop: complete task 3.1 • specloop: task 1.1 Update `paths()` in `specloop/propose.py` to normalize single-colon identifier suffixes while preserving existing double-colon, punctuation, prefix-exclusion, wildcard, and deduplic • specloop: task 3.1 Wire the gate before final checks in `loop.finals`, reload head and retain the unchanged-base fast path; extend new readiness tests and adjust only existing fixture setup that now n • specloop: merge current main into the run (manual, ahead of #46): brings in #8 for task 4.1 • Draft OpenSpec change nightshift-issue-58-in-flight-file-map-parse-file-py-functio (specloop propose, round 1) • specloop: complete task 2.2 • specloop: task 2.2 Reconcile interrupted integration and verification in the driver gate, bind successful receipts to head, and handle repaired descendants; add restart/failure-injection tests in new • specloop: complete task 3.3 • specloop: complete task 2.1 • specloop: task 2.1 Build the driver-only `loop.prepare_publish` gate from the fetch/merge helpers, persist intent before compare-and-swap advancement, invoke the existing trusted verifier and retain a • 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 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: complete task 3.2 • specloop: task 1.2 Add disposable clean/conflicting merge construction in `specloop/loop.py` using harness identity and two-parent history, plus additive `base_sync` intent loading in `specloop/state. • specloop: complete task 1.1 • specloop: task 3.2 Implement `render_table`, argparse `main`, module execution, JSON-only stdout, zero-history output and exit codes in `nightshift/touchpoints.py`; add CLI and subprocess smoke tests • specloop: task 1.1 Add the bounded source-origin fetch helper in `specloop/loop.py`, with local-path resolution, explicit base refspec, diagnostic handling and no source mutations; add local bare-orig • specloop: complete task 3.1 • specloop: descope the JSX style filter (task 3.1) • specloop: task 3.1 Implement `collect_report` date provenance, inclusive UTC selection, row/aggregate totals and deterministic version-1 document fields in `nightshift/touchpoints.py`; add `test_touch • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1) • specloop: complete task 2.3 • specloop: task 2.3 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: complete task 2.3 • specloop: strengthen section 2 after its evidence check • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 2) • specloop: task 2.3 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.2 • specloop: task 2.2 Preserve today's non-Python comment-prefix exclusions in `specloop/evidence.py` and add only line-level `/* ... */` tracking for blocks whose opening and closing lines are comment-o • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1) • specloop: complete task 2.1 • specloop: task 2.1 Load candidate files from committed `head` in `gather`, pass complete source to `generate`, and add Python AST/token span filtering in `specloop/evidence.py`. Move Python comment-pr • specloop: complete task 1.1 • specloop: task 1.1 Add and validate `Manifest.mutation_skip` in `specloop/manifest.py`, apply literal whole-line exclusions before sampling in `specloop/evidence.py`, and add `tests/test_mutation_skip • specloop: complete task 2.2 • specloop: task 2.2 Complete scheduled-pause classification, per-task infra recovery accounting that survives manual resumes, unknown reason warnings and broken-log attribution in `nightshift/touchpoin • specloop: complete task 2.1 • specloop: task 2.1 Add event replay, build-revision commit deduplication, pause/resume reason attribution and human-accept counting in `nightshift/touchpoints.py`; add and finish `test_touchpoints_cou • specloop: complete task 1.2 • specloop: task 1.2 Add intake aggregation and receipt/job deduplication in `nightshift/touchpoints.py`, plus tests in `tests/test_touchpoints.py` for each outcome, repeated independent jobs, stripped • specloop: complete task 1.1 • specloop: task 1.1 Add standard-library discovery and record normalization in `nightshift/touchpoints.py`, with temporary-directory tests in the new `tests/test_touchpoints.py` for numeric receipts, r • Draft OpenSpec change nightshift-issue-50-touchpoint-report-count-human-interventi (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-21-mutation-testing-skip-cosmetic-literals (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-21-mutation-testing-skip-cosmetic-literals (specloop propose, round 1) • Merge current PR base 5b66c89764709d60e06ce0a098c15c58fac1f967 • Merge pull request #65 from mattpolicastro/spec/nightshift-issue-49-de-flake-test-parallel-mutants-respect-t • Merge current PR base 1dc8d8965ff6f50620a6363be6a1db1b9b5cc258 • specloop: archive nightshift-issue-49-de-flake-test-parallel-mutants-respect-t into openspec/specs • 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 • Merge current PR base 1dc8d8965ff6f50620a6363be6a1db1b9b5cc258 • 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 • Merge pull request #59 from mattpolicastro/spec/nightshift-issue-46-before-publishing-merge-the-current-base • specloop: complete task 1.1 • 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 • specloop: archive nightshift-issue-46-before-publishing-merge-the-current-base into openspec/specs • specloop: task 1.1 After #21 lands, update and validate only `test_parallel_mutants_respect_time_box` and its decorators in `tests/test_specloop_evidence.py` in this same implementation session: add t • specloop: merge current main into the run (manual): brings PR #63's fix • specloop: drop prose equivalence markers that #21 now forbids • specloop: merge current main into the run before merging (manual; #46 automates this once landed) • specloop: complete task 4.3 • specloop: task 4.3 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 • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 1) • specloop: strengthen section 4 after its evidence check • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 2) • specloop: complete task 4.2 • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 1) • specloop: task 4.2 Complete persisted-baseline/revision and comparison-conflict handling with tests in `tests/test_specloop_base_evidence.py`; run the focused new files and `uv run pytest`, resolving • Merge pull request #63 from mattpolicastro/chore/drop-prose-annotation • Fix main: drop a prose annotation inside a touchpoints docstring • specloop: complete task 4.1 • specloop: task 4.1 Add the section comparison-baseline helper and wire only the `evidence.gather` call boundary in `specloop/loop.py`, reusing disposable merge construction without changing run refs o • specloop: complete task 3.7 • specloop: task 3.7 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.6 • specloop: task 3.6 Add receipt-recovery regressions in `tests/test_specloop_base_publication.py` for a lost stable publish response and comment failure before/after delivery, using the fixtures from 3 • specloop: complete task 3.5 • specloop: task 3.5 Implement retryable fetch-failure handling in `_publish` and add timeout/failure and CLI format regressions in the new test files, asserting the 20-second fetch budget without waiti • specloop: complete task 3.4 • specloop: task 3.4 Extend new publication integration tests for repeated base advancement and push failure followed by another advance. Verify each publish only fetches and schedules, each preparation • specloop: complete task 3.3 • specloop: task 3.3 Add local publication fixtures and handoff/restart regressions in new `tests/test_specloop_base_publication.py`, driving unchanged `publish_pending` through real CLI status/publish • specloop: complete task 3.2 • specloop: task 3.2 Wire `cli._publish` after `_remote` to fetch once with a 20-second timeout and use a read-only ancestry/obligation predicate. If preparation is needed, atomically save running statu • specloop: complete task 3.1 • specloop: task 3.1 Wire the gate before final checks in `loop.finals`, reload head and retain the unchanged-base fast path; extend new readiness tests and adjust only existing fixture setup that now n • specloop: complete task 2.2 • specloop: task 2.2 Reconcile interrupted integration and verification in the driver gate, bind successful receipts to head, and handle repaired descendants; add restart/failure-injection tests in new • specloop: complete task 2.1 • specloop: task 2.1 Build the driver-only `loop.prepare_publish` gate from the fetch/merge helpers, persist intent before compare-and-swap advancement, invoke the existing trusted verifier and retain a • 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 disposable clean/conflicting merge construction in `specloop/loop.py` using harness identity and two-parent history, plus additive `base_sync` intent loading in `specloop/state. • specloop: complete task 1.1 • specloop: task 1.1 Add the bounded source-origin fetch helper in `specloop/loop.py`, with local-path resolution, explicit base refspec, diagnostic handling and no source mutations; add local bare-orig • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1) • Merge pull request #65 from mattpolicastro/spec/nightshift-issue-49-de-flake-test-parallel-mutants-respect-t • specloop: archive nightshift-issue-49-de-flake-test-parallel-mutants-respect-t into openspec/specs • Merge current PR base 1dc8d8965ff6f50620a6363be6a1db1b9b5cc258 • specloop: complete task 1.1 • specloop: task 1.1 After #21 lands, update and validate only `test_parallel_mutants_respect_time_box` and its decorators in `tests/test_specloop_evidence.py` in this same implementation session: add t • specloop: merge current main into the run (manual): brings PR #63's fix • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 1) • specloop: archive nightshift-issue-49-de-flake-test-parallel-mutants-respect-t into openspec/specs • Merge current PR base 1dc8d8965ff6f50620a6363be6a1db1b9b5cc258 • Merge pull request #59 from mattpolicastro/spec/nightshift-issue-46-before-publishing-merge-the-current-base • specloop: complete task 1.1 • specloop: archive nightshift-issue-46-before-publishing-merge-the-current-base into openspec/specs • specloop: task 1.1 After #21 lands, update and validate only `test_parallel_mutants_respect_time_box` and its decorators in `tests/test_specloop_evidence.py` in this same implementation session: add t • specloop: merge current main into the run (manual): brings PR #63's fix • specloop: drop prose equivalence markers that #21 now forbids • specloop: merge current main into the run before merging (manual; #46 automates this once landed) • specloop: complete task 4.3 • specloop: task 4.3 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.2 • specloop: task 4.2 Complete persisted-baseline/revision and comparison-conflict handling with tests in `tests/test_specloop_base_evidence.py`; run the focused new files and `uv run pytest`, resolving • Merge pull request #63 from mattpolicastro/chore/drop-prose-annotation • Fix main: drop a prose annotation inside a touchpoints docstring • specloop: complete task 4.1 • specloop: task 4.1 Add the section comparison-baseline helper and wire only the `evidence.gather` call boundary in `specloop/loop.py`, reusing disposable merge construction without changing run refs o • specloop: complete task 3.7 • specloop: task 3.7 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.6 • specloop: task 3.6 Add receipt-recovery regressions in `tests/test_specloop_base_publication.py` for a lost stable publish response and comment failure before/after delivery, using the fixtures from 3 • specloop: complete task 3.5 • specloop: task 3.5 Implement retryable fetch-failure handling in `_publish` and add timeout/failure and CLI format regressions in the new test files, asserting the 20-second fetch budget without waiti • specloop: complete task 3.4 • specloop: task 3.4 Extend new publication integration tests for repeated base advancement and push failure followed by another advance. Verify each publish only fetches and schedules, each preparation • specloop: complete task 3.3 • specloop: task 3.3 Add local publication fixtures and handoff/restart regressions in new `tests/test_specloop_base_publication.py`, driving unchanged `publish_pending` through real CLI status/publish • specloop: complete task 3.2 • specloop: task 3.2 Wire `cli._publish` after `_remote` to fetch once with a 20-second timeout and use a read-only ancestry/obligation predicate. If preparation is needed, atomically save running statu • specloop: complete task 3.1 • specloop: task 3.1 Wire the gate before final checks in `loop.finals`, reload head and retain the unchanged-base fast path; extend new readiness tests and adjust only existing fixture setup that now n • specloop: complete task 2.2 • specloop: task 2.2 Reconcile interrupted integration and verification in the driver gate, bind successful receipts to head, and handle repaired descendants; add restart/failure-injection tests in new • specloop: complete task 2.1 • specloop: task 2.1 Build the driver-only `loop.prepare_publish` gate from the fetch/merge helpers, persist intent before compare-and-swap advancement, invoke the existing trusted verifier and retain a • 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 disposable clean/conflicting merge construction in `specloop/loop.py` using harness identity and two-parent history, plus additive `base_sync` intent loading in `specloop/state. • specloop: complete task 1.1 • specloop: task 1.1 Add the bounded source-origin fetch helper in `specloop/loop.py`, with local-path resolution, explicit base refspec, diagnostic handling and no source mutations; add local bare-orig • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1) • Merge pull request #59 from mattpolicastro/spec/nightshift-issue-46-before-publishing-merge-the-current-base • specloop: archive nightshift-issue-46-before-publishing-merge-the-current-base into openspec/specs • specloop: drop prose equivalence markers that #21 now forbids • specloop: merge current main into the run before merging (manual; #46 automates this once landed) • specloop: complete task 4.3 • specloop: task 4.3 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.2 • specloop: task 4.2 Complete persisted-baseline/revision and comparison-conflict handling with tests in `tests/test_specloop_base_evidence.py`; run the focused new files and `uv run pytest`, resolving • specloop: complete task 4.1 • specloop: task 4.1 Add the section comparison-baseline helper and wire only the `evidence.gather` call boundary in `specloop/loop.py`, reusing disposable merge construction without changing run refs o • specloop: complete task 3.7 • specloop: task 3.7 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.6 • specloop: task 3.6 Add receipt-recovery regressions in `tests/test_specloop_base_publication.py` for a lost stable publish response and comment failure before/after delivery, using the fixtures from 3 • specloop: complete task 3.5 • specloop: task 3.5 Implement retryable fetch-failure handling in `_publish` and add timeout/failure and CLI format regressions in the new test files, asserting the 20-second fetch budget without waiti • specloop: complete task 3.4 • specloop: task 3.4 Extend new publication integration tests for repeated base advancement and push failure followed by another advance. Verify each publish only fetches and schedules, each preparation • specloop: complete task 3.3 • specloop: task 3.3 Add local publication fixtures and handoff/restart regressions in new `tests/test_specloop_base_publication.py`, driving unchanged `publish_pending` through real CLI status/publish • specloop: complete task 3.2 • specloop: task 3.2 Wire `cli._publish` after `_remote` to fetch once with a 20-second timeout and use a read-only ancestry/obligation predicate. If preparation is needed, atomically save running statu • specloop: complete task 3.1 • specloop: task 3.1 Wire the gate before final checks in `loop.finals`, reload head and retain the unchanged-base fast path; extend new readiness tests and adjust only existing fixture setup that now n • specloop: complete task 2.2 • specloop: task 2.2 Reconcile interrupted integration and verification in the driver gate, bind successful receipts to head, and handle repaired descendants; add restart/failure-injection tests in new • specloop: complete task 2.1 • specloop: task 2.1 Build the driver-only `loop.prepare_publish` gate from the fetch/merge helpers, persist intent before compare-and-swap advancement, invoke the existing trusted verifier and retain a • 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 disposable clean/conflicting merge construction in `specloop/loop.py` using harness identity and two-parent history, plus additive `base_sync` intent loading in `specloop/state. • specloop: complete task 1.1 • specloop: task 1.1 Add the bounded source-origin fetch helper in `specloop/loop.py`, with local-path resolution, explicit base refspec, diagnostic handling and no source mutations; add local bare-orig • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1) • specloop: drop prose equivalence markers that #21 now forbids • specloop: merge current main into the run before merging (manual; #46 automates this once landed) • Merge pull request #63 from mattpolicastro/chore/drop-prose-annotation • Fix main: drop a prose annotation inside a touchpoints docstring • Merge pull request #48 from mattpolicastro/spec/nightshift-issue-21-mutation-testing-skip-cosmetic-literals • Merge pull request #53 from mattpolicastro/spec/nightshift-issue-50-touchpoint-report-count-human-interventi • specloop: archive nightshift-issue-21-mutation-testing-skip-cosmetic-literals into openspec/specs • specloop: archive nightshift-issue-50-touchpoint-report-count-human-interventi into openspec/specs • specloop: complete task 5.2 • specloop: task 5.2 Extend `tests/test_mutation_measurement.py` with host-independent `gather` and `section_evidence` integration tests for filtered selection at concurrency 1 and 2, prepared/unprepare • Merge pull request #62 from mattpolicastro/fix/critic-blocking-classes • specloop: complete task 5.1 • specloop: task 5.1 Change `Evidence.unmeasured` and equivalent-aware `Evidence.summary` in `specloop/evidence.py`. Add `tests/test_mutation_measurement.py` with `test_equivalent_and_timeout_only_evide • Spec critic: block on unplanned migrations, retry gaps and stale operator docs • specloop: complete task 4.2 • specloop: task 4.2 Add read-only/offline invariant assertions in `tests/test_touchpoints.py` around file bytes and directory contents, forbid external calls, and exercise both output modes; run `uv ru • Merge pull request #60 from mattpolicastro/spec/nightshift-issue-58-in-flight-file-map-parse-file-py-functio • specloop: complete task 4.1 • specloop: archive nightshift-issue-58-in-flight-file-map-parse-file-py-functio into openspec/specs • specloop: task 4.1 After #8 has merged (an admission prerequisite), remove prose-only annotations in `nightshift/specloop_job.py`, `nightshift/specloop_client.py`, `specloop/state.py`, and `specloop/e • specloop: complete task 4.1 • specloop: complete task 1.2 • specloop: task 1.2 Extend `paths(text, root=None)` and wire the resolved source root from `in_flight()` in `specloop/propose.py`. In `tests/test_specloop_in_flight_paths.py`, add `test_root_level_file • specloop: task 4.1 Complete record/directory failure isolation and source-location diagnostics in `nightshift/touchpoints.py`; add `test_unreadable_records_are_reported_not_fatal` and compatibility te • Merge pull request #42 from mattpolicastro/spec/nightshift-issue-5-check-who-applied-a-front-door-label • specloop: complete task 1.1 • specloop: archive nightshift-issue-5-check-who-applied-a-front-door-label into openspec/specs • specloop: task 1.1 Update `paths()` in `specloop/propose.py` to normalize single-colon identifier suffixes while preserving existing double-colon, punctuation, prefix-exclusion, wildcard, and deduplic • specloop: merge current main into the run (manual, ahead of #46): brings in #8 for task 4.1 • Draft OpenSpec change nightshift-issue-58-in-flight-file-map-parse-file-py-functio (specloop propose, round 1) • specloop: complete task 3.2 • Merge pull request #57 from mattpolicastro/spec/nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t • specloop: task 3.2 Gate `revise_pending` before feedback/status reads, dispatch, and recovery delivery. Extend the two required tests across spec/build revision, including unauthorized empty feedback, • specloop: archive nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t into openspec/specs • 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: complete task 2.1 • specloop: strengthen section 3 after its evidence check • specloop: task 2.1 Add `test_critic_notes_reach_the_pr_body` in new `tests/test_specloop_critic_delivery.py`, exercising actual proposal/CLI serialization and the unchanged intake delivery path with f • specloop: complete task 1.4 • specloop: task 1.4 Extend `tests/test_specloop_critic_propose.py` with the bounded correction and failure matrix, and fix any corresponding orchestration defects only in `specloop/propose.py` or `spec • specloop: complete task 1.3 • specloop: task 1.3 Integrate the critic after successful feasibility in `specloop/propose.py`, lazily collect and reuse concurrent context, feed all blocking fields into one correction within `rounds` • specloop: complete task 3.2 • specloop: complete task 1.2 • specloop: task 1.2 Add the injectable, bounded `open_pr_files` lookup and deterministic context rendering in `specloop/critic.py`, including pagination, host selection, own-PR exclusion, rename paths, • specloop: task 3.2 Implement `render_table`, argparse `main`, module execution, JSON-only stdout, zero-history output and exit codes in `nightshift/touchpoints.py`; add CLI and subprocess smoke tests • specloop: complete task 1.1 • specloop: task 1.1 Add the checklist prompt and `check` interface in new `specloop/critic.py`, reusing `feasibility.SCHEMA`, the existing read-call conventions, effective change name, extracted candid • specloop: complete task 3.1 • specloop: descope the JSX style filter (task 3.1) • specloop: task 3.1 Implement `collect_report` date provenance, inclusive UTC selection, row/aggregate totals and deterministic version-1 document fields in `nightshift/touchpoints.py`; add `test_touch • specloop: complete task 3.1 • specloop: task 3.1 Gate `admit_pending` before `_approval_covers_head`, preserving integer event IDs and existing admission recovery. Extend the two required tests with admission cases, and add stale- • specloop: complete task 2.3 • specloop: task 2.3 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: complete task 2.3 • specloop: strengthen section 2 after its evidence check • specloop: task 2.3 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 • Draft OpenSpec change nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t (specloop propose, round 1) • specloop: complete task 2.2 • specloop: task 2.2 Preserve today's non-Python comment-prefix exclusions in `specloop/evidence.py` and add only line-level `/* ... */` tracking for blocks whose opening and closing lines are comment-o • specloop: task 2.3 Gate proposal receipt and open-PR recovery delivery without introducing blocker lookups on recovery paths. Add tests in the new recovery file for legacy receipts, an unauthorized re • specloop: complete task 2.1 • specloop: task 2.1 Load candidate files from committed `head` in `gather`, pass complete source to `generate`, and add Python AST/token span filtering in `specloop/evidence.py`. Move Python comment-pr • specloop: complete task 2.2 • specloop: complete task 1.1 • specloop: task 2.2 Gate initial and rearmed drafting in `propose_pending` after blocker checks and before receipt creation or dispatch. Add the draft/ready-alias cases of `test_label_from_non_collabor • specloop: task 1.1 Add and validate `Manifest.mutation_skip` in `specloop/manifest.py`, apply literal whole-line exclusions before sampling in `specloop/evidence.py`, and add `tests/test_mutation_skip • specloop: complete task 2.2 • specloop: merge current main into the run (manual, ahead of #46): brings in #8's background-test rewrite • specloop: task 2.2 Complete scheduled-pause classification, per-task infra recovery accounting that survives manual resumes, unknown reason warnings and broken-log attribution in `nightshift/touchpoin • specloop: complete task 2.1 • specloop: task 2.1 Add event replay, build-revision commit deduplication, pause/resume reason attribution and human-accept counting in `nightshift/touchpoints.py`; add and finish `test_touchpoints_cou • specloop: complete task 1.2 • specloop: task 1.2 Add intake aggregation and receipt/job deduplication in `nightshift/touchpoints.py`, plus tests in `tests/test_touchpoints.py` for each outcome, repeated independent jobs, stripped • specloop: complete task 1.1 • specloop: task 1.1 Add standard-library discovery and record normalization in `nightshift/touchpoints.py`, with temporary-directory tests in the new `tests/test_touchpoints.py` for numeric receipts, r • Draft OpenSpec change nightshift-issue-50-touchpoint-report-count-human-interventi (specloop propose, round 2) • Draft OpenSpec change nightshift-issue-21-mutation-testing-skip-cosmetic-literals (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-21-mutation-testing-skip-cosmetic-literals (specloop propose, round 1) • specloop: complete task 2.1 • specloop: task 2.1 Implement `_authorize_label_events` and `_comment_label_rejection` in `nightshift/specloop_intake.py`, preserving labels and using event-scoped markers without repeat PATCH requests • specloop: complete task 1.2 • specloop: task 1.2 Implement `_label_actor_association` and membership HTTP-status parsing in `nightshift/specloop_intake.py`; add real-trust tests in the new authorization test file for personal owne • specloop: complete task 1.1 • specloop: task 1.1 After #12, extract `_latest_label_events` in `nightshift/specloop_intake.py`, retaining ID-only `_label_events` and `_approval_event` interfaces. Add pagination, reapplication, unla • Draft OpenSpec change nightshift-issue-5-check-who-applied-a-front-door-label (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-5-check-who-applied-a-front-door-label (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 1) • Merge pull request #63 from mattpolicastro/chore/drop-prose-annotation • Fix main: drop a prose annotation inside a touchpoints docstring • specloop: archive nightshift-issue-21-mutation-testing-skip-cosmetic-literals into openspec/specs • specloop: complete task 5.2 • specloop: task 5.2 Extend `tests/test_mutation_measurement.py` with host-independent `gather` and `section_evidence` integration tests for filtered selection at concurrency 1 and 2, prepared/unprepare • specloop: complete task 5.1 • specloop: task 5.1 Change `Evidence.unmeasured` and equivalent-aware `Evidence.summary` in `specloop/evidence.py`. Add `tests/test_mutation_measurement.py` with `test_equivalent_and_timeout_only_evide • specloop: complete task 4.1 • specloop: task 4.1 After #8 has merged (an admission prerequisite), remove prose-only annotations in `nightshift/specloop_job.py`, `nightshift/specloop_client.py`, `specloop/state.py`, and `specloop/e • specloop: merge current main into the run (manual, ahead of #46): brings in #8 for task 4.1 • Merge pull request #57 from mattpolicastro/spec/nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t • specloop: archive nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t into openspec/specs • specloop: complete task 2.1 • specloop: task 2.1 Add `test_critic_notes_reach_the_pr_body` in new `tests/test_specloop_critic_delivery.py`, exercising actual proposal/CLI serialization and the unchanged intake delivery path with f • specloop: complete task 1.4 • specloop: task 1.4 Extend `tests/test_specloop_critic_propose.py` with the bounded correction and failure matrix, and fix any corresponding orchestration defects only in `specloop/propose.py` or `spec • specloop: complete task 1.3 • specloop: task 1.3 Integrate the critic after successful feasibility in `specloop/propose.py`, lazily collect and reuse concurrent context, feed all blocking fields into one correction within `rounds` • specloop: complete task 1.2 • specloop: task 1.2 Add the injectable, bounded `open_pr_files` lookup and deterministic context rendering in `specloop/critic.py`, including pagination, host selection, own-PR exclusion, rename paths, • specloop: complete task 1.1 • specloop: task 1.1 Add the checklist prompt and `check` interface in new `specloop/critic.py`, reusing `feasibility.SCHEMA`, the existing read-call conventions, effective change name, extracted candid • specloop: descope the JSX style filter (task 3.1) • specloop: complete task 2.3 • specloop: task 2.3 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 • Draft OpenSpec change nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t (specloop propose, round 1) • specloop: complete task 2.2 • specloop: task 2.2 Preserve today's non-Python comment-prefix exclusions in `specloop/evidence.py` and add only line-level `/* ... */` tracking for blocks whose opening and closing lines are comment-o • specloop: complete task 2.1 • specloop: task 2.1 Load candidate files from committed `head` in `gather`, pass complete source to `generate`, and add Python AST/token span filtering in `specloop/evidence.py`. Move Python comment-pr • specloop: complete task 1.1 • specloop: task 1.1 Add and validate `Manifest.mutation_skip` in `specloop/manifest.py`, apply literal whole-line exclusions before sampling in `specloop/evidence.py`, and add `tests/test_mutation_skip • Merge pull request #28 from mattpolicastro/spec/nightshift-issue-8-kill-switch-should-stop-running-backgrou • specloop: archive nightshift-issue-8-kill-switch-should-stop-running-backgrou into openspec/specs • Merge pull request #45 from mattpolicastro/spec/nightshift-issue-14-specloop-cli-polish • specloop: archive nightshift-issue-14-specloop-cli-polish into openspec/specs • specloop: adapt #31's section-evidence tests to #14's scenario lookup • specloop: merge current main into the run before publishing (manual, ahead of #46) • specloop: complete task 3.1 • Merge pull request #55 from mattpolicastro/fix/implementer-sandbox-failures • specloop: task 3.1 Add narrowly scoped JSON-aware parser error handling in `specloop/cli.py`, including subparsers and default process argv, returning one version-1 error document with exit status 2 b • specloop: complete task 7.3 • Implementer: a sandbox-only check failure is not a block • specloop: task 7.3 Strengthen the tests so each of these single-line mutations of code added in section 7 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • Merge pull request #54 from mattpolicastro/feat/parallel-tests • specloop: strengthen section 7 after its evidence check • Parallel tests: add pytest-xdist; make the scenario plugin work under it • specloop: complete task 2.1 • specloop: task 2.1 Update recipe rendering in `specloop/loop.py` and `specloop/feasibility.py` to show labeled prepare and verify groups, ordered and expanded commands with shell-safe quoting and expe • specloop: complete task 1.1 • specloop: complete task 7.2 • specloop: task 1.1 Add known-ID filtering in `specloop/tasks.py` and apply it to section evidence and scenario context in `specloop/loop.py`, using scenarios from the evaluated revision while preservi • specloop: task 7.2 Address review feedback 2: "**mattpolicastro:**\n\nClarification on the comment above: you can't merge `main` from the build sandbox, and you don't need to. Write an `idea-<hex>.txt • specloop: complete task 7.1 • specloop: task 7.1 Address review feedback 1: "**mattpolicastro:**\n\nHosted CI fails 8 tests in `tests/test_specloop_background.py`: `test_cancelled_jobs_remain_pending_after_restart_and_resume[*-pro • Draft OpenSpec change nightshift-issue-14-specloop-cli-polish (specloop propose, round 1) • specloop: merge current main into the run before publishing (manual, ahead of #46) • specloop: append review round 1 • specloop: complete task 6.1 • specloop: task 6.1 Update README usage, kill-switch and daemon-unload guidance with list/stop examples, the termination deadlines, legacy identity limitations, stopped-job holds, and the independent s • specloop: complete task 5.2 • specloop: task 5.2 Add restart/resume and cancellation integration regressions in `tests/test_specloop_background.py`: unstopped results deliver once, stopped attempts stay held across resume, and com • specloop: complete task 5.1 • specloop: task 5.1 Audit and, where missing, enforce pause checks in `nightshift/daemon.py` before launch and each external delivery operation. Extend `tests/test_specloop_background.py` with `test_pa • Draft OpenSpec change nightshift-issue-14-specloop-cli-polish (specloop propose, round 1) • specloop: complete task 4.1 • specloop: task 4.1 Extend `nightshift/cli.py` with jobs listing and stop dispatch before configuration loading. Add CLI tests for readable fields, missing/broken config, offline operation, exit codes, • 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 Add the 5 second SIGTERM grace period, SIGKILL escalation, 1 second exit confirmation and error reporting. Test an ignoring descendant, repeated stop, permission errors, unconfirmed • specloop: complete task 3.1 • specloop: task 3.1 Implement exact-ID resolution, ownership verification and `stop_job(state_dir, job_id)` in `nightshift/specloop_job.py`, using the landed stop-state protocol. Add `test_jobs_stop_te • 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 Add per-job control locking, durable stop intent, and serialized wrapper finalization/result collection in `nightshift/specloop_job.py`. Make cancelled collection retain its parent • 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 atomic process identity metadata at wrapper startup and `list_jobs(state_dir)` in `nightshift/specloop_job.py`; test restart discovery, stable ordering, all three stage director • Draft OpenSpec change nightshift-issue-8-kill-switch-should-stop-running-backgrou (specloop propose, round 1) • specloop: archive nightshift-issue-50-touchpoint-report-count-human-interventi into openspec/specs • Merge pull request #60 from mattpolicastro/spec/nightshift-issue-58-in-flight-file-map-parse-file-py-functio • specloop: archive nightshift-issue-58-in-flight-file-map-parse-file-py-functio into openspec/specs • specloop: complete task 1.2 • specloop: task 1.2 Extend `paths(text, root=None)` and wire the resolved source root from `in_flight()` in `specloop/propose.py`. In `tests/test_specloop_in_flight_paths.py`, add `test_root_level_file • specloop: complete task 1.1 • specloop: task 1.1 Update `paths()` in `specloop/propose.py` to normalize single-colon identifier suffixes while preserving existing double-colon, punctuation, prefix-exclusion, wildcard, and deduplic • Draft OpenSpec change nightshift-issue-58-in-flight-file-map-parse-file-py-functio (specloop propose, round 1) • specloop: complete task 1.2 • specloop: task 1.2 Extend `paths(text, root=None)` and wire the resolved source root from `in_flight()` in `specloop/propose.py`. In `tests/test_specloop_in_flight_paths.py`, add `test_root_level_file • specloop: complete task 1.1 • specloop: task 1.1 Update `paths()` in `specloop/propose.py` to normalize single-colon identifier suffixes while preserving existing double-colon, punctuation, prefix-exclusion, wildcard, and deduplic • Merge pull request #42 from mattpolicastro/spec/nightshift-issue-5-check-who-applied-a-front-door-label • specloop: archive nightshift-issue-5-check-who-applied-a-front-door-label into openspec/specs • specloop: complete task 3.2 • specloop: task 3.2 Gate `revise_pending` before feedback/status reads, dispatch, and recovery delivery. Extend the two required tests across spec/build revision, including unauthorized empty feedback, • specloop: complete task 3.1 • specloop: task 3.1 Gate `admit_pending` before `_approval_covers_head`, preserving integer event IDs and existing admission recovery. Extend the two required tests with admission cases, and add stale- • specloop: complete task 2.3 • specloop: task 2.3 Gate proposal receipt and open-PR recovery delivery without introducing blocker lookups on recovery paths. Add tests in the new recovery file for legacy receipts, an unauthorized re • specloop: complete task 2.2 • specloop: task 2.2 Gate initial and rearmed drafting in `propose_pending` after blocker checks and before receipt creation or dispatch. Add the draft/ready-alias cases of `test_label_from_non_collabor • specloop: merge current main into the run (manual, ahead of #46): brings in #8's background-test rewrite • specloop: complete task 2.1 • specloop: task 2.1 Implement `_authorize_label_events` and `_comment_label_rejection` in `nightshift/specloop_intake.py`, preserving labels and using event-scoped markers without repeat PATCH requests • specloop: complete task 1.2 • specloop: task 1.2 Implement `_label_actor_association` and membership HTTP-status parsing in `nightshift/specloop_intake.py`; add real-trust tests in the new authorization test file for personal owne • specloop: complete task 1.1 • specloop: task 1.1 After #12, extract `_latest_label_events` in `nightshift/specloop_intake.py`, retaining ID-only `_label_events` and `_approval_event` interfaces. Add pagination, reapplication, unla • Draft OpenSpec change nightshift-issue-5-check-who-applied-a-front-door-label (specloop propose, round 1) • Draft OpenSpec change nightshift-issue-5-check-who-applied-a-front-door-label (specloop propose, round 1) • specloop: archive nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t into openspec/specs • specloop: complete task 2.1 • specloop: task 2.1 Add `test_critic_notes_reach_the_pr_body` in new `tests/test_specloop_critic_delivery.py`, exercising actual proposal/CLI serialization and the unchanged intake delivery path with f • specloop: complete task 1.4 • specloop: task 1.4 Extend `tests/test_specloop_critic_propose.py` with the bounded correction and failure matrix, and fix any corresponding orchestration defects only in `specloop/propose.py` or `spec • specloop: complete task 1.3 • specloop: task 1.3 Integrate the critic after successful feasibility in `specloop/propose.py`, lazily collect and reuse concurrent context, feed all blocking fields into one correction within `rounds` • specloop: complete task 1.2 • specloop: task 1.2 Add the injectable, bounded `open_pr_files` lookup and deterministic context rendering in `specloop/critic.py`, including pagination, host selection, own-PR exclusion, rename paths, • specloop: complete task 1.1 • specloop: task 1.1 Add the checklist prompt and `check` interface in new `specloop/critic.py`, reusing `feasibility.SCHEMA`, the existing read-call conventions, effective change name, extracted candid • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1) • Merge pull request #28 from mattpolicastro/spec/nightshift-issue-8-kill-switch-should-stop-running-backgrou • specloop: archive nightshift-issue-8-kill-switch-should-stop-running-backgrou into openspec/specs • specloop: complete task 7.3 • specloop: task 7.3 Strengthen the tests so each of these single-line mutations of code added in section 7 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on • specloop: strengthen section 7 after its evidence check • specloop: complete task 7.2 • specloop: task 7.2 Address review feedback 2: "**mattpolicastro:**\n\nClarification on the comment above: you can't merge `main` from the build sandbox, and you don't need to. Write an `idea-<hex>.txt • specloop: complete task 7.1 • specloop: task 7.1 Address review feedback 1: "**mattpolicastro:**\n\nHosted CI fails 8 tests in `tests/test_specloop_background.py`: `test_cancelled_jobs_remain_pending_after_restart_and_resume[*-pro • specloop: merge current main into the run before publishing (manual, ahead of #46) • specloop: append review round 1 • specloop: complete task 6.1 • specloop: task 6.1 Update README usage, kill-switch and daemon-unload guidance with list/stop examples, the termination deadlines, legacy identity limitations, stopped-job holds, and the independent s • specloop: complete task 5.2 • specloop: task 5.2 Add restart/resume and cancellation integration regressions in `tests/test_specloop_background.py`: unstopped results deliver once, stopped attempts stay held across resume, and com • specloop: complete task 5.1 • specloop: task 5.1 Audit and, where missing, enforce pause checks in `nightshift/daemon.py` before launch and each external delivery operation. Extend `tests/test_specloop_background.py` with `test_pa • specloop: complete task 4.1 • specloop: task 4.1 Extend `nightshift/cli.py` with jobs listing and stop dispatch before configuration loading. Add CLI tests for readable fields, missing/broken config, offline operation, exit codes, • 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 Add the 5 second SIGTERM grace period, SIGKILL escalation, 1 second exit confirmation and error reporting. Test an ignoring descendant, repeated stop, permission errors, unconfirmed • specloop: complete task 3.1 • specloop: task 3.1 Implement exact-ID resolution, ownership verification and `stop_job(state_dir, job_id)` in `nightshift/specloop_job.py`, using the landed stop-state protocol. Add `test_jobs_stop_te • 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 Add per-job control locking, durable stop intent, and serialized wrapper finalization/result collection in `nightshift/specloop_job.py`. Make cancelled collection retain its parent • 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 atomic process identity metadata at wrapper startup and `list_jobs(state_dir)` in `nightshift/specloop_job.py`; test restart discovery, stable ordering, all three stage director • Draft OpenSpec change nightshift-issue-8-kill-switch-should-stop-running-backgrou (specloop propose, round 1) • Merge pull request #44 from mattpolicastro/spec/nightshift-issue-31-evidence-track-mutant-timeouts-separatel • specloop: archive nightshift-issue-31-evidence-track-mutant-timeouts-separatel into openspec/specs • specloop: complete task 1.3 • specloop: task 1.3 Add only the integer `timeouts` argument at the existing evidence-event call in `specloop/loop.py:section_evidence`. Add new event and reviewer-context tests in `tests/test_specloop • specloop: complete task 1.2 • specloop: task 1.2 In `specloop/evidence.py`, align the summary's caught fraction with the existing score filter, add the exact nonzero timeout-count line, and correct unmeasured wording while preserv • specloop: complete task 1.1 • specloop: task 1.1 In `specloop/evidence.py`, retain the first non-passing receipt in `_mutate_one`, apply invalid-step precedence, and return/document `timeout` for selected test receipts with null e • Draft OpenSpec change nightshift-issue-31-evidence-track-mutant-timeouts-separatel (specloop propose, round 1) • specloop: archive nightshift-issue-31-evidence-track-mutant-timeouts-separatel into openspec/specs • specloop: complete task 1.3 • specloop: task 1.3 Add only the integer `timeouts` argument at the existing evidence-event call in `specloop/loop.py:section_evidence`. Add new event and reviewer-context tests in `tests/test_specloop • specloop: complete task 1.2 • specloop: task 1.2 In `specloop/evidence.py`, align the summary's caught fraction with the existing score filter, add the exact nonzero timeout-count line, and correct unmeasured wording while preserv • specloop: complete task 1.1 • specloop: task 1.1 In `specloop/evidence.py`, retain the first non-passing receipt in `_mutate_one`, apply invalid-step precedence, and return/document `timeout` for selected test receipts with null e • specloop: complete task 3.1 • specloop: task 3.1 Style Details, Finished and Refresh in `plugins/nightshift/client/factory.tsx`, retaining the tested disclosure spacing, tree relationships and text, and using a decorative non-text • specloop: complete task 2.2 • specloop: task 2.2 In `plugins/nightshift/client/factory.tsx`, place all currently available navigation items in one secondary wrapping row apart from actions and confirmations, preserving Details gat • specloop: complete task 2.1 • specloop: task 2.1 In `plugins/nightshift/client/factory.tsx`, style the nested status chip and muted progress while retaining the exact combined Text content and direct-child change title. Add `statu • specloop: complete task 1.2 • specloop: task 1.2 Reuse the landed button styles for Confirm and Cancel in `plugins/nightshift/client/factory.tsx`. Add rendered confirmation tests in `plugins/nightshift/tests/factory-style.test.ts` • specloop: complete task 1.1 • specloop: task 1.1 In `plugins/nightshift/client/factory.tsx`, add local token-based action styles, minimum 44-by-44 targets, and wrapping, selecting roles from the unchanged `factoryButtons` order wi
View commitsSpec: De-flake test_parallel_mutants_respect_time_box under load
Merged PR in mattpolicastro/nightshift: "Spec: De-flake test_parallel_mutants_respect_time_box under load"
View pull requestSpec: Before publishing, merge the current base and verify again
Merged PR in mattpolicastro/nightshift: "Spec: Before publishing, merge the current base and verify again"
View pull requestFix main: drop a prose annotation inside a touchpoints docstring
Merged PR in mattpolicastro/nightshift: "Fix main: drop a prose annotation inside a touchpoints docstring"
View pull requestSpec: Mutation testing: skip cosmetic literals in UI code
Merged PR in mattpolicastro/nightshift: "Spec: Mutation testing: skip cosmetic literals in UI code"
View pull requestSpec: Touchpoint report: count human interventions per change
Merged PR in mattpolicastro/nightshift: "Spec: Touchpoint report: count human interventions per change"
View pull requestSpec critic: block on unplanned migrations, retry gaps and stale operator docs
Merged PR in mattpolicastro/nightshift: "Spec critic: block on unplanned migrations, retry gaps and stale operator docs"
View pull requestSpec: In-flight file map: parse file.py:function and root-level files
Merged PR in mattpolicastro/nightshift: "Spec: In-flight file map: parse file.py:function and root-level files"
View pull request