Everything's an experiment.

Notes on work, tech, and life.

Recent updates:

GitHubpr merged

Spec: Admission: a validator timeout is transient infra, not a spec refusal

Merged PR in mattpolicastro/nightshift: "Spec: Admission: a validator timeout is transient infra, not a spec refusal"

View pull request
GitHubpr merged

Spec: Runs: use the source clone's repo-local credential helpers for base fetch and publish push

Merged PR in mattpolicastro/nightshift: "Spec: Runs: use the source clone's repo-local credential helpers for base fetch and publish push"

View pull request
GitHubpush

Merge pull request #176 from mattpolicastro/spec/mattpolicastro__nightshift-issue-164-verify-mark-truncated-output-and-name-th

Pushed 44 commits to mattpolicastro/nightshift • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-164-verify-mark-truncated-output-and-name-th • specloop: archive mattpolicastro__nightshift-issue-164-verify-mark-truncated-output-and-name-th into openspec/specs • Merge current PR base 19b1213ac2f1a27832a030127028f332e2b20e02 • specloop: complete task 1.1 • specloop: task 1.1 Preserve traceable verification tails: in `specloop/verify.py`, format only logs over 2,000 raw bytes with the specified marker plus newline and unchanged decoded tail, add and forw • Draft OpenSpec change mattpolicastro__nightshift-issue-164-verify-mark-truncated-output-and-name-th (specloop propose, round 1) • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-164-verify-mark-truncated-output-and-name-th • Merge pull request #175 from mattpolicastro/spec/mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files • specloop: archive mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files into openspec/specs • Merge current PR base 19b1213ac2f1a27832a030127028f332e2b20e02 • Merge current PR base 594a3d252ba4a83b70e5b5309e1ba64eaa628f33 • specloop: complete task 1.1 • specloop: task 1.1 Update `specloop/seal.py`'s `_unsafe` and seal-time frozen-path handling as designed so the five reserved steering components are frozen at every depth, with unchanged files quiet a • Draft OpenSpec change mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files (specloop propose, round 1) • Merge pull request #175 from mattpolicastro/spec/mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files • specloop: archive mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files into openspec/specs • Merge current PR base 19b1213ac2f1a27832a030127028f332e2b20e02 • Merge current PR base 594a3d252ba4a83b70e5b5309e1ba64eaa628f33 • specloop: complete task 1.1 • specloop: task 1.1 Update `specloop/seal.py`'s `_unsafe` and seal-time frozen-path handling as designed so the five reserved steering components are frozen at every depth, with unchanged files quiet a • Draft OpenSpec change mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files (specloop propose, round 1) • Merge current PR base 19b1213ac2f1a27832a030127028f332e2b20e02 • specloop: complete task 1.4 • Merge pull request #177 from mattpolicastro/spec/mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l • specloop: task 1.4 Extend `specloop/cli.py:_push` with optional keyword-only source and pass `ctx.m.repo` from both publish and finish. Use the shared helper environment and sanitized binary-output bo • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l • specloop: archive mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l into openspec/specs • specloop: complete task 1.3 • Merge pull request #180 from mattpolicastro/ci/canary-version-check • specloop: task 1.3 Prepare push test compatibility before changing the production signature: migrate `_push` doubles/wrappers in `tests/test_specloop_act.py`, `tests/test_specloop_command_json.py`, `t • specloop: complete task 1.2 • CI: plugin canary on schedule/dispatch only; print the SDK version instead of npm ls • specloop: task 1.2 Integrate helper forwarding and the safe failure boundary into `specloop/loop.py:_fetch_publish_base`, preserving the no-helper branch, fetch limits and caller recovery. Add new `te • specloop: complete task 1.1 • specloop: task 1.1 Add the shared byte-preserving helper reader, indexed-config environment builder and byte-first diagnostic formatter in `specloop/loop.py`, with tests in new `tests/test_specloop_cr • specloop: complete task 2.1 • specloop: task 2.1 Make the harness's verification pass on the branch head: (details: tests: expected exit 0, got timeout (FAIL, 900.05s)) • specloop: append acceptance fixes tasks • specloop: complete task 1.2 • specloop: task 1.2 Connect structured quota waits and the overage hold to admitted work (target at most 300 changed lines including tests and docs). Extend specloop/quota.py:resume_at and minimally ed • specloop: complete task 1.1 • specloop: task 1.1 Implement shared Claude telemetry decoding and classification (target at most 300 changed lines including tests). Extract the rate-limit decoder in nightshift/trace.py; append and p • Draft OpenSpec change mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l (specloop propose, round 1)

View commits
GitHubpr merged

Spec: Verify: mark truncated output and name the full log

Merged PR in mattpolicastro/nightshift: "Spec: Verify: mark truncated output and name the full log"

View pull request
GitHubpr merged

Spec: Seal: always freeze agent-steering files (AGENTS.md, CLAUDE.md, .claude, .mcp.json)

Merged PR in mattpolicastro/nightshift: "Spec: Seal: always freeze agent-steering files (AGENTS.md, CLAUDE.md, .claude, .mcp.json)"

View pull request
GitHubpush

