Everything's an experiment.

Notes on work, tech, and life.

Recent updates:

GitHubpush

Draft OpenSpec change mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli (specloop propose, round 2)

Pushed 112 commits to mattpolicastro/nightshift • Draft OpenSpec change mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli (specloop propose, round 1) • Draft OpenSpec change mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli (specloop propose, round 1) • Merge pull request #111 from mattpolicastro/spec/mattpolicastro__nightshift-issue-16-retire-the-worker-engine • specloop: archive mattpolicastro__nightshift-issue-16-retire-the-worker-engine into openspec/specs • specloop: complete task 1.13 • specloop: task 1.13 (80–180 added or modified lines) Complete compact integration coverage in `tests/test_daemon_retirement.py`: default config through actual one-shot specloop dispatch, explicit-work • specloop: complete task 1.12 • specloop: task 1.12 (200–290 added or modified lines) Refresh retirement guidance together in `README.md`, `docs/specloop/README.md` and `KNOWN-LIMITATIONS.md`; cross-check `docs/landing.md` and its p • specloop: complete task 1.11 • specloop: task 1.11 (80–170 added or modified lines) Update all of `config.example.toml` for sole-engine enrollment in one task: provide a default-specloop repository with a trusted manifest, remove w • specloop: complete task 1.10 • specloop: task 1.10 (170–290 added or modified lines) Add surviving service and client integration regressions, reusing coverage from 1.8 rather than duplicating it. In `tests/test_daemon_retirement.p • specloop: complete task 1.9 • specloop: task 1.9 (170–290 added or modified lines) Finish inert worker configuration in `nightshift/config.py` after all execution, status and preflight consumers are gone. Remove Endpoint, Assignme • specloop: complete task 1.8 • specloop: task 1.8 (210–300 added or modified lines) Remove the remaining worker-facing CLI/preflight code and migrate the retained mirror dependency before deleting `nightshift/worker.py` in full. In • specloop: complete task 1.7 • specloop: task 1.7 (30–80 added or modified lines) Delete `nightshift/recovery.py`, `nightshift/task.py` and `nightshift/prompts.py` in full now that their production and test callers are gone; delete • specloop: complete task 1.6 • specloop: task 1.6 (180–290 added or modified lines) Retire daemon worker orchestration in `nightshift/daemon.py` as one concern. Rewrite loop to beat/reap/pause/poll/sleep, preserve SIGTERM handling, • specloop: complete task 1.5 • specloop: task 1.5 (230–300 added or modified lines) Change Repo and TOML engine defaults in `nightshift/config.py` to specloop, validate engine before worker verify/endpoint access, and reject worker • specloop: complete task 1.4 • specloop: task 1.4 (80–180 added or modified lines) Retire worker-only test contracts together. Delete `tests/test_concurrency.py`, `tests/test_daemon_loop.py`, `tests/test_max_turns.py`, `tests/test_ • specloop: complete task 1.3 • specloop: task 1.3 (170–260 added or modified lines) Migrate `tests/test_specloop_timeouts.py`’s worker-progress fixture to a second explicit specloop item and heartbeat/reap observations. Preserve th • specloop: complete task 1.2 • specloop: task 1.2 (150–240 added or modified lines) Replace `tests/test_specloop_background.py::test_long_propose_allows_worker_claim_heartbeat_and_harvest` with real detached-proposal coverage obser • specloop: complete task 1.1 • specloop: task 1.1 (190–290 added or modified lines) Migrate mixed-engine health/recovery fixtures in `tests/test_config_resilience.py`, `tests/test_worktree_root_config.py` and `tests/test_engine_swi • Draft OpenSpec change mattpolicastro__nightshift-issue-16-retire-the-worker-engine (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-16-retire-the-worker-engine (specloop propose, round 1) • Draft OpenSpec change mattpolicastro__nightshift-issue-16-retire-the-worker-engine (specloop propose, round 4) • Draft OpenSpec change mattpolicastro__nightshift-issue-16-retire-the-worker-engine (specloop propose, round 3) • Draft OpenSpec change mattpolicastro__nightshift-issue-16-retire-the-worker-engine (specloop propose, round 1) • specloop: archive mattpolicastro__nightshift-issue-16-retire-the-worker-engine into openspec/specs • specloop: complete task 1.13 • specloop: task 1.13 (80–180 added or modified lines) Complete compact integration coverage in `tests/test_daemon_retirement.py`: default config through actual one-shot specloop dispatch, explicit-work • specloop: complete task 1.12 • specloop: task 1.12 (200–290 added or modified lines) Refresh retirement guidance together in `README.md`, `docs/specloop/README.md` and `KNOWN-LIMITATIONS.md`; cross-check `docs/landing.md` and its p • specloop: complete task 1.11 • specloop: task 1.11 (80–170 added or modified lines) Update all of `config.example.toml` for sole-engine enrollment in one task: provide a default-specloop repository with a trusted manifest, remove w • specloop: complete task 1.10 • specloop: task 1.10 (170–290 added or modified lines) Add surviving service and client integration regressions, reusing coverage from 1.8 rather than duplicating it. In `tests/test_daemon_retirement.p • specloop: complete task 1.9 • specloop: task 1.9 (170–290 added or modified lines) Finish inert worker configuration in `nightshift/config.py` after all execution, status and preflight consumers are gone. Remove Endpoint, Assignme • specloop: complete task 1.8 • specloop: task 1.8 (210–300 added or modified lines) Remove the remaining worker-facing CLI/preflight code and migrate the retained mirror dependency before deleting `nightshift/worker.py` in full. In • specloop: complete task 1.7 • specloop: task 1.7 (30–80 added or modified lines) Delete `nightshift/recovery.py`, `nightshift/task.py` and `nightshift/prompts.py` in full now that their production and test callers are gone; delete • specloop: complete task 1.6 • specloop: task 1.6 (180–290 added or modified lines) Retire daemon worker orchestration in `nightshift/daemon.py` as one concern. Rewrite loop to beat/reap/pause/poll/sleep, preserve SIGTERM handling, • specloop: complete task 1.5 • specloop: task 1.5 (230–300 added or modified lines) Change Repo and TOML engine defaults in `nightshift/config.py` to specloop, validate engine before worker verify/endpoint access, and reject worker • specloop: complete task 1.4 • specloop: task 1.4 (80–180 added or modified lines) Retire worker-only test contracts together. Delete `tests/test_concurrency.py`, `tests/test_daemon_loop.py`, `tests/test_max_turns.py`, `tests/test_ • specloop: complete task 1.3 • specloop: task 1.3 (170–260 added or modified lines) Migrate `tests/test_specloop_timeouts.py`’s worker-progress fixture to a second explicit specloop item and heartbeat/reap observations. Preserve th • specloop: complete task 1.2 • specloop: task 1.2 (150–240 added or modified lines) Replace `tests/test_specloop_background.py::test_long_propose_allows_worker_claim_heartbeat_and_harvest` with real detached-proposal coverage obser • specloop: complete task 1.1 • specloop: task 1.1 (190–290 added or modified lines) Migrate mixed-engine health/recovery fixtures in `tests/test_config_resilience.py`, `tests/test_worktree_root_config.py` and `tests/test_engine_swi • Draft OpenSpec change mattpolicastro__nightshift-issue-16-retire-the-worker-engine (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-16-retire-the-worker-engine (specloop propose, round 1) • Merge pull request #110 from mattpolicastro/fix/readiness-ci-refresh • Merge branch 'main' into fix/readiness-ci-refresh • readiness: reassess a CI-blocked assessment each poll until CI clears • Merge branch 'main' into fix/readiness-ci-refresh • Merge pull request #109 from mattpolicastro/spec/mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa • specloop: archive mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa into openspec/specs • Merge current PR base 82e114d3eff32bdaf215c9a963bd7cd4585c9879 • specloop: complete task 1.5 • specloop: task 1.5 Update only invalidated usage, job-control, status-history and retention passages in README.md, KNOWN-LIMITATIONS.md and docs/specloop/README.md (about 160 changed lines). Explain - • specloop: complete task 1.4 • specloop: task 1.4 Wire jobs compact into nightshift/cli.py with tests/test_jobs_cli.py coverage (about 230 changed lines), dispatching before configuration/credentials and using the unfiltered compac • specloop: complete task 1.3 • specloop: task 1.3 Implement compact_history and any minimal internal outcome reporting in nightshift/specloop_job.py with tests/test_specloop_compaction.py coverage (about 300 changed lines). Reuse c • specloop: complete task 1.2 • specloop: task 1.2 Implement default filtering, --all parsing and receipt-based labels in nightshift/cli.py, with tests/test_jobs_cli.py coverage (about 280 changed lines). Add test_jobs_default_hides • specloop: complete task 1.1 • specloop: task 1.1 Add optional receipt metadata to inventory in nightshift/specloop_job.py and focused tests in tests/test_specloop_jobs.py (about 220 changed lines). Preserve default list_jobs consu • Draft OpenSpec change mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa (specloop propose, round 1) • Merge pull request #109 from mattpolicastro/spec/mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa • specloop: archive mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa into openspec/specs • Merge current PR base 82e114d3eff32bdaf215c9a963bd7cd4585c9879 • specloop: complete task 1.5 • specloop: task 1.5 Update only invalidated usage, job-control, status-history and retention passages in README.md, KNOWN-LIMITATIONS.md and docs/specloop/README.md (about 160 changed lines). Explain - • specloop: complete task 1.4 • specloop: task 1.4 Wire jobs compact into nightshift/cli.py with tests/test_jobs_cli.py coverage (about 230 changed lines), dispatching before configuration/credentials and using the unfiltered compac • specloop: complete task 1.3 • specloop: task 1.3 Implement compact_history and any minimal internal outcome reporting in nightshift/specloop_job.py with tests/test_specloop_compaction.py coverage (about 300 changed lines). Reuse c • specloop: complete task 1.2 • specloop: task 1.2 Implement default filtering, --all parsing and receipt-based labels in nightshift/cli.py, with tests/test_jobs_cli.py coverage (about 280 changed lines). Add test_jobs_default_hides • specloop: complete task 1.1 • specloop: task 1.1 Add optional receipt metadata to inventory in nightshift/specloop_job.py and focused tests in tests/test_specloop_jobs.py (about 220 changed lines). Preserve default list_jobs consu • Draft OpenSpec change mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa (specloop propose, round 1) • specloop: archive mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa into openspec/specs • Merge current PR base 82e114d3eff32bdaf215c9a963bd7cd4585c9879 • specloop: complete task 1.5 • specloop: task 1.5 Update only invalidated usage, job-control, status-history and retention passages in README.md, KNOWN-LIMITATIONS.md and docs/specloop/README.md (about 160 changed lines). Explain - • specloop: complete task 1.4 • specloop: task 1.4 Wire jobs compact into nightshift/cli.py with tests/test_jobs_cli.py coverage (about 230 changed lines), dispatching before configuration/credentials and using the unfiltered compac • specloop: complete task 1.3 • specloop: task 1.3 Implement compact_history and any minimal internal outcome reporting in nightshift/specloop_job.py with tests/test_specloop_compaction.py coverage (about 300 changed lines). Reuse c • specloop: complete task 1.2 • specloop: task 1.2 Implement default filtering, --all parsing and receipt-based labels in nightshift/cli.py, with tests/test_jobs_cli.py coverage (about 280 changed lines). Add test_jobs_default_hides • specloop: complete task 1.1 • specloop: task 1.1 Add optional receipt metadata to inventory in nightshift/specloop_job.py and focused tests in tests/test_specloop_jobs.py (about 220 changed lines). Preserve default list_jobs consu • Merge pull request #108 from mattpolicastro/fix/readiness-publication-checks • Merge branch 'main' into fix/readiness-publication-checks • readiness: front-door PRs take human checks from the publication

