migrate: a completed migration needs no writer exclusion
Merged PR in mattpolicastro/nightshift: "migrate: a completed migration needs no writer exclusion"
View pull requestNotes on work, tech, and life.
migrate: a completed migration needs no writer exclusion
Merged PR in mattpolicastro/nightshift: "migrate: a completed migration needs no writer exclusion"
View pull requestMerge pull request #119 from mattpolicastro/spec/mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir
Pushed 116 commits to mattpolicastro/nightshift • specloop: archive mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir into openspec/specs • specloop: complete task 1.2 • specloop: task 1.2 Update the run-state passage in `docs/specloop/README.md` and one Open gaps entry in `KNOWN-LIMITATIONS.md` to match landed cleanup, stderr events, retained evidence/verify builds, • specloop: complete task 1.1 • specloop: task 1.1 Implement Codex-only cleanup in `specloop/agents/codex.py` with tests in new `tests/test_session_tmpdir.py`, keeping the concern within about 300 changed lines. Wrap creation, `_hom • Draft OpenSpec change mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir (specloop propose, round 1) • Draft OpenSpec change mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir (specloop propose, round 3) • Draft OpenSpec change mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir (specloop propose, round 2) • specloop: complete task 1.2 • specloop: task 1.2 Update the run-state passage in `docs/specloop/README.md` and one Open gaps entry in `KNOWN-LIMITATIONS.md` to match landed cleanup, stderr events, retained evidence/verify builds, • specloop: complete task 1.1 • specloop: task 1.1 Implement Codex-only cleanup in `specloop/agents/codex.py` with tests in new `tests/test_session_tmpdir.py`, keeping the concern within about 300 changed lines. Wrap creation, `_hom • Draft OpenSpec change mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir (specloop propose, round 1) • Merge pull request #114 from mattpolicastro/docs/claude-md-after-rename • CLAUDE.md: describe the unified CLI and state root after #40 • Merge pull request #113 from mattpolicastro/spec/mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli • specloop: archive mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli into openspec/specs • Fix three CI-only failures: Python 3.12 metadata calls and a no-op chmod probe • specloop: complete task 3.5 • specloop: task 3.5 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.4 • specloop: task 3.4 Align setup and rollout docs and finish acceptance (target 300 lines). Update KNOWN-LIMITATIONS.md, docs/specloop/prepare.md, docs/landing.md, plugins/nightshift/README.md, docs/val • specloop: complete task 3.3 • specloop: task 3.3 Align core guides and structural command checks (target 300 lines including existing-test migration). Update active README.md, docs/specloop/README.md and command-json.md commands/s • specloop: complete task 3.2 • specloop: task 3.2 Align notifications while preserving frozen service contracts (target 240 lines). Migrate specloop/messages.py and remaining emitted CLI/recovery hints in cli.py/serve.py to canonic • specloop: complete task 3.1 • specloop: task 3.1 Migrate Factory commands and detail text (target 220 lines). Update plugins/nightshift/server/factory.ts and client/factory-model.ts More detail command, plus exact-argv/client test • specloop: complete task 2.12 • specloop: task 2.12 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 o • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.11 • specloop: task 2.11 Migrate remaining read consumers (target 240 lines). Update specloop/propose.py, nightshift/timings.py, touchpoints.py and deploy.py defaults/discovery to resolver-backed mixed-roo • specloop: complete task 2.10 • specloop: task 2.10 Exercise generated multi-repository migration evidence (target 300 lines). Generate sanitized temporary copies shaped like real runs from several repositories, including Phreak/Com • specloop: complete task 2.9 • specloop: task 2.9 Activate migration-only CLI and startup fallback (target 230 lines). Expose nightshift migrate and connect serve startup to the migration helper while reusing the owned serve lock b • specloop: complete task 2.8 • specloop: task 2.8 Migrate revision recovery fixtures before activation (target 230 lines). Update tests/test_revision_crash_subprocess.py:36–37,83–97,104–108 to derive run directory/roots in each pro • specloop: complete task 2.7 • specloop: task 2.7 Recover interrupted relocation and mark completion (target 290 lines). Complete the journal phase machine and atomic marker handling in migrate.py. Add fresh-process exits around re • specloop: complete task 2.6 • specloop: task 2.6 Relocate entries and preserve symlink destinations (target 300 lines). Implement the preflighted same-filesystem rename and legacy per-entry link primitive in migrate.py with journa • specloop: complete task 2.5 • specloop: task 2.5 Add coordination, journal intent and preflight (target 290 lines). Extend state_locks.py with shared writer/exclusive migration coordination in the specified lock order; wrap produc • specloop: complete task 2.4 • specloop: task 2.4 Establish supervisor ownership (target 220 lines). Add stable serve-lock helpers in specloop/state_locks.py and lifetime ownership in serve.py, plus canonical/legacy heartbeat looku • specloop: complete task 2.3 • specloop: task 2.3 Protect credential directories and external auth targets (target 300 lines). Update specloop/verify.py and Manifest profile parsing to retain every auth target, including unused pro • specloop: complete task 2.2 • specloop: task 2.2 Isolate disposable draft workspaces (target 260 lines including regressions). Build on 2.1's canonical drafts output selection in specloop/cli.py:propose(). Add the pre-replacement • specloop: complete task 2.1 • specloop: task 2.1 Introduce isolated lazy paths and mixed-root reads (target 300 lines). Implement lazy root/path/discovery APIs in specloop/state.py, with proposals_dir() returning canonical drafts; • specloop: complete task 1.4 • specloop: task 1.4 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.3 • specloop: task 1.3 Migrate landing and supervisor callers only (target 280 lines including compatibility tests). Update only nightshift/land.py status/finish and specloop/serve.py driver child argv an • specloop: complete task 1.2 • specloop: task 1.2 Install the one-release forwarding boundary (target 280 lines including test migration). Make specloop.cli:main a thin notice-and-forward entry without recursion; keep existing pypr • specloop: complete task 1.1 • specloop: task 1.1 Unify parser routing and daemon controls (target 280 changed lines). Add the side-effect-free parser seam in nightshift/cli.py and reuse build parser/dispatch helpers from specloop/ • Draft OpenSpec change mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli (specloop propose, round 2) • 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) • Draft OpenSpec change mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli (specloop propose, round 1) • specloop: archive mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli into openspec/specs • Fix three CI-only failures: Python 3.12 metadata calls and a no-op chmod probe • specloop: complete task 3.5 • specloop: task 3.5 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.4 • specloop: task 3.4 Align setup and rollout docs and finish acceptance (target 300 lines). Update KNOWN-LIMITATIONS.md, docs/specloop/prepare.md, docs/landing.md, plugins/nightshift/README.md, docs/val • specloop: complete task 3.3 • specloop: task 3.3 Align core guides and structural command checks (target 300 lines including existing-test migration). Update active README.md, docs/specloop/README.md and command-json.md commands/s • specloop: complete task 3.2 • specloop: task 3.2 Align notifications while preserving frozen service contracts (target 240 lines). Migrate specloop/messages.py and remaining emitted CLI/recovery hints in cli.py/serve.py to canonic • specloop: complete task 3.1 • specloop: task 3.1 Migrate Factory commands and detail text (target 220 lines). Update plugins/nightshift/server/factory.ts and client/factory-model.ts More detail command, plus exact-argv/client test • specloop: complete task 2.12 • specloop: task 2.12 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 o • specloop: strengthen section 2 after its evidence check • specloop: complete task 2.11 • specloop: task 2.11 Migrate remaining read consumers (target 240 lines). Update specloop/propose.py, nightshift/timings.py, touchpoints.py and deploy.py defaults/discovery to resolver-backed mixed-roo • specloop: complete task 2.10 • specloop: task 2.10 Exercise generated multi-repository migration evidence (target 300 lines). Generate sanitized temporary copies shaped like real runs from several repositories, including Phreak/Com • specloop: complete task 2.9 • specloop: task 2.9 Activate migration-only CLI and startup fallback (target 230 lines). Expose nightshift migrate and connect serve startup to the migration helper while reusing the owned serve lock b • specloop: complete task 2.8 • specloop: task 2.8 Migrate revision recovery fixtures before activation (target 230 lines). Update tests/test_revision_crash_subprocess.py:36–37,83–97,104–108 to derive run directory/roots in each pro • specloop: complete task 2.7 • specloop: task 2.7 Recover interrupted relocation and mark completion (target 290 lines). Complete the journal phase machine and atomic marker handling in migrate.py. Add fresh-process exits around re • specloop: complete task 2.6 • specloop: task 2.6 Relocate entries and preserve symlink destinations (target 300 lines). Implement the preflighted same-filesystem rename and legacy per-entry link primitive in migrate.py with journa • specloop: complete task 2.5 • specloop: task 2.5 Add coordination, journal intent and preflight (target 290 lines). Extend state_locks.py with shared writer/exclusive migration coordination in the specified lock order; wrap produc • specloop: complete task 2.4 • specloop: task 2.4 Establish supervisor ownership (target 220 lines). Add stable serve-lock helpers in specloop/state_locks.py and lifetime ownership in serve.py, plus canonical/legacy heartbeat looku • specloop: complete task 2.3 • specloop: task 2.3 Protect credential directories and external auth targets (target 300 lines). Update specloop/verify.py and Manifest profile parsing to retain every auth target, including unused pro • specloop: complete task 2.2 • specloop: task 2.2 Isolate disposable draft workspaces (target 260 lines including regressions). Build on 2.1's canonical drafts output selection in specloop/cli.py:propose(). Add the pre-replacement • specloop: complete task 2.1 • specloop: task 2.1 Introduce isolated lazy paths and mixed-root reads (target 300 lines). Implement lazy root/path/discovery APIs in specloop/state.py, with proposals_dir() returning canonical drafts; • specloop: complete task 1.4 • specloop: task 1.4 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.3 • specloop: task 1.3 Migrate landing and supervisor callers only (target 280 lines including compatibility tests). Update only nightshift/land.py status/finish and specloop/serve.py driver child argv an • specloop: complete task 1.2 • specloop: task 1.2 Install the one-release forwarding boundary (target 280 lines including test migration). Make specloop.cli:main a thin notice-and-forward entry without recursion; keep existing pypr • specloop: complete task 1.1 • specloop: task 1.1 Unify parser routing and daemon controls (target 280 changed lines). Add the side-effect-free parser seam in nightshift/cli.py and reuse build parser/dispatch helpers from specloop/
View commitsSpec: Agent sessions: remove the private TMPDIR when the session ends
Merged PR in mattpolicastro/nightshift: "Spec: Agent sessions: remove the private TMPDIR when the session ends"
View pull requestCLAUDE.md: describe the unified CLI and state root after #40
Merged PR in mattpolicastro/nightshift: "CLAUDE.md: describe the unified CLI and state root after #40"
View pull requestSpec: Rename specloop into Nightshift: one CLI, state under ~/.nightshift
Merged PR in mattpolicastro/nightshift: "Spec: Rename specloop into Nightshift: one CLI, state under ~/.nightshift"
View pull requestDraft OpenSpec change mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli (specloop propose, round 2)
Pushed 114 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 #112 from mattpolicastro/docs/claude-md-after-worker • CLAUDE.md: describe the specloop-only project after the worker retirement • 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 commitsCLAUDE.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 requestSpec: Retire the worker engine
Merged PR in mattpolicastro/nightshift: "Spec: Retire the worker engine"
View pull requestreadiness: 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 requestSpec: 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