specloop: archive mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files into openspec/specs

Pushed 44 commits to mattpolicastro/nightshift • Merge current PR base 19b1213ac2f1a27832a030127028f332e2b20e02 • Merge pull request #177 from mattpolicastro/spec/mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l • Merge current PR base 594a3d252ba4a83b70e5b5309e1ba64eaa628f33 • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l • specloop: archive mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l into openspec/specs • Merge pull request #180 from mattpolicastro/ci/canary-version-check • CI: plugin canary on schedule/dispatch only; print the SDK version instead of npm ls • specloop: complete task 2.1 • specloop: task 2.1 Make the harness's verification pass on the branch head: (details: tests: expected exit 0, got timeout (FAIL, 900.05s)) • specloop: append acceptance fixes tasks • specloop: complete task 1.2 • specloop: task 1.2 Connect structured quota waits and the overage hold to admitted work (target at most 300 changed lines including tests and docs). Extend specloop/quota.py:resume_at and minimally ed • specloop: complete task 1.1 • specloop: complete task 1.1 • specloop: task 1.1 Implement shared Claude telemetry decoding and classification (target at most 300 changed lines including tests). Extract the rate-limit decoder in nightshift/trace.py; append and p • specloop: task 1.1 Update `specloop/seal.py`'s `_unsafe` and seal-time frozen-path handling as designed so the five reserved steering components are frozen at every depth, with unchanged files quiet a • Draft OpenSpec change mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l (specloop propose, round 1) • Merge current PR base 19b1213ac2f1a27832a030127028f332e2b20e02 • Merge pull request #177 from mattpolicastro/spec/mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l • specloop: archive mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l into openspec/specs • Merge pull request #180 from mattpolicastro/ci/canary-version-check • CI: plugin canary on schedule/dispatch only; print the SDK version instead of npm ls • specloop: complete task 2.1 • specloop: task 2.1 Make the harness's verification pass on the branch head: (details: tests: expected exit 0, got timeout (FAIL, 900.05s)) • specloop: append acceptance fixes tasks • specloop: complete task 1.1 • specloop: task 1.1 Preserve traceable verification tails: in `specloop/verify.py`, format only logs over 2,000 raw bytes with the specified marker plus newline and unchanged decoded tail, add and forw • specloop: complete task 1.2 • specloop: task 1.2 Connect structured quota waits and the overage hold to admitted work (target at most 300 changed lines including tests and docs). Extend specloop/quota.py:resume_at and minimally ed • specloop: complete task 1.1 • specloop: task 1.1 Implement shared Claude telemetry decoding and classification (target at most 300 changed lines including tests). Extract the rate-limit decoder in nightshift/trace.py; append and p • Draft OpenSpec change mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l (specloop propose, round 1) • specloop: archive mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l into openspec/specs • Merge pull request #180 from mattpolicastro/ci/canary-version-check • CI: plugin canary on schedule/dispatch only; print the SDK version instead of npm ls • specloop: complete task 2.1 • specloop: task 2.1 Make the harness's verification pass on the branch head: (details: tests: expected exit 0, got timeout (FAIL, 900.05s)) • specloop: append acceptance fixes tasks • specloop: complete task 1.2 • specloop: task 1.2 Connect structured quota waits and the overage hold to admitted work (target at most 300 changed lines including tests and docs). Extend specloop/quota.py:resume_at and minimally ed • specloop: complete task 1.1 • specloop: task 1.1 Implement shared Claude telemetry decoding and classification (target at most 300 changed lines including tests). Extract the rate-limit decoder in nightshift/trace.py; append and p

View commits
GitHubpr merged

Spec: Agents: classify usage limits from rate_limit_event, not the agent's own words

Merged PR in mattpolicastro/nightshift: "Spec: Agents: classify usage limits from rate_limit_event, not the agent's own words"

View pull request
GitHubpr merged

CI: plugin canary on schedule/dispatch only; print SDK version instead of npm ls

Merged PR in mattpolicastro/nightshift: "CI: plugin canary on schedule/dispatch only; print SDK version instead of npm ls"

View pull request
Bluesky

“You Can See Everything” …and maybe I’d wish I’d seen less!!!!! (Good lord what a movie)

View on Bluesky
GitHubpush

Merge pull request #173 from mattpolicastro/plugin/factory-search-sort