View commits
GitHubpr merged

CLAUDE.md: describe the specloop-only project after the worker retirement

Merged PR in mattpolicastro/nightshift: "CLAUDE.md: describe the specloop-only project after the worker retirement"

View pull request
GitHubpr merged

Spec: Retire the worker engine

Merged PR in mattpolicastro/nightshift: "Spec: Retire the worker engine"

View pull request
GitHubpr merged

readiness: reassess a CI-blocked assessment each poll until CI clears

Merged PR in mattpolicastro/nightshift: "readiness: reassess a CI-blocked assessment each poll until CI clears"

View pull request
GitHubpr merged

Spec: nightshift jobs: show active work by default; compact delivered history

Merged PR in mattpolicastro/nightshift: "Spec: nightshift jobs: show active work by default; compact delivered history"

View pull request
GitHubpush

Merge pull request #108 from mattpolicastro/fix/readiness-publication-checks

Pushed 283 commits to mattpolicastro/nightshift • Merge branch 'main' into fix/readiness-publication-checks • readiness: front-door PRs take human checks from the publication • Merge branch 'main' into fix/readiness-publication-checks • Merge pull request #102 from mattpolicastro/spec/mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent • specloop: archive mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent into openspec/specs • Merge current PR base 07a446be6f5c5a7e0ecc2f7fa36956debd8369a0 • Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5 • specloop: complete task 1.8 • specloop: task 1.8 Update specloop passages in `README.md`, `docs/specloop/README.md`, `docs/specloop/command-json.md` and `KNOWN-LIMITATIONS.md` to the shipped keyed contract and qualified crash limi • specloop: complete task 1.7 • specloop: task 1.7 Add deterministic real-process recovery coverage in new `tests/test_revision_crash_subprocess.py`, including `test_revise_retry_after_commit_does_not_duplicate_round` (target 240–30 • specloop: complete task 1.6 • specloop: task 1.6 Validate keyed success and render observed-state delivery in `nightshift/specloop_intake.py`; add new `tests/test_revision_replay_delivery.py` (target 180–250 lines). Reject wrong/m • specloop: complete task 1.5 • specloop: task 1.5 Wire saved UUID build-round identities and retry selection in `nightshift/specloop_intake.py` (provenance agreement is checked only at replacement dispatch and replay; see the desig • specloop: scope provenance validation to dispatch and replay decisions (descope tamper-defense after review loop) • specloop: complete task 1.4 • specloop: task 1.4 Extend `nightshift/specloop_job.py` for six-field requests, prelaunch `round_job` provenance, validated coordinated provenance reads/successor persistence, and compactor key retenti • specloop: complete task 1.3 • specloop: task 1.3 Wire optional --round-id and keyed JSON/human output in `specloop/cli.py`, with new `tests/test_revise_round_cli.py` and `tests/revision_result_fixtures.py` (target 250–300 changed • specloop: complete task 1.2 • specloop: task 1.2 Integrate prepared records and replay into `specloop/revise.py`, retaining the string-returning API and adding the structured result entry point; add new `tests/test_revise_idempote • specloop: complete task 1.1 • specloop: task 1.1 Add the durable revision-record helper in `specloop/revision_store.py` and focused tests in new `tests/test_revision_store.py` (target 240–290 changed lines including tests). Implem • Draft OpenSpec change mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent (specloop propose, round 1) • Merge pull request #102 from mattpolicastro/spec/mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent • specloop: archive mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent into openspec/specs • Merge current PR base 07a446be6f5c5a7e0ecc2f7fa36956debd8369a0 • Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5 • specloop: complete task 1.8 • specloop: task 1.8 Update specloop passages in `README.md`, `docs/specloop/README.md`, `docs/specloop/command-json.md` and `KNOWN-LIMITATIONS.md` to the shipped keyed contract and qualified crash limi • specloop: complete task 1.7 • specloop: task 1.7 Add deterministic real-process recovery coverage in new `tests/test_revision_crash_subprocess.py`, including `test_revise_retry_after_commit_does_not_duplicate_round` (target 240–30 • specloop: complete task 1.6 • specloop: task 1.6 Validate keyed success and render observed-state delivery in `nightshift/specloop_intake.py`; add new `tests/test_revision_replay_delivery.py` (target 180–250 lines). Reject wrong/m • specloop: complete task 1.5 • specloop: task 1.5 Wire saved UUID build-round identities and retry selection in `nightshift/specloop_intake.py` (provenance agreement is checked only at replacement dispatch and replay; see the desig • specloop: scope provenance validation to dispatch and replay decisions (descope tamper-defense after review loop) • specloop: complete task 1.4 • specloop: task 1.4 Extend `nightshift/specloop_job.py` for six-field requests, prelaunch `round_job` provenance, validated coordinated provenance reads/successor persistence, and compactor key retenti • specloop: complete task 1.3 • specloop: task 1.3 Wire optional --round-id and keyed JSON/human output in `specloop/cli.py`, with new `tests/test_revise_round_cli.py` and `tests/revision_result_fixtures.py` (target 250–300 changed • specloop: complete task 1.2 • specloop: task 1.2 Integrate prepared records and replay into `specloop/revise.py`, retaining the string-returning API and adding the structured result entry point; add new `tests/test_revise_idempote • specloop: complete task 1.1 • specloop: task 1.1 Add the durable revision-record helper in `specloop/revision_store.py` and focused tests in new `tests/test_revision_store.py` (target 240–290 changed lines including tests). Implem • Draft OpenSpec change mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent (specloop propose, round 1) • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent • Merge pull request #105 from mattpolicastro/spec/mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that • specloop: archive mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that into openspec/specs • Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5 • specloop: complete task 1.8 • specloop: task 1.8 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 1.7 • specloop: task 1.7 Add tagged tests covering `merge-readiness/local-evidence-assessment/any-timeout-blocks`, `merge-readiness/local-evidence-assessment/measured-sections-pass`, `merge-readiness/local- • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.6 • specloop: task 1.6 Adapt non-conflicting publication fixture/fake setup and only the authorized assertion groups in `tests/test_specloop_base_publication.py` (original lines 158–159, 302, 315–316), ad • specloop: complete task 1.5 • specloop: task 1.5 Integrate readiness only into `publish_pending`'s already-delivered `human_checks` path, implement head/cache invalidation, and add new `tests/test_merge_readiness_polling.py` (targ • specloop: complete task 1.4 • specloop: task 1.4 Implement separate atomic readiness receipts and label/comment reconciliation in intake, with new `tests/test_merge_readiness_delivery.py` (target at most 300 lines). Exercise the r • specloop: complete task 1.3 • specloop: task 1.3 Implement single-query CI classification and assessment composition in intake, with new `tests/test_merge_readiness_assessment.py` (target 200–250 lines). Test the injected string r • specloop: complete task 1.2 • specloop: task 1.2 Implement checklist/post-deploy detection by the design's line rules (no Markdown, fence or HTML parsing; anything the line rules cannot establish blocks) and read-only pending-revi • specloop: checklist and scenario detection by line rules, not Markdown parsing (descope after four review rounds) • specloop: complete task 1.1 • specloop: task 1.1 Implement local section/evidence classification in `nightshift/specloop_intake.py` and new `tests/test_merge_readiness_evidence.py`, with reusable minimal local-run fixtures in new • Draft OpenSpec change mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that (specloop propose, round 1) • specloop: archive mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent into openspec/specs • Merge pull request #105 from mattpolicastro/spec/mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that • specloop: archive mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that into openspec/specs • Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5 • specloop: complete task 1.8 • specloop: task 1.8 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 1.7 • specloop: task 1.7 Add tagged tests covering `merge-readiness/local-evidence-assessment/any-timeout-blocks`, `merge-readiness/local-evidence-assessment/measured-sections-pass`, `merge-readiness/local- • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.6 • specloop: task 1.6 Adapt non-conflicting publication fixture/fake setup and only the authorized assertion groups in `tests/test_specloop_base_publication.py` (original lines 158–159, 302, 315–316), ad • specloop: complete task 1.5 • specloop: task 1.5 Integrate readiness only into `publish_pending`'s already-delivered `human_checks` path, implement head/cache invalidation, and add new `tests/test_merge_readiness_polling.py` (targ • specloop: complete task 1.4 • specloop: task 1.4 Implement separate atomic readiness receipts and label/comment reconciliation in intake, with new `tests/test_merge_readiness_delivery.py` (target at most 300 lines). Exercise the r • specloop: complete task 1.3 • specloop: task 1.3 Implement single-query CI classification and assessment composition in intake, with new `tests/test_merge_readiness_assessment.py` (target 200–250 lines). Test the injected string r • specloop: complete task 1.2 • specloop: task 1.2 Implement checklist/post-deploy detection by the design's line rules (no Markdown, fence or HTML parsing; anything the line rules cannot establish blocks) and read-only pending-revi • specloop: checklist and scenario detection by line rules, not Markdown parsing (descope after four review rounds) • specloop: complete task 1.1 • specloop: task 1.1 Implement local section/evidence classification in `nightshift/specloop_intake.py` and new `tests/test_merge_readiness_evidence.py`, with reusable minimal local-run fixtures in new • Draft OpenSpec change mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that (specloop propose, round 1) • Merge current PR base 07a446be6f5c5a7e0ecc2f7fa36956debd8369a0 • Merge pull request #107 from mattpolicastro/fix/narrowing-test-timeout • tests: give narrowing phase fixtures 3 s, not 0.5 s • Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5 • specloop: complete task 1.8 • specloop: task 1.8 Update specloop passages in `README.md`, `docs/specloop/README.md`, `docs/specloop/command-json.md` and `KNOWN-LIMITATIONS.md` to the shipped keyed contract and qualified crash limi • specloop: complete task 1.7 • specloop: task 1.7 Add deterministic real-process recovery coverage in new `tests/test_revision_crash_subprocess.py`, including `test_revise_retry_after_commit_does_not_duplicate_round` (target 240–30 • specloop: complete task 1.6 • specloop: task 1.6 Validate keyed success and render observed-state delivery in `nightshift/specloop_intake.py`; add new `tests/test_revision_replay_delivery.py` (target 180–250 lines). Reject wrong/m • specloop: complete task 1.5 • specloop: task 1.5 Wire saved UUID build-round identities and retry selection in `nightshift/specloop_intake.py` (provenance agreement is checked only at replacement dispatch and replay; see the desig • specloop: scope provenance validation to dispatch and replay decisions (descope tamper-defense after review loop) • Merge pull request #106 from mattpolicastro/fix/drafter-line-rules • propose: specify rich-text structure by line rules, never semantic parsing • specloop: complete task 1.4 • specloop: task 1.4 Extend `nightshift/specloop_job.py` for six-field requests, prelaunch `round_job` provenance, validated coordinated provenance reads/successor persistence, and compactor key retenti • specloop: complete task 1.3 • specloop: task 1.3 Wire optional --round-id and keyed JSON/human output in `specloop/cli.py`, with new `tests/test_revise_round_cli.py` and `tests/revision_result_fixtures.py` (target 250–300 changed • specloop: complete task 1.2 • specloop: task 1.2 Integrate prepared records and replay into `specloop/revise.py`, retaining the string-returning API and adding the structured result entry point; add new `tests/test_revise_idempote • Merge pull request #104 from mattpolicastro/fix/arm-owner-qualified • specloop: complete task 1.1 • arm: attribute owner-qualified run names to their issue • specloop: task 1.1 Add the durable revision-record helper in `specloop/revision_store.py` and focused tests in new `tests/test_revision_store.py` (target 240–290 changed lines including tests). Implem • Merge pull request #100 from mattpolicastro/spec/mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le • specloop: archive mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le into openspec/specs • Merge current PR base aa8cfb89724328b5f8c95d3d50041e2a3ee8f9b9 • specloop: complete task 2.1 • specloop: task 2.1 The base merge brought in #9's job identity rules, and `test_daemon_delivers_a_fallback_ref_proposal` now fails in its background cases with `KeyError: 'delivered'`. Update only the • specloop: add a task adapting the background fixture to #9's job identity (base drift) • Merge current PR base fda70c4ef0a1cb9b8ba120b72c835d374fcf7701 • specloop: complete task 1.2 • specloop: task 1.2 Set successful proposal JSON `branch` from `publish_branch`'s return value in `specloop/cli.py`. Add `test_propose_json_reports_real_ref` in `tests/test_specloop_command_json.py` an • specloop: complete task 1.1 • specloop: task 1.1 Extend `nightshift/specloop_intake.py` proposal-result validation to accept the two exact refs for the recorded change through direct and background completion, preserving commit-pi • Draft OpenSpec change mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le (specloop propose, round 1) • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that • Merge pull request #107 from mattpolicastro/fix/narrowing-test-timeout • tests: give narrowing phase fixtures 3 s, not 0.5 s • Merge pull request #107 from mattpolicastro/fix/narrowing-test-timeout • tests: give narrowing phase fixtures 3 s, not 0.5 s • specloop: archive mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that into openspec/specs • Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5 • specloop: complete task 1.8 • specloop: task 1.8 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 1.7 • specloop: task 1.7 Add tagged tests covering `merge-readiness/local-evidence-assessment/any-timeout-blocks`, `merge-readiness/local-evidence-assessment/measured-sections-pass`, `merge-readiness/local- • specloop: strengthen section 1 after its evidence check • specloop: complete task 1.6 • specloop: task 1.6 Adapt non-conflicting publication fixture/fake setup and only the authorized assertion groups in `tests/test_specloop_base_publication.py` (original lines 158–159, 302, 315–316), ad • specloop: complete task 1.5 • specloop: task 1.5 Integrate readiness only into `publish_pending`'s already-delivered `human_checks` path, implement head/cache invalidation, and add new `tests/test_merge_readiness_polling.py` (targ • specloop: complete task 1.4 • specloop: task 1.4 Implement separate atomic readiness receipts and label/comment reconciliation in intake, with new `tests/test_merge_readiness_delivery.py` (target at most 300 lines). Exercise the r • specloop: complete task 1.3 • specloop: task 1.3 Implement single-query CI classification and assessment composition in intake, with new `tests/test_merge_readiness_assessment.py` (target 200–250 lines). Test the injected string r • specloop: complete task 1.2 • specloop: task 1.2 Implement checklist/post-deploy detection by the design's line rules (no Markdown, fence or HTML parsing; anything the line rules cannot establish blocks) and read-only pending-revi • Merge pull request #106 from mattpolicastro/fix/drafter-line-rules • propose: specify rich-text structure by line rules, never semantic parsing • specloop: checklist and scenario detection by line rules, not Markdown parsing (descope after four review rounds) • specloop: complete task 1.1 • specloop: task 1.1 Implement local section/evidence classification in `nightshift/specloop_intake.py` and new `tests/test_merge_readiness_evidence.py`, with reusable minimal local-run fixtures in new • Merge pull request #104 from mattpolicastro/fix/arm-owner-qualified • arm: attribute owner-qualified run names to their issue • Merge pull request #106 from mattpolicastro/fix/drafter-line-rules • propose: specify rich-text structure by line rules, never semantic parsing • Merge pull request #104 from mattpolicastro/fix/arm-owner-qualified • arm: attribute owner-qualified run names to their issue • Merge pull request #100 from mattpolicastro/spec/mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le • specloop: archive mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le into openspec/specs • Merge current PR base aa8cfb89724328b5f8c95d3d50041e2a3ee8f9b9 • specloop: complete task 2.1 • specloop: task 2.1 The base merge brought in #9's job identity rules, and `test_daemon_delivers_a_fallback_ref_proposal` now fails in its background cases with `KeyError: 'delivered'`. Update only the • specloop: add a task adapting the background fixture to #9's job identity (base drift) • Merge current PR base fda70c4ef0a1cb9b8ba120b72c835d374fcf7701 • specloop: complete task 1.2 • specloop: task 1.2 Set successful proposal JSON `branch` from `publish_branch`'s return value in `specloop/cli.py`. Add `test_propose_json_reports_real_ref` in `tests/test_specloop_command_json.py` an • specloop: complete task 1.1 • specloop: task 1.1 Extend `nightshift/specloop_intake.py` proposal-result validation to accept the two exact refs for the recorded change through direct and background completion, preserving commit-pi • Draft OpenSpec change mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le (specloop propose, round 1) • specloop: archive mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le into openspec/specs • Merge current PR base aa8cfb89724328b5f8c95d3d50041e2a3ee8f9b9 • specloop: complete task 2.1 • specloop: task 2.1 The base merge brought in #9's job identity rules, and `test_daemon_delivers_a_fallback_ref_proposal` now fails in its background cases with `KeyError: 'delivered'`. Update only the • Merge pull request #101 from mattpolicastro/fix/draft-base • specloop: add a task adapting the background fixture to #9's job identity (base drift) • Merge current PR base fda70c4ef0a1cb9b8ba120b72c835d374fcf7701 • tests: tolerate EPERM when tearing down an already-reaped process group • specloop: complete task 1.2 • specloop: task 1.2 Set successful proposal JSON `branch` from `publish_branch`'s return value in `specloop/cli.py`. Add `test_propose_json_reports_real_ref` in `tests/test_specloop_command_json.py` an • propose: draft from the newest base, resolved in the source • specloop: complete task 1.1 • specloop: task 1.1 Extend `nightshift/specloop_intake.py` proposal-result validation to accept the two exact refs for the recorded change through direct and background completion, preserving commit-pi • Merge pull request #99 from mattpolicastro/feat/codex-profile-auth • Merge branch 'main' into feat/codex-profile-auth • Merge pull request #98 from mattpolicastro/spec/mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line • specloop: archive mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line into openspec/specs • codex profiles can name their own login (API credits); seal scans every codex login • specloop: complete task 1.8 • specloop: task 1.8 Update affected job passages in `README.md`, `KNOWN-LIMITATIONS.md` and `docs/specloop/README.md`, explicitly including the guide's drafting-round input text around lines 59–64 and • specloop: complete task 1.7 • specloop: task 1.7 Implement `specloop_intake.run_git`, route `_bounded_run` git defaults through it, and substitute the guarded production git runner in `nightshift/daemon.py` without other daemon ch • specloop: complete task 1.6 • specloop: task 1.6 Add `_recover_item_cleanup(path)` and pre-replacement journal preparation in `nightshift/specloop_intake.py`, plus journal resumption through the shared compaction primitive in `nig • specloop: complete task 1.5 • specloop: task 1.5 Integrate the shared delivery completion helper in `nightshift/specloop_intake.py` across proposal, admission, spec revision and build revision (target 250–300 changed lines includi • specloop: complete task 1.4 • specloop: task 1.4 Implement the identity-checked compaction primitive and attempt-local journal in `nightshift/specloop_job.py`, including lock ordering, exact owned-file deletion, idea-argument reda • specloop: complete task 1.3 • specloop: task 1.3 Add active-job status rendering in `nightshift/cli.py` using one read-only inventory call before network queries, with elapsed/deadline/legacy and diagnostic handling (target 150–20 • specloop: complete task 1.2 • specloop: task 1.2 Implement live-job deadline observation and `JobOverdue` in `nightshift/specloop_job.py`, map it to the existing immediate `DeliveryError` reporting path in `nightshift/specloop_int • specloop: complete task 1.1 • specloop: task 1.1 Persist and read durable command timing in `nightshift/specloop_job.py` with the exact five-field schema, fixed per-command budgets, restart stability and legacy/malformed-record ha • Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 1) • Merge pull request #101 from mattpolicastro/fix/draft-base • tests: tolerate EPERM when tearing down an already-reaped process group • propose: draft from the newest base, resolved in the source • tests: tolerate EPERM when tearing down an already-reaped process group • Merge pull request #99 from mattpolicastro/feat/codex-profile-auth • Merge branch 'main' into feat/codex-profile-auth • codex profiles can name their own login (API credits); seal scans every codex login • Merge branch 'main' into feat/codex-profile-auth • Merge pull request #98 from mattpolicastro/spec/mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line • specloop: archive mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line into openspec/specs • specloop: complete task 1.8 • specloop: task 1.8 Update affected job passages in `README.md`, `KNOWN-LIMITATIONS.md` and `docs/specloop/README.md`, explicitly including the guide's drafting-round input text around lines 59–64 and • specloop: complete task 1.7 • specloop: task 1.7 Implement `specloop_intake.run_git`, route `_bounded_run` git defaults through it, and substitute the guarded production git runner in `nightshift/daemon.py` without other daemon ch • specloop: complete task 1.6 • specloop: task 1.6 Add `_recover_item_cleanup(path)` and pre-replacement journal preparation in `nightshift/specloop_intake.py`, plus journal resumption through the shared compaction primitive in `nig • specloop: complete task 1.5 • specloop: task 1.5 Integrate the shared delivery completion helper in `nightshift/specloop_intake.py` across proposal, admission, spec revision and build revision (target 250–300 changed lines includi • specloop: complete task 1.4 • specloop: task 1.4 Implement the identity-checked compaction primitive and attempt-local journal in `nightshift/specloop_job.py`, including lock ordering, exact owned-file deletion, idea-argument reda • specloop: complete task 1.3 • specloop: task 1.3 Add active-job status rendering in `nightshift/cli.py` using one read-only inventory call before network queries, with elapsed/deadline/legacy and diagnostic handling (target 150–20 • specloop: complete task 1.2 • specloop: task 1.2 Implement live-job deadline observation and `JobOverdue` in `nightshift/specloop_job.py`, map it to the existing immediate `DeliveryError` reporting path in `nightshift/specloop_int • specloop: complete task 1.1 • specloop: task 1.1 Persist and read durable command timing in `nightshift/specloop_job.py` with the exact five-field schema, fixed per-command budgets, restart stability and legacy/malformed-record ha • Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 1) • Merge pull request #98 from mattpolicastro/spec/mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line • specloop: archive mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line into openspec/specs • specloop: complete task 1.8 • specloop: task 1.8 Update affected job passages in `README.md`, `KNOWN-LIMITATIONS.md` and `docs/specloop/README.md`, explicitly including the guide's drafting-round input text around lines 59–64 and • specloop: complete task 1.7 • specloop: task 1.7 Implement `specloop_intake.run_git`, route `_bounded_run` git defaults through it, and substitute the guarded production git runner in `nightshift/daemon.py` without other daemon ch • specloop: complete task 1.6 • specloop: task 1.6 Add `_recover_item_cleanup(path)` and pre-replacement journal preparation in `nightshift/specloop_intake.py`, plus journal resumption through the shared compaction primitive in `nig • specloop: complete task 1.5 • specloop: task 1.5 Integrate the shared delivery completion helper in `nightshift/specloop_intake.py` across proposal, admission, spec revision and build revision (target 250–300 changed lines includi • specloop: complete task 1.4 • specloop: task 1.4 Implement the identity-checked compaction primitive and attempt-local journal in `nightshift/specloop_job.py`, including lock ordering, exact owned-file deletion, idea-argument reda • specloop: complete task 1.3 • specloop: task 1.3 Add active-job status rendering in `nightshift/cli.py` using one read-only inventory call before network queries, with elapsed/deadline/legacy and diagnostic handling (target 150–20 • specloop: complete task 1.2 • specloop: task 1.2 Implement live-job deadline observation and `JobOverdue` in `nightshift/specloop_job.py`, map it to the existing immediate `DeliveryError` reporting path in `nightshift/specloop_int • specloop: complete task 1.1 • specloop: task 1.1 Persist and read durable command timing in `nightshift/specloop_job.py` with the exact five-field schema, fixed per-command budgets, restart stability and legacy/malformed-record ha • Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 1) • specloop: archive mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line into openspec/specs • specloop: complete task 1.8 • specloop: task 1.8 Update affected job passages in `README.md`, `KNOWN-LIMITATIONS.md` and `docs/specloop/README.md`, explicitly including the guide's drafting-round input text around lines 59–64 and • specloop: complete task 1.7 • specloop: task 1.7 Implement `specloop_intake.run_git`, route `_bounded_run` git defaults through it, and substitute the guarded production git runner in `nightshift/daemon.py` without other daemon ch • specloop: complete task 1.6 • specloop: task 1.6 Add `_recover_item_cleanup(path)` and pre-replacement journal preparation in `nightshift/specloop_intake.py`, plus journal resumption through the shared compaction primitive in `nig • specloop: complete task 1.5 • specloop: task 1.5 Integrate the shared delivery completion helper in `nightshift/specloop_intake.py` across proposal, admission, spec revision and build revision (target 250–300 changed lines includi • specloop: complete task 1.4 • specloop: task 1.4 Implement the identity-checked compaction primitive and attempt-local journal in `nightshift/specloop_job.py`, including lock ordering, exact owned-file deletion, idea-argument reda • specloop: complete task 1.3 • specloop: task 1.3 Add active-job status rendering in `nightshift/cli.py` using one read-only inventory call before network queries, with elapsed/deadline/legacy and diagnostic handling (target 150–20 • specloop: complete task 1.2 • specloop: task 1.2 Implement live-job deadline observation and `JobOverdue` in `nightshift/specloop_job.py`, map it to the existing immediate `DeliveryError` reporting path in `nightshift/specloop_int • specloop: complete task 1.1 • specloop: task 1.1 Persist and read durable command timing in `nightshift/specloop_job.py` with the exact five-field schema, fixed per-command budgets, restart stability and legacy/malformed-record ha

View commits
GitHubpr merged

readiness: front-door PRs take human checks from the publication

Merged PR in mattpolicastro/nightshift: "readiness: front-door PRs take human checks from the publication"

View pull request
GitHubpr merged

Spec: Make revise rounds idempotent

Merged PR in mattpolicastro/nightshift: "Spec: Make revise rounds idempotent"

View pull request
GitHubpr merged

Spec: Merge readiness: flag front-door PRs that are safe to merge

Merged PR in mattpolicastro/nightshift: "Spec: Merge readiness: flag front-door PRs that are safe to merge"

View pull request
GitHubpr merged

tests: narrowing phase fixtures get 3 s, not 0.5 s (load flake)

Merged PR in mattpolicastro/nightshift: "tests: narrowing phase fixtures get 3 s, not 0.5 s (load flake)"

View pull request
Browse the archive