Everything's an experiment.

Notes on work, tech, and life.

Recent updates:

GitHubpr merged

Spec: Forge seam: Forge Protocol + GitHubForge (byte-identical argv) for intake and readiness

Merged PR in mattpolicastro/nightshift: "Spec: Forge seam: Forge Protocol + GitHubForge (byte-identical argv) for intake and readiness"

View pull request
GitHubpr merged

Spec: Evidence: mutation testing for compiled languages

Merged PR in mattpolicastro/nightshift: "Spec: Evidence: mutation testing for compiled languages"

View pull request
GitHubpr merged

land: ignore other forge hosts during run discovery

Merged PR in mattpolicastro/nightshift: "land: ignore other forge hosts during run discovery"

View pull request
GitHubpr merged

Spec: Forge: Gitea HTTP transport (stdlib urllib, origin-locked, no redirects)

Merged PR in mattpolicastro/nightshift: "Spec: Forge: Gitea HTTP transport (stdlib urllib, origin-locked, no redirects)"

View pull request
GitHubpr merged

plugin: support Paseo 0.13

Merged PR in mattpolicastro/nightshift: "plugin: support Paseo 0.13"

View pull request
GitHubpr merged

Delete dead worker-era GitHub code (vcs.py, worker queue APIs)

Merged PR in mattpolicastro/nightshift: "Delete dead worker-era GitHub code (vcs.py, worker queue APIs)"

View pull request
GitHubpr merged

Spec: Factory page: a Land action for runs at human checks

Merged PR in mattpolicastro/nightshift: "Spec: Factory page: a Land action for runs at human checks"

View pull request
GitHubpush

Merge current PR base 289c5ec3996e55fa75cf48d162d16f45402c0fc6

Pushed 35 commits to mattpolicastro/nightshift • 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: strengthen section 1 after its evidence check • specloop: complete task 1.7 • specloop: task 1.7 Update `plugins/nightshift/README.md`, `docs/specloop/README.md`, `README.md`, `KNOWN-LIMITATIONS.md` and `docs/landing.md`, with root `tests/test_factory_land_docs.py`. Explain sep • specloop: complete task 1.6 • specloop: task 1.6 Integrate Land confirmation, Stop, existing refresh triggers and per-attempt notices in `plugins/nightshift/client/factory-model.ts` and `client/factory.tsx`, with plugin model/rend • specloop: complete task 1.5 • specloop: task 1.5 Add landing schemas and separate read/start/Stop RPCs in `plugins/nightshift/shared/factory.ts`, focused `server/factory-landing.ts` and `index.server.ts`, with plugin `tests/factor • specloop: complete task 1.4 • specloop: task 1.4 Implement Stop and normal signal shutdown entirely in `nightshift/factory_land.py`, with root `tests/test_factory_land_stop.py`. Verify recorded worker PID/start time and safe group • specloop: complete task 1.3 • specloop: task 1.3 Implement detached worker/child handoff and prior-execution exclusion in `nightshift/factory_land.py`, with root `tests/test_factory_land_worker.py` and `tests/test_factory_land_bou • specloop: complete task 1.2 • specloop: task 1.2 Bind the confirmed landing handoff and close its finish race in `nightshift/factory_land.py`, `specloop/cli.py` and the finish argv in `nightshift/land.py`, with root `tests/test_fa • specloop: complete task 1.1 • specloop: task 1.1 Add offer validation and small attempt/status records in `nightshift/factory_land.py`, with root `tests/test_factory_land_status.py`. Define private parsing, five-field admission va • Merge pull request #120 from mattpolicastro/fix/completed-migration-skips-writer-exclusion • migrate: a completed migration needs no writer exclusion • Merge pull request #119 from mattpolicastro/spec/mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir • 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) • Draft OpenSpec change mattpolicastro__nightshift-issue-79-factory-page-a-land-action-for-runs-at-h (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-79-factory-page-a-land-action-for-runs-at-h (specloop propose, round 1) • Draft OpenSpec change mattpolicastro__nightshift-issue-79-factory-page-a-land-action-for-runs-at-h (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-79-factory-page-a-land-action-for-runs-at-h (specloop propose, round 1) • Merge pull request #120 from mattpolicastro/fix/completed-migration-skips-writer-exclusion • migrate: a completed migration needs no writer exclusion

View commits
GitHubpr merged

migrate: a completed migration needs no writer exclusion

Merged PR in mattpolicastro/nightshift: "migrate: a completed migration needs no writer exclusion"

View pull request
GitHubpush

Merge pull request #119 from mattpolicastro/spec/mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir

Pushed 117 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: 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) • 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 commits
Browse the archive