Pushed 69 commits to mattpolicastro/nightshift • plugin: search and sort Factory runs • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-150-forge-enable-gitea-dispatch-atomic-safe • Merge pull request #167 from mattpolicastro/ci/gitea-contract • Merge branch 'main' into ci/gitea-contract • Merge branch 'main' into ci/gitea-contract • ci: run the Gitea contracts as a ci.yml job • ci: gitea-contract job against a digest-pinned Gitea service • Merge pull request #167 from mattpolicastro/ci/gitea-contract • Merge branch 'main' into ci/gitea-contract • Merge branch 'main' into ci/gitea-contract • ci: run the Gitea contracts as a ci.yml job • ci: gitea-contract job against a digest-pinned Gitea service • specloop: archive mattpolicastro__nightshift-issue-150-forge-enable-gitea-dispatch-atomic-safe into openspec/specs • specloop: complete task 1.5 • specloop: task 1.5 Update current Gitea operator guidance (about 300 lines). After dispatch lands, reconcile only affected passages in README.md, KNOWN-LIMITATIONS.md, docs/specloop/README.md, docs/ar • specloop: complete task 1.4 • specloop: task 1.4 Enable guarded Gitea dispatch and preserve retry behavior (about 300 lines, after 1.1–1.3). Add forge=None only to the four stage signatures/default sites in nightshift/specloop_int • specloop: complete task 1.3 • specloop: task 1.3 Authorize Gitea label actors from the allowlist (about 200 lines). Branch in nightshift/specloop_intake.py:_label_actor_association before GitHub validation/owner/membership reads, • specloop: complete task 1.2 • specloop: task 1.2 Make marker evidence bot-only and exact (about 300 lines). Add the separate bot_comment_pages view in nightshift/forge/gitea.py and use it for adapter upserts and the two marker con • openspec(#150): allow the legacy revision-marker fixture under final-line matching • specloop: complete task 1.1 • specloop: task 1.1 Make Gitea transitions add-first (about 150 lines). In nightshift/forge/gitea.py, verify all sorted unique destination additions before source removals; retain fresh label resolutio • Merge branch 'main' into ci/gitea-contract • Merge pull request #171 from mattpolicastro/spec/mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages • specloop: archive mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages into openspec/specs • specloop: complete task 1.2 • specloop: task 1.2 After 1.1 lands, implement row `status` decoding, validated null-terminal envelopes, nonempty snapshot consistency and explicit no-status handling in `nightshift/forge/gitea.py:chec • specloop: complete task 1.1 • specloop: task 1.1 Implement timeline-only null termination and per-page count handling in `nightshift/forge/gitea.py:_pages`, retaining its interface, exact path confinement and all other safeguards. • Draft OpenSpec change mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages (specloop propose, round 1) • Draft OpenSpec change mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages (specloop propose, round 2) • Merge pull request #169 from mattpolicastro/spec/mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated • specloop: archive mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated into openspec/specs • specloop: complete task 1.3 • specloop: task 1.3 Read review comments once per review and complete regression verification (target 150–220 changed lines). Extend the private helper's exact endpoint delegation to per-review comment • specloop: complete task 1.2 • specloop: task 1.2 Read issue comments as complete responses, including landing (target 200–280 changed lines). In `nightshift/forge/gitea.py`, implement the private one-GET comment reader and exact i • specloop: complete task 1.1 • specloop: task 1.1 Decode label actions from body and correct fake timeline serialization (target 100–180 changed lines). In `nightshift/forge/gitea.py:label_event_pages`, accept only string `"1"`/`"" • Merge main (#166 parser fix) into spec/mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated • Draft OpenSpec change mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated (specloop propose, round 3) • Draft OpenSpec change mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated (specloop propose, round 2) • specloop: archive mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages into openspec/specs • specloop: complete task 1.2 • specloop: task 1.2 After 1.1 lands, implement row `status` decoding, validated null-terminal envelopes, nonempty snapshot consistency and explicit no-status handling in `nightshift/forge/gitea.py:chec • specloop: complete task 1.1 • specloop: task 1.1 Implement timeline-only null termination and per-page count handling in `nightshift/forge/gitea.py:_pages`, retaining its interface, exact path confinement and all other safeguards. • Draft OpenSpec change mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages (specloop propose, round 1) • Merge pull request #169 from mattpolicastro/spec/mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated • specloop: archive mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated into openspec/specs • specloop: complete task 1.3 • specloop: task 1.3 Read review comments once per review and complete regression verification (target 150–220 changed lines). Extend the private helper's exact endpoint delegation to per-review comment • specloop: complete task 1.2 • specloop: task 1.2 Read issue comments as complete responses, including landing (target 200–280 changed lines). In `nightshift/forge/gitea.py`, implement the private one-GET comment reader and exact i • specloop: complete task 1.1 • specloop: task 1.1 Decode label actions from body and correct fake timeline serialization (target 100–180 changed lines). In `nightshift/forge/gitea.py:label_event_pages`, accept only string `"1"`/`"" • Merge main (#166 parser fix) into spec/mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated • Draft OpenSpec change mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated (specloop propose, round 3) • Draft OpenSpec change mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated (specloop propose, round 2) • specloop: archive mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated into openspec/specs • specloop: complete task 1.3 • specloop: task 1.3 Read review comments once per review and complete regression verification (target 150–220 changed lines). Extend the private helper's exact endpoint delegation to per-review comment • specloop: complete task 1.2 • specloop: task 1.2 Read issue comments as complete responses, including landing (target 200–280 changed lines). In `nightshift/forge/gitea.py`, implement the private one-GET comment reader and exact i • specloop: complete task 1.1 • specloop: task 1.1 Decode label actions from body and correct fake timeline serialization (target 100–180 changed lines). In `nightshift/forge/gitea.py:label_event_pages`, accept only string `"1"`/`""

View commits
Browse the archive