Everything-ish.

A loose chronological archive of writing, code, or anything else that felt good to note.

2026

November

    • Merged PR
      specs: pass openspec 1.16.1 --strict (48/48)
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec (specloop propose, round 1)
      25 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec (specloop propose, round 3)
      • specloop: task 1.1 Update proposal setup in `specloop/propose.py` and `specloop/cli.py`: select managed output with draft_output(m), using trusted m.github owner/repository as separate validated compo
      • specloop: complete task 1.1
      • specloop: split task 1.2 into 3 subtasks
      • specloop: task 1.2.1 Implement format-aware naming and physical-line target-selection helpers with pinned-commit tree/spec validation and tests in tests/test_speckit_front_door.py, covering `issue-int
      • specloop: complete task 1.2.1
      • specloop: task 1.2.2 Integrate trusted-manifest naming and bounded native/qualified/legacy PR recovery before blocker checks, preserving recorded identities, authorization, merged suppression and repl
      • specloop: complete task 1.2.2
      • specloop: task 1.2.3 Wire target selection and task 1.1's pinned base into gated new-proposal dispatch, add the feature-directory line only to newly created native PRs, and test both forges for stale
      • specloop: complete task 1.2.3
      • specloop: task 1.3 Migrate native identity consumers in `nightshift/arm.py`::front_door_issue and `nightshift/touchpoints.py`'s producer fallback, preserving repository checks and old patterns. Recogn
      • specloop: complete task 1.3
      • specloop: task 2.1 Make readiness lookup format-aware in `nightshift/specloop_intake.py` using the copied run manifest and committed run head. Keep the current checklist physical-line/citation grammar
      • specloop: complete task 2.1
      • specloop: task 2.2 Add test_revision_round_appends_phase_with_next_task_ids to `tests/test_speckit_front_door.py` using a new local three-phase fixture with highest T root T009, asserting Phase 4: Rev
      • specloop: complete task 2.2
      • specloop: task 2.3 Update `README.md` flow/enrollment, `docs/specloop/README.md`'s existing front-door section and `docs/specloop/speckit.md`'s new The front door section; update `docs/arming.md`'s re
      • specloop: complete task 2.3
      • specloop: append review round 1
      • specloop: task 3.1 Address review feedback 1: "**mattpolicastro:**\n\nBuild review: the code matches the approved design (naming, `drafts/@speckit/<owner>/<repo>/<change>`, pinned base, discovery, rec
      • specloop: complete task 3.1
      • specloop: archive mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec into openspec/specs
      • Merge pull request #199 from mattpolicastro/spec/mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec
    • Merged PR
      Spec: spec-kit: front door (feature naming, spec PR, readiness checks, revision rounds)
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec into openspec/specs
      4 commits
      • specloop: archive mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec into openspec/specs
      • specloop: append review round 1
      • specloop: task 3.1 Address review feedback 1: "**mattpolicastro:**\n\nBuild review: the code matches the approved design (naming, `drafts/@speckit/<owner>/<repo>/<change>`, pinned base, discovery, rec
      • specloop: complete task 3.1
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec (specloop propose, round 1)
      21 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec (specloop propose, round 3)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic (specloop propose, round 3)
      • specloop: task 1.1 Add native drafting and question routing in `specloop/propose.py`: select the native prompt by manifest format, require local templates/house rules and in-place undelivered-feature
      • specloop: complete task 1.1
      • specloop: task 1.2 Add manifest-selected native feasibility/critic wording in `specloop/feasibility.py` and `specloop/critic.py`, preserving the original PROMPT strings, eight checklist items, schemas
      • specloop: complete task 1.2
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.3
      • specloop: task 2.1 Add native selection for IMPLEMENT, REVIEW, GATE_REVIEW and ARBITER in `specloop/prompts.py` and wire all four `specloop/loop.py` rendering sites through it, keeping the scenario-ID
      • specloop: complete task 2.1
      • specloop: task 2.2 Complete native sizing wording in `specloop/propose.py` and `specloop/critic.py`: six-task recommendation per story, unchanged per-task ceiling, and advisory risk only above eight t
      • specloop: complete task 2.2
      • specloop: task 2.3 Document native drafting in `docs/specloop/README.md` and “What the drafter produces” in `docs/specloop/speckit.md`, preserving the existing OpenSpec drafting prose. In the new draf
      • specloop: complete task 2.3
      • specloop: archive mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic into openspec/specs
      • Merge pull request #198 from mattpolicastro/spec/mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic
    • Merged PR
      Spec: spec-kit: drafter, feasibility and critic
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic into openspec/specs
      33 commits
      • specloop: archive mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic into openspec/specs
      • specloop: task 1.1 Add native drafting and question routing in `specloop/propose.py`: select the native prompt by manifest format, require local templates/house rules and in-place undelivered-feature
      • specloop: complete task 1.1
      • specloop: task 1.2 Add manifest-selected native feasibility/critic wording in `specloop/feasibility.py` and `specloop/critic.py`, preserving the original PROMPT strings, eight checklist items, schemas
      • specloop: complete task 1.2
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.3
      • specloop: task 2.1 Add native selection for IMPLEMENT, REVIEW, GATE_REVIEW and ARBITER in `specloop/prompts.py` and wire all four `specloop/loop.py` rendering sites through it, keeping the scenario-ID
      • specloop: complete task 2.1
      • specloop: task 2.2 Complete native sizing wording in `specloop/propose.py` and `specloop/critic.py`: six-task recommendation per story, unchanged per-task ceiling, and advisory risk only above eight t
      • specloop: complete task 2.2
      • specloop: task 2.3 Document native drafting in `docs/specloop/README.md` and “What the drafter produces” in `docs/specloop/speckit.md`, preserving the existing OpenSpec drafting prose. In the new draf
      • specloop: complete task 2.3
      • Draft OpenSpec change mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic (specloop propose, round 3)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit (specloop propose, round 1)
      • specloop: task 1.1 Add adapter-owned task operations in `specloop/spec_format.py` and native helpers in `specloop/speckit.py`; keep `specloop/tasks.py` unchanged. OPENSPEC delegates parse/tick/split/e
      • specloop: task 1.2 Enable `get(m)` to return `SPECKIT` and complete native validation/paths/labels in `specloop/spec_format.py` and `specloop/speckit.py`, and native admission in `specloop/cli.py`. Us
      • specloop: task 1.3 Add adapter-owned `append_round` in `specloop/spec_format.py`/`specloop/speckit.py` and route both fresh revision and candidate replay reconstruction in `specloop/revise.py` through
      • specloop: task 1.4 Complete native context/committed-plan collection through `specloop/spec_format.py` and generic gate/context handling in `specloop/loop.py`. Reuse existing literal Human checks rule
      • specloop: complete task 1.4
      • specloop: task 2.1 Implement native `speckit.finish` and its optional-head adapter seam, then branch native completion in `specloop/cli.py::_finish` while leaving OpenSpec clone/archive behavior intac
      • specloop: task 2.2 Verify native finish recovery in new `tests/test_speckit_finish_recovery.py` with real temporary Git histories and fake GitHub/Gitea responses: failed/timed-out push, lost/failed re
      • specloop: task 2.3 Add `examples/specloop/speckit.toml` and update the scoped passages in `README.md`, `docs/specloop/README.md`, `docs/specloop/command-json.md`, `KNOWN-LIMITATIONS.md`, `plugins/nigh
      • specloop: merge main (0172818e) into run branch; resolve docs/specloop/README.md
      • specloop: append base reconciliation task 3.1
      • specloop: task 3.1 After merging main (`0172818e`, which landed #191's standalone OpenSpec binary), three documentation tests contradict the merged docs: two cases in `tests/test_openspec_binary_docs.
      • specloop: complete task 3.1
      • specloop: archive mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit into openspec/specs
      • Merge pull request #197 from mattpolicastro/spec/mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit
    • Merged PR
      Spec: spec-kit: adapter on the build path (admit, run, gates, publish, finish)
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit into openspec/specs
      28 commits
      • specloop: archive mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit into openspec/specs
      • Draft OpenSpec change mattpolicastro__nightshift-issue-191-openspec-pinned-checksummed-standalone-b (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-191-openspec-pinned-checksummed-standalone-b (specloop propose, round 3)
      • specloop: task 1.1 Implement literal executable resolution, `VERSION`, the successful per-path process version gate and direct JSON invocation in `specloop/openspec.py`; preserve environment, timeout,
      • specloop: complete task 1.1
      • specloop: task 1.2 Add the independent OpenSpec host check in `nightshift/preflight.py`, reusing the resolver and version constant from 1.1 and freshly verifying file/executable status, binary SHA-256
      • specloop: complete task 1.2
      • specloop: task 1.3 Correct the OpenSpec/npx rationale in `plugins/nightshift/server/factory.ts` and `plugins/nightshift/server/host-paths.ts` while retaining `NIGHTSHIFT_NODE_BIN`, its default and Fac
      • specloop: complete task 1.3
      • specloop: task 1.4 Document the verified installation using the release assets established by 1.2 in `docs/deploy.md#install-openspec`, and update the narrowly scoped shared passages in `README.md`, `
      • specloop: complete task 1.4
      • specloop: merge main (5284294d) into run branch; resolve docs/specloop/README.md
      • specloop: archive mattpolicastro__nightshift-issue-191-openspec-pinned-checksummed-standalone-b into openspec/specs
      • specloop: task 1.1 Add adapter-owned task operations in `specloop/spec_format.py` and native helpers in `specloop/speckit.py`; keep `specloop/tasks.py` unchanged. OPENSPEC delegates parse/tick/split/e
      • Merge pull request #196 from mattpolicastro/spec/mattpolicastro__nightshift-issue-191-openspec-pinned-checksummed-standalone-b
      • specloop: task 1.2 Enable `get(m)` to return `SPECKIT` and complete native validation/paths/labels in `specloop/spec_format.py` and `specloop/speckit.py`, and native admission in `specloop/cli.py`. Us
      • specloop: task 1.3 Add adapter-owned `append_round` in `specloop/spec_format.py`/`specloop/speckit.py` and route both fresh revision and candidate replay reconstruction in `specloop/revise.py` through
      • specloop: task 1.4 Complete native context/committed-plan collection through `specloop/spec_format.py` and generic gate/context handling in `specloop/loop.py`. Reuse existing literal Human checks rule
      • specloop: task 2.1 Implement native `speckit.finish` and its optional-head adapter seam, then branch native completion in `specloop/cli.py::_finish` while leaving OpenSpec clone/archive behavior intac
      • specloop: complete task 2.1
      • specloop: task 2.2 Verify native finish recovery in new `tests/test_speckit_finish_recovery.py` with real temporary Git histories and fake GitHub/Gitea responses: failed/timed-out push, lost/failed re
      • specloop: complete task 2.2
      • specloop: task 2.3 Add `examples/specloop/speckit.toml` and update the scoped passages in `README.md`, `docs/specloop/README.md`, `docs/specloop/command-json.md`, `KNOWN-LIMITATIONS.md`, `plugins/nigh
      • specloop: complete task 2.3
      • specloop: merge main (0172818e) into run branch; resolve docs/specloop/README.md
      • specloop: append base reconciliation task 3.1
      • specloop: task 3.1 After merging main (`0172818e`, which landed #191's standalone OpenSpec binary), three documentation tests contradict the merged docs: two cases in `tests/test_openspec_binary_docs.
      • specloop: complete task 3.1
    • Merged PR
      Spec: OpenSpec: pinned, checksummed standalone binary replaces npx; bump to 1.16.1
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-191-openspec-pinned-checksummed-standalone-b into openspec/specs
      39 commits
      • specloop: archive mattpolicastro__nightshift-issue-191-openspec-pinned-checksummed-standalone-b into openspec/specs
      • Draft OpenSpec change mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-185-spec-kit-house-rules-doc-and-the-nightsh (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-185-spec-kit-house-rules-doc-and-the-nightsh (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i (specloop propose, round 1)
      • specloop: task 1.1 Add `docs/specloop/speckit.md` with all eight exact rule headings, reasons and examples from design.md; add the one-sentence link under `docs/specloop/README.md`'s How the engine wo
      • specloop: complete task 1.1
      • specloop: task 1.2 Add exactly `presets/nightshift-speckit/preset.yml`, `presets/nightshift-speckit/templates/spec-template.md`, `presets/nightshift-speckit/templates/tasks-template.md`, `presets/nigh
      • specloop: complete task 1.2
      • Merge current PR base a61131e90689760b68983ac009283df95d116f60
      • specloop: task 1.1 Copy `spec-template.md`, `plan-template.md` and `tasks-template.md` byte-for-byte from `tests/fixtures/speckit-upstream/v1.3.2/templates/` to `tests/fixtures/speckit/.specify/templa
      • specloop: append review round 1
      • specloop: task 1.2 Add `specloop/speckit.py` with `feature_dir`, the small spec records, `parse_spec` and `scenario_ids`; add the three-story authored `tests/fixtures/speckit/specs/042-add-a-gate/spec
      • specloop: task 1.3 Add `parse_tasks` to `specloop/speckit.py`, returning the existing `Task` type with original flags, backticks and zero-based source lines. Reuse `tasks.TASK` and `tasks.SCENARIO_REF
      • specloop: complete task 1.3
      • specloop: task 1.4 Add `validate` to `specloop/speckit.py` with all ten design rules, deterministic `path:line: message` diagnostics, readable-input handling and aggregate minimum-content errors. Reus
      • specloop: complete task 1.4
      • specloop: task 1.5 Complete the module's pure text helpers `questions`, `human_checks` and `mark_complete`, with `test_questions_from_clarification_markers`, `test_mark_complete_is_idempotent` and foc
      • specloop: complete task 1.5
      • specloop: task 2.1 Address review feedback 1: "**mattpolicastro:**\n\nBuild review: the house rules and the preset match the approved design, and types/plugin CI pass. One wording round before finish,
      • specloop: complete task 2.1
      • specloop: task 2.1 Address review feedback 1: "**mattpolicastro:**\n\nCI `test` fails at collection on Python 3.12 (run 42422605947):\n\n```\nERROR tests/test_speckit_format.py - AttributeError: 'Fiel
      • specloop: append review round 2
      • specloop: task 3.1 Address review feedback 1: "**mattpolicastro:**\n\nFor the next revision round (found by the live preset check on spec-kit 1.3.2, recorded on #184):\n\n- `presets/nightshift-speckit
      • specloop: complete task 3.1
      • specloop: merge main (4b352b37) into run branch; resolve docs/specloop/README.md
      • Merge current PR base 4b352b3701b6df53b9eff4ae8458c92e094c8593
      • specloop: archive mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i into openspec/specs
      • Merge pull request #195 from mattpolicastro/spec/mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i
      • specloop: archive mattpolicastro__nightshift-issue-185-spec-kit-house-rules-doc-and-the-nightsh into openspec/specs
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-185-spec-kit-house-rules-doc-and-the-nightsh
      • Merge pull request #194 from mattpolicastro/spec/mattpolicastro__nightshift-issue-185-spec-kit-house-rules-doc-and-the-nightsh
      • specloop: task 1.1 Implement literal executable resolution, `VERSION`, the successful per-path process version gate and direct JSON invocation in `specloop/openspec.py`; preserve environment, timeout,
      • specloop: task 1.2 Add the independent OpenSpec host check in `nightshift/preflight.py`, reusing the resolver and version constant from 1.1 and freshly verifying file/executable status, binary SHA-256
      • specloop: task 1.3 Correct the OpenSpec/npx rationale in `plugins/nightshift/server/factory.ts` and `plugins/nightshift/server/host-paths.ts` while retaining `NIGHTSHIFT_NODE_BIN`, its default and Fac
      • specloop: task 1.4 Document the verified installation using the release assets established by 1.2 in `docs/deploy.md#install-openspec`, and update the narrowly scoped shared passages in `README.md`, `
      • specloop: merge main (5284294d) into run branch; resolve docs/specloop/README.md
    • Merged PR
      Spec: spec-kit: house-rules doc and the nightshift-speckit preset
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-191-openspec-pinned-checksummed-standalone-b (specloop propose, round 2)
      21 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-191-openspec-pinned-checksummed-standalone-b (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i (specloop propose, round 1)
      • specloop: task 1.1 Copy `spec-template.md`, `plan-template.md` and `tasks-template.md` byte-for-byte from `tests/fixtures/speckit-upstream/v1.3.2/templates/` to `tests/fixtures/speckit/.specify/templa
      • specloop: complete task 1.1
      • specloop: task 1.2 Add `specloop/speckit.py` with `feature_dir`, the small spec records, `parse_spec` and `scenario_ids`; add the three-story authored `tests/fixtures/speckit/specs/042-add-a-gate/spec
      • specloop: complete task 1.2
      • specloop: task 1.3 Add `parse_tasks` to `specloop/speckit.py`, returning the existing `Task` type with original flags, backticks and zero-based source lines. Reuse `tasks.TASK` and `tasks.SCENARIO_REF
      • specloop: complete task 1.3
      • specloop: task 1.4 Add `validate` to `specloop/speckit.py` with all ten design rules, deterministic `path:line: message` diagnostics, readable-input handling and aggregate minimum-content errors. Reus
      • specloop: complete task 1.4
      • specloop: task 1.5 Complete the module's pure text helpers `questions`, `human_checks` and `mark_complete`, with `test_questions_from_clarification_markers`, `test_mark_complete_is_idempotent` and foc
      • specloop: complete task 1.5
      • specloop: append review round 1
      • specloop: task 2.1 Address review feedback 1: "**mattpolicastro:**\n\nCI `test` fails at collection on Python 3.12 (run 42422605947):\n\n```\nERROR tests/test_speckit_format.py - AttributeError: 'Fiel
      • specloop: complete task 2.1
      • Merge current PR base 4b352b3701b6df53b9eff4ae8458c92e094c8593
      • specloop: archive mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i into openspec/specs
      • Merge pull request #195 from mattpolicastro/spec/mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-185-spec-kit-house-rules-doc-and-the-nightsh
      • specloop: archive mattpolicastro__nightshift-issue-185-spec-kit-house-rules-doc-and-the-nightsh into openspec/specs
    • Merged PR
      Spec: spec-kit: parser, validator and scenario IDs (specloop/speckit.py)
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i into openspec/specs
      23 commits
      • specloop: archive mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i into openspec/specs
      • Draft OpenSpec change mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a (specloop propose, round 2)
      • specloop: task 1.1 Add `specloop/spec_format.py` with the exact protocol, `OPENSPEC` and `get(m)`; add only the defaulted trailing `Manifest.format` field in `specloop/manifest.py` so selection type-c
      • specloop: complete task 1.1
      • specloop: task 1.2 Substitute adapter calls in `specloop/loop.py` for task paths, all scenario lookups, context copying and the retained `design_human_checks` wrapper; substitute the task path in `spe
      • specloop: complete task 1.2
      • specloop: task 1.3 Substitute adapter calls in `specloop/cli.py` and `specloop/propose.py` for validation, scenario lookup, tasks, confinement, in-flight reads, staging, PR labels and finish, includin
      • specloop: complete task 1.3
      • specloop: task 2.1 Wire `[run] format` parsing in `specloop/manifest.py` with `openspec` default and retained explicit `speckit`; have `specloop/cli.py::problems_with` return the selector's exact unav
      • specloop: complete task 2.1
      • specloop: task 2.2 Add the formats paragraph to `docs/specloop/README.md` under How the engine works, the manifest field/refusal contract to `docs/specloop/command-json.md`, and explicit OpenSpec sele
      • specloop: complete task 2.2
      • Merge current PR base a61131e90689760b68983ac009283df95d116f60
      • specloop: archive mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a into openspec/specs
      • specloop: append review round 1
      • specloop: task 2.1 Address review feedback 1: "**mattpolicastro:**\n\nCI `test` fails at collection on Python 3.12 (run 42422605947):\n\n```\nERROR tests/test_speckit_format.py - AttributeError: 'Fiel
      • Merge pull request #192 from mattpolicastro/spec/mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a
      • Merge current PR base 4b352b3701b6df53b9eff4ae8458c92e094c8593
      • specloop: append review round 2
      • specloop: task 3.1 Address review feedback 1: "**mattpolicastro:**\n\nFor the next revision round (found by the live preset check on spec-kit 1.3.2, recorded on #184):\n\n- `presets/nightshift-speckit
      • specloop: complete task 3.1
      • specloop: merge main (4b352b37) into run branch; resolve docs/specloop/README.md
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a (specloop propose, round 1)
      15 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a (specloop propose, round 2)
      • specloop: task 1.1 Add `specloop/spec_format.py` with the exact protocol, `OPENSPEC` and `get(m)`; add only the defaulted trailing `Manifest.format` field in `specloop/manifest.py` so selection type-c
      • specloop: complete task 1.1
      • specloop: task 1.2 Substitute adapter calls in `specloop/loop.py` for task paths, all scenario lookups, context copying and the retained `design_human_checks` wrapper; substitute the task path in `spe
      • specloop: complete task 1.2
      • specloop: task 1.3 Substitute adapter calls in `specloop/cli.py` and `specloop/propose.py` for validation, scenario lookup, tasks, confinement, in-flight reads, staging, PR labels and finish, includin
      • specloop: complete task 1.3
      • specloop: task 2.1 Wire `[run] format` parsing in `specloop/manifest.py` with `openspec` default and retained explicit `speckit`; have `specloop/cli.py::problems_with` return the selector's exact unav
      • specloop: complete task 2.1
      • specloop: task 2.2 Add the formats paragraph to `docs/specloop/README.md` under How the engine works, the manifest field/refusal contract to `docs/specloop/command-json.md`, and explicit OpenSpec sele
      • specloop: complete task 2.2
      • Merge current PR base a61131e90689760b68983ac009283df95d116f60
      • specloop: archive mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a into openspec/specs
      • Merge pull request #192 from mattpolicastro/spec/mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a
    • Merged PR
      Spec: Engine: a format seam with the OpenSpec adapter behind it (behaviour-preserving)
    • Pushed
      specloop: append review round 1
      27 commits
      • specloop: append review round 1
      • specloop: task 2.1 Address review feedback 1: "**mattpolicastro:**\n\nBuild review: the house rules and the preset match the approved design, and types/plugin CI pass. One wording round before finish,
      • specloop: complete task 2.1
      • specloop: task 1.1 Copy `spec-template.md`, `plan-template.md` and `tasks-template.md` byte-for-byte from `tests/fixtures/speckit-upstream/v1.3.2/templates/` to `tests/fixtures/speckit/.specify/templa
      • specloop: complete task 1.1
      • specloop: task 1.2 Add `specloop/speckit.py` with `feature_dir`, the small spec records, `parse_spec` and `scenario_ids`; add the three-story authored `tests/fixtures/speckit/specs/042-add-a-gate/spec
      • specloop: complete task 1.2
      • specloop: task 1.3 Add `parse_tasks` to `specloop/speckit.py`, returning the existing `Task` type with original flags, backticks and zero-based source lines. Reuse `tasks.TASK` and `tasks.SCENARIO_REF
      • specloop: complete task 1.3
      • specloop: task 1.4 Add `validate` to `specloop/speckit.py` with all ten design rules, deterministic `path:line: message` diagnostics, readable-input handling and aggregate minimum-content errors. Reus
      • specloop: complete task 1.4
      • specloop: task 1.5 Complete the module's pure text helpers `questions`, `human_checks` and `mark_complete`, with `test_questions_from_clarification_markers`, `test_mark_complete_is_idempotent` and foc
      • specloop: complete task 1.5
      • specloop: archive mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a into openspec/specs
      • tests: add verbatim spec-kit v1.3.2 templates for offline fixtures
      • specloop: task 1.1 Add `specloop/spec_format.py` with the exact protocol, `OPENSPEC` and `get(m)`; add only the defaulted trailing `Manifest.format` field in `specloop/manifest.py` so selection type-c
      • Merge pull request #193 from mattpolicastro/fixtures/speckit-upstream-templates
      • specloop: task 1.2 Substitute adapter calls in `specloop/loop.py` for task paths, all scenario lookups, context copying and the retained `design_human_checks` wrapper; substitute the task path in `spe
      • specloop: task 1.3 Substitute adapter calls in `specloop/cli.py` and `specloop/propose.py` for validation, scenario lookup, tasks, confinement, in-flight reads, staging, PR labels and finish, includin
      • specloop: task 2.1 Wire `[run] format` parsing in `specloop/manifest.py` with `openspec` default and retained explicit `speckit`; have `specloop/cli.py::problems_with` return the selector's exact unav
      • specloop: task 2.2 Add the formats paragraph to `docs/specloop/README.md` under How the engine works, the manifest field/refusal contract to `docs/specloop/command-json.md`, and explicit OpenSpec sele
      • specloop: complete task 2.2
      • Merge current PR base a61131e90689760b68983ac009283df95d116f60
      • specloop: task 1.1 Add `docs/specloop/speckit.md` with all eight exact rule headings, reasons and examples from design.md; add the one-sentence link under `docs/specloop/README.md`'s How the engine wo
      • specloop: task 1.2 Add exactly `presets/nightshift-speckit/preset.yml`, `presets/nightshift-speckit/templates/spec-template.md`, `presets/nightshift-speckit/templates/tasks-template.md`, `presets/nigh
      • Draft OpenSpec change mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-185-spec-kit-house-rules-doc-and-the-nightsh (specloop propose, round 1)
    • Merged PR
      tests: add verbatim spec-kit v1.3.2 templates for offline fixtures
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-182-readiness-evidence-disabled-manifests-ar (specloop propose, round 1)
      5 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-182-readiness-evidence-disabled-manifests-ar (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-182-readiness-evidence-disabled-manifests-ar (specloop propose, round 2)
      • specloop: task 1.1 In one session (about 100 changed lines), add the disabled-manifest early return only inside `nightshift/specloop_intake.py::_readiness_evidence` after existing state/manifest valid
      • specloop: complete task 1.1
      • Merge pull request #183 from mattpolicastro/spec/mattpolicastro__nightshift-issue-182-readiness-evidence-disabled-manifests-ar
    • Merged PR
      Spec: Readiness: evidence-disabled manifests are always merge:blocked
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-179-admission-a-validator-timeout-is-transie (specloop propose, round 1)
      7 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-179-admission-a-validator-timeout-is-transie (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-179-admission-a-validator-timeout-is-transie (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-179-admission-a-validator-timeout-is-transie (specloop propose, round 3)
      • specloop: task 1.1 After #174, implement `ValidatorUnavailable(SpecError)` and single-call classification in `specloop/openspec.py`; narrowly forward it through admission/drafting validate-call handli
      • specloop: complete task 1.1
      • specloop: archive mattpolicastro__nightshift-issue-179-admission-a-validator-timeout-is-transie into openspec/specs
      • Merge pull request #181 from mattpolicastro/spec/mattpolicastro__nightshift-issue-179-admission-a-validator-timeout-is-transie
    • Merged PR
      Spec: Admission: a validator timeout is transient infra, not a spec refusal
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-179-admission-a-validator-timeout-is-transie into openspec/specs
      16 commits
      • specloop: archive mattpolicastro__nightshift-issue-179-admission-a-validator-timeout-is-transie into openspec/specs
      • specloop: task 1.1 After #174, implement `ValidatorUnavailable(SpecError)` and single-call classification in `specloop/openspec.py`; narrowly forward it through admission/drafting validate-call handli
      • specloop: complete task 1.1
      • Draft OpenSpec change mattpolicastro__nightshift-issue-174-runs-use-the-source-clone-s-repo-local-c (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-174-runs-use-the-source-clone-s-repo-local-c (specloop propose, round 2)
      • 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: 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.2
      • 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.3
      • 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
      • specloop: complete task 1.4
      • Merge current PR base 19b1213ac2f1a27832a030127028f332e2b20e02
      • specloop: archive mattpolicastro__nightshift-issue-174-runs-use-the-source-clone-s-repo-local-c into openspec/specs
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-174-runs-use-the-source-clone-s-repo-local-c
      • Merge pull request #178 from mattpolicastro/spec/mattpolicastro__nightshift-issue-174-runs-use-the-source-clone-s-repo-local-c
    • Merged PR
      Spec: Runs: use the source clone's repo-local credential helpers for base fetch and publish push
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-174-runs-use-the-source-clone-s-repo-local-c into openspec/specs
      8 commits
      • specloop: archive mattpolicastro__nightshift-issue-174-runs-use-the-source-clone-s-repo-local-c into openspec/specs
      • Draft OpenSpec change mattpolicastro__nightshift-issue-164-verify-mark-truncated-output-and-name-th (specloop propose, round 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.1
      • Merge current PR base 19b1213ac2f1a27832a030127028f332e2b20e02
      • specloop: archive mattpolicastro__nightshift-issue-164-verify-mark-truncated-output-and-name-th into openspec/specs
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-164-verify-mark-truncated-output-and-name-th
      • Merge pull request #176 from mattpolicastro/spec/mattpolicastro__nightshift-issue-164-verify-mark-truncated-output-and-name-th
    • Merged PR
      Spec: Verify: mark truncated output and name the full log
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files (specloop propose, round 1)
      8 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files (specloop propose, round 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
      • specloop: complete task 1.1
      • Merge current PR base 594a3d252ba4a83b70e5b5309e1ba64eaa628f33
      • Merge current PR base 19b1213ac2f1a27832a030127028f332e2b20e02
      • specloop: archive mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files into openspec/specs
      • Merge pull request #175 from mattpolicastro/spec/mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-164-verify-mark-truncated-output-and-name-th
    • Merged PR
      Spec: Seal: always freeze agent-steering files (AGENTS.md, CLAUDE.md, .claude, .mcp.json)
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l (specloop propose, round 1)
      20 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l (specloop propose, round 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: complete task 1.1
      • 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.2
      • specloop: append acceptance fixes tasks
      • 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: complete task 2.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: 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
      • CI: plugin canary on schedule/dispatch only; print the SDK version instead of npm ls
      • 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
      • Merge pull request #180 from mattpolicastro/ci/canary-version-check
      • specloop: complete task 1.3
      • specloop: archive mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l into openspec/specs
      • Merge branch 'main' into 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 pull request #177 from mattpolicastro/spec/mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l
      • specloop: complete task 1.4
      • Merge current PR base 19b1213ac2f1a27832a030127028f332e2b20e02
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files into openspec/specs
      18 commits
      • specloop: archive mattpolicastro__nightshift-issue-163-seal-always-freeze-agent-steering-files into openspec/specs
      • Draft OpenSpec change mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l (specloop propose, round 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
      • 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: complete task 1.1
      • 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.2
      • specloop: append acceptance fixes tasks
      • 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: complete task 2.1
      • CI: plugin canary on schedule/dispatch only; print the SDK version instead of npm ls
      • Merge pull request #180 from mattpolicastro/ci/canary-version-check
      • specloop: archive mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l into openspec/specs
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l
      • Merge current PR base 594a3d252ba4a83b70e5b5309e1ba64eaa628f33
      • Merge pull request #177 from mattpolicastro/spec/mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l
      • Merge current PR base 19b1213ac2f1a27832a030127028f332e2b20e02
      • 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
    • Merged PR
      Spec: Agents: classify usage limits from rate_limit_event, not the agent's own words
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l into openspec/specs
      3 commits
      • specloop: archive mattpolicastro__nightshift-issue-162-agents-classify-usage-limits-from-rate-l into openspec/specs
      • CI: plugin canary on schedule/dispatch only; print the SDK version instead of npm ls
      • Merge pull request #180 from mattpolicastro/ci/canary-version-check
    • Merged PR
      CI: plugin canary on schedule/dispatch only; print SDK version instead of npm ls
    • Pushed
      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
      7 commits
      • 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: complete task 1.1
      • 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.2
      • specloop: append acceptance fixes tasks
      • 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: complete task 2.1

October

    • Pushed
      plugin: search and sort Factory runs
      2 commits
      • plugin: search and sort Factory runs
      • Merge pull request #173 from mattpolicastro/plugin/factory-search-sort
    • Merged PR
      plugin: search and sort Factory runs
    • Merged PR
      Spec: Forge: enable Gitea dispatch (atomic-safe labels, bot-only markers, allowlist trust)
    • Pushed
      ci: gitea-contract job against a digest-pinned Gitea service
      5 commits
      • ci: gitea-contract job against a digest-pinned Gitea service
      • ci: run the Gitea contracts as a ci.yml job
      • Merge branch 'main' into ci/gitea-contract
      • Merge pull request #167 from mattpolicastro/ci/gitea-contract
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-150-forge-enable-gitea-dispatch-atomic-safe
    • Merged PR
      CI: live Gitea contract job against a digest-pinned gitea/gitea:28.2.0
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-150-forge-enable-gitea-dispatch-atomic-safe into openspec/specs
      27 commits
      • specloop: archive mattpolicastro__nightshift-issue-150-forge-enable-gitea-dispatch-atomic-safe into openspec/specs
      • 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
      • specloop: complete task 1.1
      • openspec(#150): allow the legacy revision-marker fixture under final-line matching
      • 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
      • specloop: complete task 1.2
      • 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.3
      • 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.4
      • 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.5
      • Draft OpenSpec change mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated (specloop propose, round 3)
      • Merge main (#166 parser fix) into spec/mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated
      • 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"`/`""
      • 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: 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: archive mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated into openspec/specs
      • Merge pull request #169 from mattpolicastro/spec/mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated
      • Draft OpenSpec change mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages (specloop propose, round 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.
      • 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: archive mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages into openspec/specs
      • Merge pull request #171 from mattpolicastro/spec/mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages
      • Merge branch 'main' into ci/gitea-contract
    • Merged PR
      Spec: Gitea: timeline and combined-status pages as 28.2.0 returns them (null terminal pages, per-page totals, status field)
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages into openspec/specs
      15 commits
      • specloop: archive mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages into openspec/specs
      • 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.
      • specloop: complete task 1.1
      • 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.2
      • Draft OpenSpec change mattpolicastro__nightshift-issue-170-gitea-timeline-and-combined-status-pages (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated (specloop propose, round 3)
      • Merge main (#166 parser fix) into spec/mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated
      • 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"`/`""
      • 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: 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.3
      • specloop: archive mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated into openspec/specs
      • Merge pull request #169 from mattpolicastro/spec/mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated
    • Merged PR
      Spec: Gitea: read label actions and unpaginated comment listings the way 28.2.0 returns them
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated into openspec/specs
      7 commits
      • specloop: archive mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated into openspec/specs
      • 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"`/`""
      • specloop: complete task 1.1
      • 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.2
      • 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.3
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-166-land-accept-schedule-and-bare-workflow-d (specloop propose, round 1)
      9 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-166-land-accept-schedule-and-bare-workflow-d (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-166-land-accept-schedule-and-bare-workflow-d (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-166-land-accept-schedule-and-bare-workflow-d (specloop propose, round 3)
      • specloop: task 1.1 Extend only `ignored_paths` in `nightshift/land.py` with distinct event/duplicate tracking and path-event-only ignore-list output; apply the design's exact physical-line rules for q
      • specloop: complete task 1.1
      • specloop: archive mattpolicastro__nightshift-issue-166-land-accept-schedule-and-bare-workflow-d into openspec/specs
      • Merge pull request #168 from mattpolicastro/spec/mattpolicastro__nightshift-issue-166-land-accept-schedule-and-bare-workflow-d
      • Merge branch 'main' into ci/gitea-contract
      • Merge main (#166 parser fix) into spec/mattpolicastro__nightshift-issue-165-gitea-read-label-actions-and-unpaginated
    • Merged PR
      Spec: Land: accept schedule and bare workflow_dispatch triggers in the CI exclusion parser (main CI red since #159)
    • Pushed
      specloop: task 1.1 Extend only `ignored_paths` in `nightshift/land.py` with distinct event/duplicate tracking and path-event-only ignore-list output; apply the design's exact physical-line rules for q
      7 commits
      • specloop: task 1.1 Extend only `ignored_paths` in `nightshift/land.py` with distinct event/duplicate tracking and path-event-only ignore-list output; apply the design's exact physical-line rules for q
      • specloop: complete task 1.1
      • Draft OpenSpec change mattpolicastro__nightshift-issue-145-status-json-forge-neutral-run-link (specloop propose, round 1)
      • specloop: task 1.1 After #129 and #138 are landed, implement the configuration-only link helper and additive non-GitHub `context.link` in `specloop/cli.py::_status_context` following the design, prese
      • Merge current PR base 89c6898a5a1cb8bb48ad2494a07ce01ff7b9ce68
      • specloop: archive mattpolicastro__nightshift-issue-145-status-json-forge-neutral-run-link into openspec/specs
      • Merge pull request #155 from mattpolicastro/spec/mattpolicastro__nightshift-issue-145-status-json-forge-neutral-run-link
    • Merged PR
      Spec: Status JSON: forge-neutral run link
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-145-status-json-forge-neutral-run-link into openspec/specs
      15 commits
      • specloop: archive mattpolicastro__nightshift-issue-145-status-json-forge-neutral-run-link into openspec/specs
      • Draft OpenSpec change mattpolicastro__nightshift-issue-131-forge-nightshift-arm-on-gitea (specloop propose, round 1)
      • specloop: task 1.1 Introduce the arming forge boundary and configured issue reads in `nightshift/arm.py`; add tests in new `tests/test_arm_forge.py`. Preserve public runner-based helpers and the uncha
      • specloop: complete task 1.1
      • specloop: task 1.2 Implement selected-forge armed-issue and PR context in `nightshift/arm.py`; add new `tests/test_arm_gitea_context.py`, including `test_arm_gitea_lists_armed_issues_client_side`. Reu
      • specloop: complete task 1.2
      • specloop: task 1.3 Complete main's --config dispatch and verified Gitea label/error-confirmation path in `nightshift/arm.py`; extend new `tests/test_arm_forge.py` with `test_arm_gitea_label_write_read
      • specloop: complete task 1.3
      • Merge current PR base 89c6898a5a1cb8bb48ad2494a07ce01ff7b9ce68
      • specloop: append review round 1
      • specloop: task 2.1 Address review feedback 1: "**mattpolicastro:**\n\n**Human check (real Gitea arming) failed: one-line bug.** Check mode on a real Gitea checkout reports `Issue #N lookup failed` for
      • specloop: complete task 2.1
      • specloop: archive mattpolicastro__nightshift-issue-131-forge-nightshift-arm-on-gitea into openspec/specs
      • Merge remote-tracking branch 'origin/main' into HEAD
      • Merge pull request #157 from mattpolicastro/spec/mattpolicastro__nightshift-issue-131-forge-nightshift-arm-on-gitea
    • Merged PR
      Spec: Forge: nightshift arm on Gitea
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token (specloop propose, round 1)
      28 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token (specloop propose, round 3)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token (specloop propose, round 4)
      • specloop: task 1.1 Establish the named landing operation boundary in `nightshift/land.py` while retaining existing runner/helper compatibility and exact GitHub argv/order. Move Factory's remote-head c
      • specloop: complete task 1.1
      • specloop: task 1.2 Add Gitea URL/config/enrollment resolution and invocation-local human credential loading to `nightshift/land.py`, with injected confined HTTP transport and validated PR/main facts.
      • specloop: complete task 1.2
      • specloop: task 1.3 Implement Gitea landing evidence and lifecycle integration in `nightshift/land.py`: complete comment reads, trusted_logins decisions from user.login, authenticated non-bot attester
      • specloop: complete task 1.3
      • specloop: task 1.4 Implement Gitea initial ancestry and single-attempt merge-style branch update in `nightshift/land.py`, retaining the shared deadline and exact ordered-parent acceptance check. Add b
      • specloop: complete task 1.4
      • specloop: task 1.5 Complete exact-head Gitea CI and pinned merge/confirmation operations in `nightshift/land.py`, reusing checks_for_sha with the #122 mapping and local link-field normalization while
      • specloop: complete task 1.5
      • specloop: task 1.6 Update `docs/landing.md` for Gitea setup, land.env precedence/isolation, trusted publication/attestation authors, separate #129 finish provisioning, exact-head CI, update and merge
      • specloop: complete task 1.6
      • forge: Gitea issue-label reads are a single unpaginated GET
      • Merge current PR base 89c6898a5a1cb8bb48ad2494a07ce01ff7b9ce68
      • specloop: archive mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token into openspec/specs
      • Merge pull request #156 from mattpolicastro/spec/mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token
      • Draft OpenSpec change mattpolicastro__nightshift-issue-136-land-merge-markdown-only-prs-that-ci-nev (specloop propose, round 1)
      • specloop: task 1.1 Add conservative exclusion evidence in `nightshift/land.py` and new `tests/test_land_ci_exclusion.py` (one session, approximately 300 changed code/test lines). Add the two named lan
      • specloop: task 1.2 Integrate proof, grace, registered-check precedence and the separate CI attestation in `nightshift/land.py`, with new `tests/test_land_docs_only.py` and the scoped `docs/landing.md`
      • specloop: archive mattpolicastro__nightshift-issue-136-land-merge-markdown-only-prs-that-ci-nev into openspec/specs
      • Merge pull request #161 from mattpolicastro/spec/mattpolicastro__nightshift-issue-136-land-merge-markdown-only-prs-that-ci-nev
      • Merge pull request #160 from mattpolicastro/fix/gitea-issue-labels-unpaginated
      • Merge remote-tracking branch 'origin/main' into HEAD
      • plugin: drop the Paseo upper bound and add an SDK canary
      • Merge pull request #159 from mattpolicastro/plugin/paseo-0.14
    • Merged PR
      plugin: drop the Paseo upper bound and add an SDK canary
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-131-forge-nightshift-arm-on-gitea into openspec/specs
      3 commits
      • specloop: archive mattpolicastro__nightshift-issue-131-forge-nightshift-arm-on-gitea into openspec/specs
      • forge: Gitea issue-label reads are a single unpaginated GET
      • Merge pull request #160 from mattpolicastro/fix/gitea-issue-labels-unpaginated
    • Merged PR
      forge: Gitea issue-label reads are a single unpaginated GET
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-136-land-merge-markdown-only-prs-that-ci-nev (specloop propose, round 1)
      7 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-136-land-merge-markdown-only-prs-that-ci-nev (specloop propose, round 1)
      • specloop: task 1.1 Add conservative exclusion evidence in `nightshift/land.py` and new `tests/test_land_ci_exclusion.py` (one session, approximately 300 changed code/test lines). Add the two named lan
      • specloop: complete task 1.1
      • specloop: task 1.2 Integrate proof, grace, registered-check precedence and the separate CI attestation in `nightshift/land.py`, with new `tests/test_land_docs_only.py` and the scoped `docs/landing.md`
      • specloop: complete task 1.2
      • specloop: archive mattpolicastro__nightshift-issue-136-land-merge-markdown-only-prs-that-ci-nev into openspec/specs
      • Merge pull request #161 from mattpolicastro/spec/mattpolicastro__nightshift-issue-136-land-merge-markdown-only-prs-that-ci-nev
    • Merged PR
      Spec: land: merge Markdown-only PRs that CI never runs on
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-136-land-merge-markdown-only-prs-that-ci-nev into openspec/specs
      21 commits
      • specloop: archive mattpolicastro__nightshift-issue-136-land-merge-markdown-only-prs-that-ci-nev into openspec/specs
      • specloop: task 1.1 Add conservative exclusion evidence in `nightshift/land.py` and new `tests/test_land_ci_exclusion.py` (one session, approximately 300 changed code/test lines). Add the two named lan
      • specloop: complete task 1.1
      • specloop: task 1.2 Integrate proof, grace, registered-check precedence and the separate CI attestation in `nightshift/land.py`, with new `tests/test_land_docs_only.py` and the scoped `docs/landing.md`
      • specloop: complete task 1.2
      • Draft OpenSpec change mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token (specloop propose, round 3)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token (specloop propose, round 4)
      • specloop: task 1.1 Establish the named landing operation boundary in `nightshift/land.py` while retaining existing runner/helper compatibility and exact GitHub argv/order. Move Factory's remote-head c
      • specloop: task 1.2 Add Gitea URL/config/enrollment resolution and invocation-local human credential loading to `nightshift/land.py`, with injected confined HTTP transport and validated PR/main facts.
      • specloop: task 1.3 Implement Gitea landing evidence and lifecycle integration in `nightshift/land.py`: complete comment reads, trusted_logins decisions from user.login, authenticated non-bot attester
      • specloop: complete task 1.3
      • specloop: task 1.4 Implement Gitea initial ancestry and single-attempt merge-style branch update in `nightshift/land.py`, retaining the shared deadline and exact ordered-parent acceptance check. Add b
      • specloop: complete task 1.4
      • specloop: task 1.5 Complete exact-head Gitea CI and pinned merge/confirmation operations in `nightshift/land.py`, reusing checks_for_sha with the #122 mapping and local link-field normalization while
      • specloop: complete task 1.5
      • specloop: task 1.6 Update `docs/landing.md` for Gitea setup, land.env precedence/isolation, trusted publication/attestation authors, separate #129 finish provisioning, exact-head CI, update and merge
      • specloop: complete task 1.6
      • Merge current PR base 89c6898a5a1cb8bb48ad2494a07ce01ff7b9ce68
      • specloop: archive mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token into openspec/specs
      • Merge pull request #156 from mattpolicastro/spec/mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token
    • Merged PR
      Spec: Forge: land on Gitea with the human token
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token into openspec/specs
      38 commits
      • specloop: archive mattpolicastro__nightshift-issue-130-forge-land-on-gitea-with-the-human-token into openspec/specs
      • plugin: open forge links in the system browser
      • specloop: task 1.1 Establish the named landing operation boundary in `nightshift/land.py` while retaining existing runner/helper compatibility and exact GitHub argv/order. Move Factory's remote-head c
      • specloop: complete task 1.1
      • Merge pull request #148 from mattpolicastro/plugin/open-external-links
      • specloop: task 1.2 Add Gitea URL/config/enrollment resolution and invocation-local human credential loading to `nightshift/land.py`, with injected confined HTTP transport and validated PR/main facts.
      • specloop: complete task 1.2
      • specloop: task 1.3 Implement Gitea landing evidence and lifecycle integration in `nightshift/land.py`: complete comment reads, trusted_logins decisions from user.login, authenticated non-bot attester
      • specloop: complete task 1.3
      • specloop: task 1.4 Implement Gitea initial ancestry and single-attempt merge-style branch update in `nightshift/land.py`, retaining the shared deadline and exact ordered-parent acceptance check. Add b
      • specloop: complete task 1.4
      • specloop: task 1.5 Complete exact-head Gitea CI and pinned merge/confirmation operations in `nightshift/land.py`, reusing checks_for_sha with the #122 mapping and local link-field normalization while
      • specloop: complete task 1.5
      • specloop: task 1.6 Update `docs/landing.md` for Gitea setup, land.env precedence/isolation, trusted publication/attestation authors, separate #129 finish provisioning, exact-head CI, update and merge
      • specloop: complete task 1.6
      • Merge current PR base 89c6898a5a1cb8bb48ad2494a07ce01ff7b9ce68
      • specloop: append review round 1
      • specloop: task 2.1 Address review feedback 1: "**mattpolicastro:**\n\n**Human check (real Gitea arming) failed: one-line bug.** Check mode on a real Gitea checkout reports `Issue #N lookup failed` for
      • specloop: complete task 2.1
      • specloop: task 1.1 Introduce the arming forge boundary and configured issue reads in `nightshift/arm.py`; add tests in new `tests/test_arm_forge.py`. Preserve public runner-based helpers and the uncha
      • specloop: task 1.2 Implement selected-forge armed-issue and PR context in `nightshift/arm.py`; add new `tests/test_arm_gitea_context.py`, including `test_arm_gitea_lists_armed_issues_client_side`. Reu
      • specloop: task 1.3 Complete main's --config dispatch and verified Gitea label/error-confirmation path in `nightshift/arm.py`; extend new `tests/test_arm_forge.py` with `test_arm_gitea_label_write_read
      • Draft OpenSpec change mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic (specloop propose, round 2)
      • specloop: task 1.1 Add manifest forge selection and full Gitea origin validation in `specloop/cli.py`, using existing config parsing and GiteaForge construction. Preserve GitHub routing before config
      • specloop: task 1.1 Add the strictly boolean default-false field after env in `specloop/manifest.py` and bounded numeric listener discovery plus pure optional loopback rendering in `specloop/verify.py:
      • specloop: task 1.2 Implement safe Gitea publication in `specloop/cli.py:_existing_pr/_publish`: inspect the fresh base..head NUL-delimited no-renames diff before effects on both forges, preserve push/
      • specloop: task 1.2 Wire listener discovery into the launch-time profile resolver in `specloop/verify.py`, including direct-step validation, independent profiles, nested-sandbox refusal and retained di
      • specloop: task 1.3 Implement Gitea title readiness in `specloop/cli.py:_finish` with GET, one prefix-removing PATCH and exact GET verification, including ambiguous-write read-back and unprefixed retry
      • specloop: task 1.3 Validate and document the landed loopback contract without runtime edits. Add real Python-socket `test_loopback_sandbox_allows_own_port_and_blocks_existing_listener` and paired malf
      • specloop: task 1.4 Add the private Gitea context reader in `specloop/critic.py`, taking a constructed forge, repository and branch. Use confined page requests, PR-number/file-name identities, backend-
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.4 Add tagged tests covering `verify-preparation/real-loopback-enforcement-evidence/own-ephemeral-listener-works-and-existing-listener-is-blocked`, `verify-preparation/real-loopback-en
      • specloop: task 1.5 Wire `open_pr_files` to the manifest selector and Gitea reader in `specloop/critic.py`; preserve the GitHub backend's argv, limits and runner injection. Construct GiteaForge with a
      • specloop: task 1.6 Align operator-facing confirmation and guidance with the shared engine. Change only Publish/Finish warning text in `plugins/nightshift/client/factory-model.ts:decideFactoryAction` t
      • specloop: archive mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic into openspec/specs
      • Merge pull request #154 from mattpolicastro/spec/mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic
      • specloop: task 1.1 After #129 and #138 are landed, implement the configuration-only link helper and additive non-GitHub `context.link` in `specloop/cli.py::_status_context` following the design, prese
    • Merged PR
      plugin: open forge links in the system browser
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic (specloop propose, round 1)
      16 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic (specloop propose, round 2)
      • specloop: task 1.1 Add manifest forge selection and full Gitea origin validation in `specloop/cli.py`, using existing config parsing and GiteaForge construction. Preserve GitHub routing before config
      • specloop: complete task 1.1
      • specloop: task 1.2 Implement safe Gitea publication in `specloop/cli.py:_existing_pr/_publish`: inspect the fresh base..head NUL-delimited no-renames diff before effects on both forges, preserve push/
      • specloop: complete task 1.2
      • specloop: task 1.3 Implement Gitea title readiness in `specloop/cli.py:_finish` with GET, one prefix-removing PATCH and exact GET verification, including ambiguous-write read-back and unprefixed retry
      • specloop: complete task 1.3
      • specloop: task 1.4 Add the private Gitea context reader in `specloop/critic.py`, taking a constructed forge, repository and branch. Use confined page requests, PR-number/file-name identities, backend-
      • specloop: complete task 1.4
      • specloop: task 1.5 Wire `open_pr_files` to the manifest selector and Gitea reader in `specloop/critic.py`; preserve the GitHub backend's argv, limits and runner injection. Construct GiteaForge with a
      • specloop: complete task 1.5
      • specloop: task 1.6 Align operator-facing confirmation and guidance with the shared engine. Change only Publish/Finish warning text in `plugins/nightshift/client/factory-model.ts:decideFactoryAction` t
      • specloop: complete task 1.6
      • specloop: archive mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic into openspec/specs
      • Merge pull request #154 from mattpolicastro/spec/mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic
    • Merged PR
      Spec: Forge: specloop publish, finish and critic on the forge
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic into openspec/specs
      19 commits
      • specloop: archive mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic into openspec/specs
      • specloop: task 1.1 Add manifest forge selection and full Gitea origin validation in `specloop/cli.py`, using existing config parsing and GiteaForge construction. Preserve GitHub routing before config
      • specloop: complete task 1.1
      • specloop: task 1.2 Implement safe Gitea publication in `specloop/cli.py:_existing_pr/_publish`: inspect the fresh base..head NUL-delimited no-renames diff before effects on both forges, preserve push/
      • specloop: complete task 1.2
      • specloop: task 1.3 Implement Gitea title readiness in `specloop/cli.py:_finish` with GET, one prefix-removing PATCH and exact GET verification, including ambiguous-write read-back and unprefixed retry
      • specloop: complete task 1.3
      • specloop: task 1.4 Add the private Gitea context reader in `specloop/critic.py`, taking a constructed forge, repository and branch. Use confined page requests, PR-number/file-name identities, backend-
      • specloop: complete task 1.4
      • specloop: task 1.5 Wire `open_pr_files` to the manifest selector and Gitea reader in `specloop/critic.py`; preserve the GitHub backend's argv, limits and runner injection. Construct GiteaForge with a
      • specloop: complete task 1.5
      • specloop: task 1.6 Align operator-facing confirmation and guidance with the shared engine. Change only Publish/Finish warning text in `plugins/nightshift/client/factory-model.ts:decideFactoryAction` t
      • specloop: complete task 1.6
      • Draft OpenSpec change mattpolicastro__nightshift-issue-151-verify-per-step-loopback-for-flutter-tes (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-135-manifest-per-step-env-table (specloop propose, round 1)
      • specloop: task 1.1 Implement the shared env schema, validation, placeholder handling and fresh per-command merge in `specloop/manifest.py` and `specloop/verify.py` as specified in the design; add focu
      • specloop: task 1.2 After 1.1, update the preparation and mutation-step field guidance in `docs/specloop/README.md`, add the env explanation and four-kind TOML fragment, and add new `tests/test_step_en
      • specloop: archive mattpolicastro__nightshift-issue-135-manifest-per-step-env-table into openspec/specs
      • Merge pull request #152 from mattpolicastro/spec/mattpolicastro__nightshift-issue-135-manifest-per-step-env-table
    • Merged PR
      Spec: Manifest: per-step env table
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-135-manifest-per-step-env-table into openspec/specs
    • Pushed
      specloop: task 1.1 Implement the shared env schema, validation, placeholder handling and fresh per-command merge in `specloop/manifest.py` and `specloop/verify.py` as specified in the design; add focu
      17 commits
      • specloop: task 1.1 Implement the shared env schema, validation, placeholder handling and fresh per-command merge in `specloop/manifest.py` and `specloop/verify.py` as specified in the design; add focu
      • specloop: complete task 1.1
      • specloop: task 1.2 After 1.1, update the preparation and mutation-step field guidance in `docs/specloop/README.md`, add the env explanation and four-kind TOML fragment, and add new `tests/test_step_en
      • specloop: complete task 1.2
      • Draft OpenSpec change mattpolicastro__nightshift-issue-128-forge-forges-config-forge-selection-seal (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-128-forge-forges-config-forge-selection-seal (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-128-forge-forges-config-forge-selection-seal (specloop propose, round 3)
      • specloop: task 1.1 Add typed forge tables, exact references, implicit GitHub defaults and casefolded enrollment collision validation in `nightshift/config.py`; retain ignored unknown keys and engine/m
      • specloop: task 1.2 Add daemon `forge_for` and landing-environment exclusion, then gate every Gitea row in startup and polling before readiness/recovery/stages with the mandatory dispatch hold. Leave `
      • specloop: task 1.3 Extend `specloop/seal.py:credential_values` using the pure forge-table parser and trusted explicit/default config selection, scanning every declared bot/landing value from all avail
      • specloop: complete task 1.3
      • specloop: task 1.4 Add read-only remote Gitea preflight controls in `nightshift/preflight.py` using injectable existing transports: per-forge bot/non-admin and forbidden-probe checks, per-repository c
      • specloop: complete task 1.4
      • specloop: task 1.5 Complete clone credential verification in `nightshift/preflight.py` with bounded noninteractive injected git subprocesses, strict matching origin and bot username, duplicate/malform
      • specloop: complete task 1.5
      • specloop: archive mattpolicastro__nightshift-issue-128-forge-forges-config-forge-selection-seal into openspec/specs
      • Merge pull request #149 from mattpolicastro/spec/mattpolicastro__nightshift-issue-128-forge-forges-config-forge-selection-seal
    • Merged PR
      Spec: Forge: [[forges]] config, forge selection, seal and preflight per forge
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-128-forge-forges-config-forge-selection-seal into openspec/specs
    • Pushed
      specloop: task 1.1 Add typed forge tables, exact references, implicit GitHub defaults and casefolded enrollment collision validation in `nightshift/config.py`; retain ignored unknown keys and engine/m
      10 commits
      • specloop: task 1.1 Add typed forge tables, exact references, implicit GitHub defaults and casefolded enrollment collision validation in `nightshift/config.py`; retain ignored unknown keys and engine/m
      • specloop: complete task 1.1
      • specloop: task 1.2 Add daemon `forge_for` and landing-environment exclusion, then gate every Gitea row in startup and polling before readiness/recovery/stages with the mandatory dispatch hold. Leave `
      • specloop: complete task 1.2
      • specloop: task 1.3 Extend `specloop/seal.py:credential_values` using the pure forge-table parser and trusted explicit/default config selection, scanning every declared bot/landing value from all avail
      • specloop: complete task 1.3
      • specloop: task 1.4 Add read-only remote Gitea preflight controls in `nightshift/preflight.py` using injectable existing transports: per-forge bot/non-admin and forbidden-probe checks, per-repository c
      • specloop: complete task 1.4
      • specloop: task 1.5 Complete clone credential verification in `nightshift/preflight.py` with bounded noninteractive injected git subprocesses, strict matching origin and bot username, duplicate/malform
      • specloop: complete task 1.5
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-138-publication-carry-design-level-human-che (specloop propose, round 2)
      8 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-138-publication-carry-design-level-human-che (specloop propose, round 2)
      • specloop: task 1.1 Add committed-design collection in `specloop/loop.py` and use it from `finals` and `specloop/cli.py:_pr_body`, with local regression tests in new `tests/test_specloop_design_checks.
      • specloop: complete task 1.1
      • specloop: task 1.2 Add `test_design_human_checks_reach_publication` and recovery/readiness cases in new `tests/test_specloop_design_publication.py`, using temporary committed Git trees, real readiness
      • specloop: complete task 1.2
      • Merge current PR base 0621c92fe95145f00e3721d5e5b19eab2f014d9b
      • specloop: archive mattpolicastro__nightshift-issue-138-publication-carry-design-level-human-che into openspec/specs
      • Merge pull request #147 from mattpolicastro/spec/mattpolicastro__nightshift-issue-138-publication-carry-design-level-human-che
    • Merged PR
      Spec: Publication: carry design-level human checks into the publish receipt
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-138-publication-carry-design-level-human-che into openspec/specs
      24 commits
      • specloop: archive mattpolicastro__nightshift-issue-138-publication-carry-design-level-human-che into openspec/specs
      • Draft OpenSpec change mattpolicastro__nightshift-issue-127-forge-giteaforge-for-front-door-operatio (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-127-forge-giteaforge-for-front-door-operatio (specloop propose, round 2)
      • specloop: task 1.1 Create the guarded adapter/fake foundation in `nightshift/forge/gitea.py`, `tests/fake_gitea.py` and `tests/test_forge_gitea.py`: constructor validation and copied allowlist, transp
      • specloop: complete task 1.1
      • specloop: task 1.2 Implement label map refresh, issue/open-PR local filtering, issue-label reads and targeted issue/PR relabeling with read-back after every successful write; extend fake label/issue r
      • specloop: complete task 1.2
      • specloop: task 1.3 Implement allowlist-only identity projection, timeline label events, issue/drafting/repository/blocker reads, complete comment/feedback reads and explicit unsupported membership met
      • specloop: complete task 1.3
      • specloop: task 1.4 Implement all-state exact-branch PR lookup, shared PR view normalization, safe target resolution and title-prefix draft creation in `gitea.py`, with corresponding fake routes/tests.
      • specloop: complete task 1.4
      • specloop: task 1.5 Implement `checks_for_sha`, the `pr_checks` compatibility method and commit-parent normalization in `gitea.py`, with fake combined-status/commit routes and table-driven tests. Add `
      • specloop: complete task 1.5
      • specloop: task 1.6 Implement bot-owned updates/marked creates using the comment reads from 1.3 and ambiguous-create reconciliation, with fake comment routes/failures and `test_gitea_comment_create_rec
      • specloop: complete task 1.6
      • specloop: task 1.7 Create `tests/contract/conftest.py` and `tests/contract/test_gitea_contract.py` to reuse compact normal-operation contracts offline and in explicitly selected live mode. Complete th
      • specloop: complete task 1.7
      • Merge current PR base d1e1b904288a9c0ae1d7ede569ac4bb0cb1d2425
      • Merge current PR base 699b0ef20147ba853edfc5c5cf8f259614ba7cd1
      • specloop: archive mattpolicastro__nightshift-issue-127-forge-giteaforge-for-front-door-operatio into openspec/specs
      • Merge pull request #144 from mattpolicastro/spec/mattpolicastro__nightshift-issue-127-forge-giteaforge-for-front-door-operatio
      • specloop: task 1.1 Add committed-design collection in `specloop/loop.py` and use it from `finals` and `specloop/cli.py:_pr_body`, with local regression tests in new `tests/test_specloop_design_checks.
      • specloop: task 1.2 Add `test_design_human_checks_reach_publication` and recovery/readiness cases in new `tests/test_specloop_design_publication.py`, using temporary committed Git trees, real readiness
      • Merge current PR base 0621c92fe95145f00e3721d5e5b19eab2f014d9b
    • Merged PR
      Spec: Forge: GiteaForge for front-door operations, FakeGitea, contract suite
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-127-forge-giteaforge-for-front-door-operatio into openspec/specs
      41 commits
      • specloop: archive mattpolicastro__nightshift-issue-127-forge-giteaforge-for-front-door-operatio into openspec/specs
      • Draft OpenSpec change mattpolicastro__nightshift-issue-134-verify-trusted-dependency-snapshots-keye (specloop propose, round 1)
      • specloop: task 1.1 Add `Snapshot` and optional `Manifest.snapshots` parsing/validation in `specloop/manifest.py`, plus the framed raw-byte `snapshot_key` helper in `specloop/verify.py`. Add focused ma
      • specloop: complete task 1.1
      • Draft OpenSpec change mattpolicastro__nightshift-issue-137-revision-rounds-a-re-run-round-must-post (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-137-revision-rounds-a-re-run-round-must-post (specloop propose, round 2)
      • specloop: task 1.1 Implement durable same-round result identities and delivery in `nightshift/specloop_intake.py`: validate optional `delivery_attempt`, refresh it only when `_save_revision_snapshot`
      • specloop: task 1.2 Implement the trusted-base warm executor and immutable atomic payload publication in `specloop/verify.py`, reusing the command runner without changing ordinary receipts. Add `Snapsh
      • specloop: complete task 1.2
      • specloop: task 1.2 Add compatibility and interruption regressions in new `tests/test_revision_result_markers.py`, reusing existing recovery and transport fakes. Include `test_old_round_markers_still_r
      • specloop: task 1.1 Create the guarded adapter/fake foundation in `nightshift/forge/gitea.py`, `tests/fake_gitea.py` and `tests/test_forge_gitea.py`: constructor validation and copied allowlist, transp
      • specloop: task 1.3 Add clonefile-backed consumption and optional context keywords to `run_steps()`/`run_extracted()` in `specloop/verify.py`, path expansion before preparation, final store write denia
      • specloop: task 1.3 Add the concise revision rerun limitation and remove/clear/re-add workaround to `KNOWN-LIMITATIONS.md`, preserving existing limitations and citing #137. Explain unchanged rejection
      • specloop: complete task 1.3
      • specloop: task 1.2 Implement label map refresh, issue/open-PR local filtering, issue-label reads and targeted issue/PR relabeling with read-back after every successful write; extend fake label/issue r
      • specloop: task 1.4 Wire initial snapshot-only base sync, final base-sync warming and verification context propagation in `specloop/loop.py` under the existing run lock, with serialized forwarding to r
      • specloop: complete task 1.4
      • specloop: task 1.3 Implement allowlist-only identity projection, timeline label events, issue/drafting/repository/blocker reads, complete comment/feedback reads and explicit unsupported membership met
      • specloop: task 1.5 Thread snapshot context through `specloop/evidence.py` and its `loop.py` caller without changing mutation receipts or timeboxes. Add focused evidence fixtures covering distinct sequ
      • specloop: complete task 1.5
      • specloop: archive mattpolicastro__nightshift-issue-137-revision-rounds-a-re-run-round-must-post into openspec/specs
      • specloop: task 1.4 Implement all-state exact-branch PR lookup, shared PR view normalization, safe target resolution and title-prefix draft creation in `gitea.py`, with corresponding fake routes/tests.
      • Merge pull request #143 from mattpolicastro/spec/mattpolicastro__nightshift-issue-137-revision-rounds-a-re-run-round-must-post
      • specloop: task 1.6 Complete snapshot lifecycle retention/recovery in `specloop/verify.py` with cross-ID, cross-run and interrupted-prune tests; document the finished opt-in contract in `docs/specloop/
      • specloop: complete task 1.6
      • specloop: task 1.5 Implement `checks_for_sha`, the `pr_checks` compatibility method and commit-parent normalization in `gitea.py`, with fake combined-status/commit routes and table-driven tests. Add `
      • specloop: task 1.6 Implement bot-owned updates/marked creates using the comment reads from 1.3 and ambiguous-create reconciliation, with fake comment routes/failures and `test_gitea_comment_create_rec
      • Draft OpenSpec change mattpolicastro__nightshift-issue-132-factory-page-accept-pr-links-on-configur (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-132-factory-page-accept-pr-links-on-configur (specloop propose, round 3)
      • Merge current PR base cecca8a9e11b986def1c4e312c7a43ac9541433e
      • specloop: task 1.1 Implement origin-file resolution and per-status-load allowlisting in `plugins/nightshift/server/host-paths.ts` and `plugins/nightshift/server/factory.ts`, with regression tests in n
      • specloop: task 1.2 Lock down GitHub-only Land eligibility after forge display is available, using `plugins/nightshift/server/factory-landing.ts`'s existing strict schemas and adding any necessary guar
      • specloop: archive mattpolicastro__nightshift-issue-134-verify-trusted-dependency-snapshots-keye into openspec/specs
      • specloop: task 1.7 Create `tests/contract/conftest.py` and `tests/contract/test_gitea_contract.py` to reuse compact normal-operation contracts offline and in explicitly selected live mode. Complete th
      • Merge pull request #142 from mattpolicastro/spec/mattpolicastro__nightshift-issue-134-verify-trusted-dependency-snapshots-keye
      • specloop: complete task 1.7
      • specloop: archive mattpolicastro__nightshift-issue-132-factory-page-accept-pr-links-on-configur into openspec/specs
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-132-factory-page-accept-pr-links-on-configur
      • Merge current PR base d1e1b904288a9c0ae1d7ede569ac4bb0cb1d2425
      • Merge pull request #146 from mattpolicastro/spec/mattpolicastro__nightshift-issue-132-factory-page-accept-pr-links-on-configur
      • Merge current PR base 699b0ef20147ba853edfc5c5cf8f259614ba7cd1
    • Merged PR
      Spec: Factory page: accept PR links on configured forges
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-134-verify-trusted-dependency-snapshots-keye (specloop propose, round 1)
      18 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-134-verify-trusted-dependency-snapshots-keye (specloop propose, round 1)
      • specloop: task 1.1 Add `Snapshot` and optional `Manifest.snapshots` parsing/validation in `specloop/manifest.py`, plus the framed raw-byte `snapshot_key` helper in `specloop/verify.py`. Add focused ma
      • specloop: complete task 1.1
      • specloop: task 1.2 Implement the trusted-base warm executor and immutable atomic payload publication in `specloop/verify.py`, reusing the command runner without changing ordinary receipts. Add `Snapsh
      • specloop: complete task 1.2
      • specloop: task 1.3 Add clonefile-backed consumption and optional context keywords to `run_steps()`/`run_extracted()` in `specloop/verify.py`, path expansion before preparation, final store write denia
      • specloop: complete task 1.3
      • specloop: task 1.4 Wire initial snapshot-only base sync, final base-sync warming and verification context propagation in `specloop/loop.py` under the existing run lock, with serialized forwarding to r
      • specloop: complete task 1.4
      • specloop: task 1.5 Thread snapshot context through `specloop/evidence.py` and its `loop.py` caller without changing mutation receipts or timeboxes. Add focused evidence fixtures covering distinct sequ
      • specloop: complete task 1.5
      • specloop: task 1.6 Complete snapshot lifecycle retention/recovery in `specloop/verify.py` with cross-ID, cross-run and interrupted-prune tests; document the finished opt-in contract in `docs/specloop/
      • specloop: complete task 1.6
      • Merge current PR base cecca8a9e11b986def1c4e312c7a43ac9541433e
      • specloop: archive mattpolicastro__nightshift-issue-134-verify-trusted-dependency-snapshots-keye into openspec/specs
      • Merge pull request #142 from mattpolicastro/spec/mattpolicastro__nightshift-issue-134-verify-trusted-dependency-snapshots-keye
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-132-factory-page-accept-pr-links-on-configur
      • specloop: archive mattpolicastro__nightshift-issue-132-factory-page-accept-pr-links-on-configur into openspec/specs
    • Merged PR
      Spec: Verify: trusted dependency snapshots keyed by lockfile
    • Pushed
      specloop: task 1.1 Implement origin-file resolution and per-status-load allowlisting in `plugins/nightshift/server/host-paths.ts` and `plugins/nightshift/server/factory.ts`, with regression tests in n
      41 commits
      • specloop: task 1.1 Implement origin-file resolution and per-status-load allowlisting in `plugins/nightshift/server/host-paths.ts` and `plugins/nightshift/server/factory.ts`, with regression tests in n
      • specloop: complete task 1.1
      • specloop: task 1.2 Lock down GitHub-only Land eligibility after forge display is available, using `plugins/nightshift/server/factory-landing.ts`'s existing strict schemas and adding any necessary guar
      • specloop: complete task 1.2
      • specloop: archive mattpolicastro__nightshift-issue-134-verify-trusted-dependency-snapshots-keye into openspec/specs
      • Draft OpenSpec change mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by (specloop propose, round 4)
      • specloop: task 1.1 Add `Forge`, `ForgeError` and frozen factual records in `nightshift/forge/__init__.py` and new `nightshift/forge/types.py`; retain the package docstring and avoid runtime import cyc
      • specloop: task 1.2 Complete the direct operations in `nightshift/forge/github.py` using the design's fixed argv inventory, semantic inputs and narrow raw-response exceptions. Extend `tests/test_forge_
      • specloop: task 2.1 Migrate the authorization and comment I/O helpers in `nightshift/specloop_intake.py`: issue-author lookup, label-event reads, membership requests, `_comment_label_rejection`, `_comm
      • specloop: complete task 2.1
      • specloop: task 2.2 Migrate `propose_pending` and `_deliver` in `nightshift/specloop_intake.py` to late-created forge operations for listing, issue/PR reads, blockers, PR creation and labels, passing t
      • specloop: complete task 2.2
      • specloop: task 2.3 Migrate `admit_pending`, `revise_pending`, `_initialize_revision_feedback` and `_approval_covers_head` in `nightshift/specloop_intake.py`, removing the frozen helper runner default
      • specloop: complete task 2.3
      • specloop: task 2.4 Migrate `publish_pending`, `_reconcile_merge_readiness`, `_readiness_ci` and `_deliver_readiness` in `nightshift/specloop_intake.py` to late-created forge operations. Keep CI JSON p
      • specloop: complete task 2.4
      • specloop: task 2.5 Complete guarded daemon integration in `nightshift/daemon.py`, using `GitHubForge(gh)` for engine-switch recovery and retaining the guarded runner passed to intake and error reporti
      • specloop: complete task 2.5
      • Merge current PR base 6d2d238e610583e6fa7678e5f985624357ec9fff
      • specloop: archive mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by into openspec/specs
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by
      • Merge pull request #140 from mattpolicastro/spec/mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by
      • specloop: task 1.1 Add `Snapshot` and optional `Manifest.snapshots` parsing/validation in `specloop/manifest.py`, plus the framed raw-byte `snapshot_key` helper in `specloop/verify.py`. Add focused ma
      • Draft OpenSpec change mattpolicastro__nightshift-issue-137-revision-rounds-a-re-run-round-must-post (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-137-revision-rounds-a-re-run-round-must-post (specloop propose, round 2)
      • specloop: task 1.1 Implement durable same-round result identities and delivery in `nightshift/specloop_intake.py`: validate optional `delivery_attempt`, refresh it only when `_save_revision_snapshot`
      • specloop: task 1.2 Implement the trusted-base warm executor and immutable atomic payload publication in `specloop/verify.py`, reusing the command runner without changing ordinary receipts. Add `Snapsh
      • specloop: task 1.2 Add compatibility and interruption regressions in new `tests/test_revision_result_markers.py`, reusing existing recovery and transport fakes. Include `test_old_round_markers_still_r
      • specloop: task 1.3 Add clonefile-backed consumption and optional context keywords to `run_steps()`/`run_extracted()` in `specloop/verify.py`, path expansion before preparation, final store write denia
      • specloop: task 1.3 Add the concise revision rerun limitation and remove/clear/re-add workaround to `KNOWN-LIMITATIONS.md`, preserving existing limitations and citing #137. Explain unchanged rejection
      • specloop: complete task 1.3
      • specloop: task 1.4 Wire initial snapshot-only base sync, final base-sync warming and verification context propagation in `specloop/loop.py` under the existing run lock, with serialized forwarding to r
      • specloop: complete task 1.4
      • specloop: task 1.5 Thread snapshot context through `specloop/evidence.py` and its `loop.py` caller without changing mutation receipts or timeboxes. Add focused evidence fixtures covering distinct sequ
      • specloop: complete task 1.5
      • specloop: archive mattpolicastro__nightshift-issue-137-revision-rounds-a-re-run-round-must-post into openspec/specs
      • Merge pull request #143 from mattpolicastro/spec/mattpolicastro__nightshift-issue-137-revision-rounds-a-re-run-round-must-post
      • specloop: task 1.6 Complete snapshot lifecycle retention/recovery in `specloop/verify.py` with cross-ID, cross-run and interrupted-prune tests; document the finished opt-in contract in `docs/specloop/
      • specloop: complete task 1.6
      • Merge current PR base cecca8a9e11b986def1c4e312c7a43ac9541433e
    • Merged PR
      Spec: Revision rounds: a re-run round must post its new result
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-137-revision-rounds-a-re-run-round-must-post into openspec/specs
      25 commits
      • specloop: archive mattpolicastro__nightshift-issue-137-revision-rounds-a-re-run-round-must-post into openspec/specs
      • specloop: task 1.1 Implement durable same-round result identities and delivery in `nightshift/specloop_intake.py`: validate optional `delivery_attempt`, refresh it only when `_save_revision_snapshot`
      • specloop: complete task 1.1
      • specloop: task 1.2 Add compatibility and interruption regressions in new `tests/test_revision_result_markers.py`, reusing existing recovery and transport fakes. Include `test_old_round_markers_still_r
      • specloop: complete task 1.2
      • specloop: task 1.3 Add the concise revision rerun limitation and remove/clear/re-add workaround to `KNOWN-LIMITATIONS.md`, preserving existing limitations and citing #137. Explain unchanged rejection
      • specloop: complete task 1.3
      • Draft OpenSpec change mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by (specloop propose, round 4)
      • specloop: task 1.1 Add `Forge`, `ForgeError` and frozen factual records in `nightshift/forge/__init__.py` and new `nightshift/forge/types.py`; retain the package docstring and avoid runtime import cyc
      • specloop: task 1.2 Complete the direct operations in `nightshift/forge/github.py` using the design's fixed argv inventory, semantic inputs and narrow raw-response exceptions. Extend `tests/test_forge_
      • specloop: task 2.1 Migrate the authorization and comment I/O helpers in `nightshift/specloop_intake.py`: issue-author lookup, label-event reads, membership requests, `_comment_label_rejection`, `_comm
      • specloop: complete task 2.1
      • specloop: task 2.2 Migrate `propose_pending` and `_deliver` in `nightshift/specloop_intake.py` to late-created forge operations for listing, issue/PR reads, blockers, PR creation and labels, passing t
      • specloop: complete task 2.2
      • specloop: task 2.3 Migrate `admit_pending`, `revise_pending`, `_initialize_revision_feedback` and `_approval_covers_head` in `nightshift/specloop_intake.py`, removing the frozen helper runner default
      • specloop: complete task 2.3
      • specloop: task 2.4 Migrate `publish_pending`, `_reconcile_merge_readiness`, `_readiness_ci` and `_deliver_readiness` in `nightshift/specloop_intake.py` to late-created forge operations. Keep CI JSON p
      • specloop: complete task 2.4
      • specloop: task 2.5 Complete guarded daemon integration in `nightshift/daemon.py`, using `GitHubForge(gh)` for engine-switch recovery and retaining the guarded runner passed to intake and error reporti
      • specloop: complete task 2.5
      • Merge current PR base 6d2d238e610583e6fa7678e5f985624357ec9fff
      • specloop: archive mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by into openspec/specs
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by
      • Merge pull request #140 from mattpolicastro/spec/mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by
    • Merged PR
      Spec: Forge seam: Forge Protocol + GitHubForge (byte-identical argv) for intake and readiness
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-133-evidence-mutation-testing-for-compiled-l (specloop propose, round 1)
      12 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-133-evidence-mutation-testing-for-compiled-l (specloop propose, round 1)
      • specloop: task 1.1 Add configurable invalid classification. In `specloop/manifest.py` and `specloop/evidence.py`, add the shared default, typed manifest field, validation/round-trip support and worker
      • specloop: complete task 1.1
      • specloop: task 1.2 Add C-family generation and preserve legacy behavior. In `specloop/evidence.py`, add the extension table, token guards and physical-line quote/comment rules, retain existing complet
      • specloop: complete task 1.2
      • specloop: task 1.3 Document and validate the Dart example. Update only the evidence section of `docs/specloop/README.md`, add `examples/specloop/dart.toml` and structural tests for real-parser step re
      • specloop: complete task 1.3
      • Merge current PR base 9c4c7258876169360707ba5327604651ad0f5166
      • specloop: archive mattpolicastro__nightshift-issue-133-evidence-mutation-testing-for-compiled-l into openspec/specs
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-133-evidence-mutation-testing-for-compiled-l
      • Merge pull request #139 from mattpolicastro/spec/mattpolicastro__nightshift-issue-133-evidence-mutation-testing-for-compiled-l
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by
    • Merged PR
      Spec: Evidence: mutation testing for compiled languages
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by into openspec/specs
      21 commits
      • specloop: archive mattpolicastro__nightshift-issue-126-forge-seam-forge-protocol-githubforge-by into openspec/specs
      • specloop: task 1.1 Add `Forge`, `ForgeError` and frozen factual records in `nightshift/forge/__init__.py` and new `nightshift/forge/types.py`; retain the package docstring and avoid runtime import cyc
      • specloop: complete task 1.1
      • specloop: task 1.2 Complete the direct operations in `nightshift/forge/github.py` using the design's fixed argv inventory, semantic inputs and narrow raw-response exceptions. Extend `tests/test_forge_
      • specloop: complete task 1.2
      • specloop: task 2.1 Migrate the authorization and comment I/O helpers in `nightshift/specloop_intake.py`: issue-author lookup, label-event reads, membership requests, `_comment_label_rejection`, `_comm
      • specloop: complete task 2.1
      • specloop: task 2.2 Migrate `propose_pending` and `_deliver` in `nightshift/specloop_intake.py` to late-created forge operations for listing, issue/PR reads, blockers, PR creation and labels, passing t
      • specloop: complete task 2.2
      • specloop: task 2.3 Migrate `admit_pending`, `revise_pending`, `_initialize_revision_feedback` and `_approval_covers_head` in `nightshift/specloop_intake.py`, removing the frozen helper runner default
      • specloop: complete task 2.3
      • specloop: task 2.4 Migrate `publish_pending`, `_reconcile_merge_readiness`, `_readiness_ci` and `_deliver_readiness` in `nightshift/specloop_intake.py` to late-created forge operations. Keep CI JSON p
      • specloop: complete task 2.4
      • fix(land): ignore unrelated forge hosts during run discovery
      • specloop: task 2.5 Complete guarded daemon integration in `nightshift/daemon.py`, using `GitHubForge(gh)` for engine-switch recovery and retaining the guarded runner passed to intake and error reporti
      • specloop: complete task 2.5
      • tests: treat EPERM as gone in the factory-land absent() helper
      • Merge pull request #141 from mattpolicastro/fix/land-skip-foreign-forge-rows
      • Merge current PR base 6d2d238e610583e6fa7678e5f985624357ec9fff
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-133-evidence-mutation-testing-for-compiled-l
      • specloop: archive mattpolicastro__nightshift-issue-133-evidence-mutation-testing-for-compiled-l into openspec/specs
    • Merged PR
      land: ignore other forge hosts during run discovery
    • Pushed
      tests: treat EPERM as gone in the factory-land absent() helper
      15 commits
      • tests: treat EPERM as gone in the factory-land absent() helper
      • Draft OpenSpec change mattpolicastro__nightshift-issue-123-forge-gitea-http-transport-stdlib-urllib (specloop propose, round 1)
      • specloop: task 1.1 Establish the origin and redirect boundary in new `nightshift/forge/http.py`, add the docstring-only `nightshift/forge/__init__.py`, and start `tests/test_gitea_http.py` with local
      • specloop: complete task 1.1
      • specloop: task 1.2 Complete JSON request/response and helper semantics in `nightshift/forge/http.py` with tests in `tests/test_gitea_http.py`: uppercase methods, doseq query encoding, JSON headers/bod
      • specloop: complete task 1.2
      • specloop: task 1.3 Add failure classification, bounded GET retries and the per-attempt guard in `nightshift/forge/http.py`, with `test_get_retries_transient_but_writes_never_retry` and `test_guard_run
      • specloop: complete task 1.3
      • Merge current PR base 1a78b001f9690ba0d84da4bfda00e07885ea9d1a
      • specloop: archive mattpolicastro__nightshift-issue-123-forge-gitea-http-transport-stdlib-urllib into openspec/specs
      • Merge pull request #125 from mattpolicastro/spec/mattpolicastro__nightshift-issue-123-forge-gitea-http-transport-stdlib-urllib
      • specloop: task 1.1 Add configurable invalid classification. In `specloop/manifest.py` and `specloop/evidence.py`, add the shared default, typed manifest field, validation/round-trip support and worker
      • specloop: task 1.2 Add C-family generation and preserve legacy behavior. In `specloop/evidence.py`, add the extension table, token guards and physical-line quote/comment rules, retain existing complet
      • specloop: task 1.3 Document and validate the Dart example. Update only the evidence section of `docs/specloop/README.md`, add `examples/specloop/dart.toml` and structural tests for real-parser step re
      • Merge current PR base 9c4c7258876169360707ba5327604651ad0f5166
    • Merged PR
      Spec: Forge: Gitea HTTP transport (stdlib urllib, origin-locked, no redirects)
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-123-forge-gitea-http-transport-stdlib-urllib into openspec/specs
      32 commits
      • specloop: archive mattpolicastro__nightshift-issue-123-forge-gitea-http-transport-stdlib-urllib into openspec/specs
      • 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)
      • 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
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • 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.4
      • 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.5
      • 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.6
      • 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.7
      • specloop: strengthen section 1 after its evidence check
      • 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.8
      • Merge current PR base 289c5ec3996e55fa75cf48d162d16f45402c0fc6
      • plugin: support Paseo 0.13
      • specloop: archive mattpolicastro__nightshift-issue-79-factory-page-a-land-action-for-runs-at-h into openspec/specs
      • chore: delete uncalled worker GitHub utilities
      • pr-revision: drop the Worker feedback compatibility requirement
      • Merge pull request #118 from mattpolicastro/spec/mattpolicastro__nightshift-issue-79-factory-page-a-land-action-for-runs-at-h
      • Merge pull request #124 from mattpolicastro/chore/d1-delete-dead-worker-github-code
      • Merge pull request #121 from mattpolicastro/plugin/paseo-0.13
      • specloop: task 1.1 Establish the origin and redirect boundary in new `nightshift/forge/http.py`, add the docstring-only `nightshift/forge/__init__.py`, and start `tests/test_gitea_http.py` with local
      • specloop: task 1.2 Complete JSON request/response and helper semantics in `nightshift/forge/http.py` with tests in `tests/test_gitea_http.py`: uppercase methods, doseq query encoding, JSON headers/bod
      • specloop: task 1.3 Add failure classification, bounded GET retries and the per-attempt guard in `nightshift/forge/http.py`, with `test_get_retries_transient_but_writes_never_retry` and `test_guard_run
      • Merge current PR base 1a78b001f9690ba0d84da4bfda00e07885ea9d1a
    • Pushed
      plugin: support Paseo 0.13
      2 commits
      • plugin: support Paseo 0.13
      • Merge pull request #121 from mattpolicastro/plugin/paseo-0.13
    • Merged PR
      plugin: support Paseo 0.13
    • Pushed
      chore: delete uncalled worker GitHub utilities
      3 commits
      • chore: delete uncalled worker GitHub utilities
      • pr-revision: drop the Worker feedback compatibility requirement
      • Merge pull request #124 from mattpolicastro/chore/d1-delete-dead-worker-github-code
    • Merged PR
      Delete dead worker-era GitHub code (vcs.py, worker queue APIs)
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-79-factory-page-a-land-action-for-runs-at-h (specloop propose, round 1)
      22 commits
      • 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)
      • 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
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • 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.4
      • 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.5
      • 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.6
      • 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.7
      • specloop: strengthen section 1 after its evidence check
      • 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.8
      • Merge current PR base 289c5ec3996e55fa75cf48d162d16f45402c0fc6
      • specloop: archive mattpolicastro__nightshift-issue-79-factory-page-a-land-action-for-runs-at-h into openspec/specs
      • Merge pull request #118 from mattpolicastro/spec/mattpolicastro__nightshift-issue-79-factory-page-a-land-action-for-runs-at-h
    • Merged PR
      Spec: Factory page: a Land action for runs at human checks
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-79-factory-page-a-land-action-for-runs-at-h into openspec/specs
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir (specloop propose, round 2)
      29 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir (specloop propose, round 2)
      • 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 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
      • specloop: complete task 1.1
      • 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.2
      • specloop: archive mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir into openspec/specs
      • Merge pull request #119 from mattpolicastro/spec/mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir
      • migrate: a completed migration needs no writer exclusion
      • Merge pull request #120 from mattpolicastro/fix/completed-migration-skips-writer-exclusion
      • 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
      • 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: 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.3
      • 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.4
      • 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.5
      • 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.6
      • 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.7
      • specloop: strengthen section 1 after its evidence check
      • 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.8
      • Merge current PR base 289c5ec3996e55fa75cf48d162d16f45402c0fc6
      • 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)
    • Merged PR
      migrate: a completed migration needs no writer exclusion
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir (specloop propose, round 2)
      9 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir (specloop propose, round 2)
      • 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 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
      • specloop: complete task 1.1
      • 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.2
      • specloop: archive mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir into openspec/specs
      • Merge pull request #119 from mattpolicastro/spec/mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir
    • Merged PR
      Spec: Agent sessions: remove the private TMPDIR when the session ends
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir into openspec/specs
      8 commits
      • specloop: archive mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir into openspec/specs
      • 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
      • specloop: complete task 1.1
      • 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.2
      • Draft OpenSpec change mattpolicastro__nightshift-issue-116-agent-sessions-remove-the-private-tmpdir (specloop propose, round 1)
      • CLAUDE.md: describe the unified CLI and state root after #40
      • Merge pull request #114 from mattpolicastro/docs/claude-md-after-rename
    • Merged PR
      CLAUDE.md: describe the unified CLI and state root after #40
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli (specloop propose, round 1)
      50 commits
      • 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)
      • 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/
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • specloop: strengthen section 1 after its evidence check
      • 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: complete task 1.4
      • 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 2.1
      • 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.2
      • 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.3
      • 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.4
      • 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.5
      • 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.6
      • 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.7
      • 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.8
      • 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.9
      • 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.10
      • 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.11
      • specloop: strengthen section 2 after its evidence check
      • 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: complete task 2.12
      • 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 3.1
      • 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.2
      • 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.3
      • 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.4
      • specloop: strengthen section 3 after its evidence check
      • 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: complete task 3.5
      • Fix three CI-only failures: Python 3.12 metadata calls and a no-op chmod probe
      • specloop: archive mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli into openspec/specs
      • Merge pull request #113 from mattpolicastro/spec/mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli
    • Merged PR
      Spec: Rename specloop into Nightshift: one CLI, state under ~/.nightshift
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli into openspec/specs
      47 commits
      • 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: 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/
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • specloop: strengthen section 1 after its evidence check
      • 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: complete task 1.4
      • 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 2.1
      • 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.2
      • 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.3
      • 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.4
      • 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.5
      • 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.6
      • 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.7
      • 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.8
      • 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.9
      • 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.10
      • 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.11
      • specloop: strengthen section 2 after its evidence check
      • 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: complete task 2.12
      • 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 3.1
      • 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.2
      • 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.3
      • 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.4
      • specloop: strengthen section 3 after its evidence check
      • 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: complete task 3.5
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-40-rename-specloop-into-nightshift-one-cli (specloop propose, round 1)
      4 commits
      • 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)
      • CLAUDE.md: describe the specloop-only project after the worker retirement
      • Merge pull request #112 from mattpolicastro/docs/claude-md-after-worker
    • Merged PR
      CLAUDE.md: describe the specloop-only project after the worker retirement
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-16-retire-the-worker-engine (specloop propose, round 1)
      32 commits
      • 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 3)
      • 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 2)
      • 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
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • 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.4
      • 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.5
      • 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.6
      • 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.7
      • 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.8
      • 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.9
      • 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.10
      • 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.11
      • 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.12
      • 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.13
      • specloop: archive mattpolicastro__nightshift-issue-16-retire-the-worker-engine into openspec/specs
      • Merge pull request #111 from mattpolicastro/spec/mattpolicastro__nightshift-issue-16-retire-the-worker-engine
    • Merged PR
      Spec: Retire the worker engine
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-16-retire-the-worker-engine into openspec/specs
      32 commits
      • specloop: archive mattpolicastro__nightshift-issue-16-retire-the-worker-engine into openspec/specs
      • 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
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • 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.4
      • 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.5
      • 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.6
      • 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.7
      • 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.8
      • 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.9
      • 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.10
      • 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.11
      • 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.12
      • 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.13
      • 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 2)
      • readiness: reassess a CI-blocked assessment each poll until CI clears
      • Merge branch 'main' into fix/readiness-ci-refresh
      • Merge pull request #110 from mattpolicastro/fix/readiness-ci-refresh
    • Merged PR
      readiness: reassess a CI-blocked assessment each poll until CI clears
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa (specloop propose, round 1)
      15 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa (specloop propose, round 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
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • 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.4
      • 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.5
      • Merge current PR base 82e114d3eff32bdaf215c9a963bd7cd4585c9879
      • specloop: archive mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa into openspec/specs
      • Merge pull request #109 from mattpolicastro/spec/mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa
      • Merge branch 'main' into fix/readiness-ci-refresh
    • Merged PR
      Spec: nightshift jobs: show active work by default; compact delivered history
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa into openspec/specs
      15 commits
      • specloop: archive mattpolicastro__nightshift-issue-103-nightshift-jobs-show-active-work-by-defa into openspec/specs
      • readiness: front-door PRs take human checks from the publication
      • Merge branch 'main' into fix/readiness-publication-checks
      • Merge pull request #108 from mattpolicastro/fix/readiness-publication-checks
      • 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
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • 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.4
      • 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.5
      • Merge current PR base 82e114d3eff32bdaf215c9a963bd7cd4585c9879
    • Pushed
      readiness: front-door PRs take human checks from the publication
      3 commits
      • readiness: front-door PRs take human checks from the publication
      • Merge branch 'main' into fix/readiness-publication-checks
      • Merge pull request #108 from mattpolicastro/fix/readiness-publication-checks
    • Merged PR
      readiness: front-door PRs take human checks from the publication
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent (specloop propose, round 1)
      25 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent (specloop propose, round 2)
      • 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
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • 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.4
      • specloop: scope provenance validation to dispatch and replay decisions (descope tamper-defense after review loop)
      • 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: complete task 1.5
      • 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.6
      • 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.7
      • 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.8
      • Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5
      • Merge current PR base 07a446be6f5c5a7e0ecc2f7fa36956debd8369a0
      • specloop: archive mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent into openspec/specs
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent
      • Merge pull request #102 from mattpolicastro/spec/mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent
      • Merge branch 'main' into fix/readiness-publication-checks
    • Merged PR
      Spec: Make revise rounds idempotent
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that (specloop propose, round 1)
      25 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that (specloop propose, round 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
      • specloop: complete task 1.1
      • specloop: checklist and scenario detection by line rules, not Markdown parsing (descope after four review rounds)
      • 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: complete task 1.2
      • 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.3
      • 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.4
      • 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.5
      • 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.6
      • specloop: strengthen section 1 after its evidence check
      • 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: complete task 1.7
      • 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.8
      • Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5
      • specloop: archive mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that into openspec/specs
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that
      • 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-7-make-revise-rounds-idempotent
      • specloop: archive mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent into openspec/specs
    • Merged PR
      Spec: Merge readiness: flag front-door PRs that are safe to merge
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le (specloop propose, round 1)
      36 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le (specloop propose, round 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
      • specloop: complete task 1.1
      • 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.2
      • Merge current PR base fda70c4ef0a1cb9b8ba120b72c835d374fcf7701
      • specloop: add a task adapting the background fixture to #9's job identity (base drift)
      • 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: complete task 2.1
      • Merge current PR base aa8cfb89724328b5f8c95d3d50041e2a3ee8f9b9
      • specloop: archive mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le into openspec/specs
      • Merge pull request #100 from mattpolicastro/spec/mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le
      • 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
      • arm: attribute owner-qualified run names to their issue
      • Merge pull request #104 from mattpolicastro/fix/arm-owner-qualified
      • 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: 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.3
      • 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.4
      • propose: specify rich-text structure by line rules, never semantic parsing
      • Merge pull request #106 from mattpolicastro/fix/drafter-line-rules
      • specloop: scope provenance validation to dispatch and replay decisions (descope tamper-defense after review loop)
      • 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: complete task 1.5
      • 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.6
      • 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.7
      • 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.8
      • Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5
      • tests: give narrowing phase fixtures 3 s, not 0.5 s
      • Merge pull request #107 from mattpolicastro/fix/narrowing-test-timeout
      • Merge current PR base 07a446be6f5c5a7e0ecc2f7fa36956debd8369a0
      • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that
    • Merged PR
      tests: narrowing phase fixtures get 3 s, not 0.5 s (load flake)
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that into openspec/specs
      24 commits
      • specloop: archive mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that into openspec/specs
      • arm: attribute owner-qualified run names to their issue
      • Merge pull request #104 from mattpolicastro/fix/arm-owner-qualified
      • 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
      • specloop: complete task 1.1
      • specloop: checklist and scenario detection by line rules, not Markdown parsing (descope after four review rounds)
      • propose: specify rich-text structure by line rules, never semantic parsing
      • Merge pull request #106 from mattpolicastro/fix/drafter-line-rules
      • 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: complete task 1.2
      • 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.3
      • 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.4
      • 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.5
      • 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.6
      • specloop: strengthen section 1 after its evidence check
      • 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: complete task 1.7
      • 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.8
      • Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5
    • Merged PR
      propose: specify rich-text structure by line rules, never semantic parsing
    • Pushed
      arm: attribute owner-qualified run names to their issue
      2 commits
      • arm: attribute owner-qualified run names to their issue
      • Merge pull request #104 from mattpolicastro/fix/arm-owner-qualified
    • Merged PR
      arm: attribute owner-qualified run names to their issue
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le (specloop propose, round 1)
      12 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le (specloop propose, round 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
      • specloop: complete task 1.1
      • 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.2
      • Merge current PR base fda70c4ef0a1cb9b8ba120b72c835d374fcf7701
      • specloop: add a task adapting the background fixture to #9's job identity (base drift)
      • 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: complete task 2.1
      • Merge current PR base aa8cfb89724328b5f8c95d3d50041e2a3ee8f9b9
      • specloop: archive mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le into openspec/specs
      • Merge pull request #100 from mattpolicastro/spec/mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le
    • Merged PR
      Spec: Proposal JSON: report the real ref, and let the daemon accept it
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le into openspec/specs
      34 commits
      • specloop: archive mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le into openspec/specs
      • Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 2)
      • 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
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • 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.4
      • 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.5
      • 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.6
      • 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.7
      • 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.8
      • codex profiles can name their own login (API credits); seal scans every codex login
      • specloop: archive mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line into openspec/specs
      • Merge pull request #98 from mattpolicastro/spec/mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line
      • Merge branch 'main' into feat/codex-profile-auth
      • Merge pull request #99 from mattpolicastro/feat/codex-profile-auth
      • 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
      • propose: draft from the newest base, resolved in the source
      • 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
      • tests: tolerate EPERM when tearing down an already-reaped process group
      • Merge current PR base fda70c4ef0a1cb9b8ba120b72c835d374fcf7701
      • specloop: add a task adapting the background fixture to #9's job identity (base drift)
      • Merge pull request #101 from mattpolicastro/fix/draft-base
      • 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: complete task 2.1
      • Merge current PR base aa8cfb89724328b5f8c95d3d50041e2a3ee8f9b9
    • Merged PR
      propose: draft from the newest base, resolved in the source checkout
    • Pushed
      tests: tolerate EPERM when tearing down an already-reaped process group
      4 commits
      • tests: tolerate EPERM when tearing down an already-reaped process group
      • 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 #99 from mattpolicastro/feat/codex-profile-auth
    • Merged PR
      codex profiles can name their own login (API credits); seal scans every codex login
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 1)
      21 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 2)
      • 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
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • 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.4
      • 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.5
      • 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.6
      • 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.7
      • 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.8
      • specloop: archive mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line into openspec/specs
      • Merge pull request #98 from mattpolicastro/spec/mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line
      • Merge branch 'main' into feat/codex-profile-auth
    • Merged PR
      Spec: Background jobs: deadlines, a status line, cleanup, and process-group timeouts
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line into openspec/specs
      17 commits
      • specloop: archive mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line into openspec/specs
      • 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
      • specloop: complete task 1.1
      • 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.2
      • 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.3
      • 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.4
      • 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.5
      • 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.6
      • 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.7
      • 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.8
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-34-background-jobs-release-a-stopped-job-s (specloop propose, round 1)
      17 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-34-background-jobs-release-a-stopped-job-s (specloop propose, round 1)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-34-background-jobs-release-a-stopped-job-s (specloop propose, round 2)
      • specloop: task 1.1 Implement validated, atomic release in `nightshift/specloop_job.py` with `release_job()`, its error type, exact-ID resolution, stopped evidence checks, matching-reference removal an
      • specloop: complete task 1.1
      • specloop: task 1.2 Coordinate release with collection and legacy revision initialization in `nightshift/specloop_job.py` and the job-bearing receipt paths of `nightshift/specloop_intake.py`. Add the a
      • specloop: complete task 1.2
      • specloop: task 1.3 Integrate released receipts with ordinary intake and recorded-identity recovery in `nightshift/specloop_intake.py`. Add `test_released_stopped_job_allows_a_new_round` in `tests/test
      • specloop: complete task 1.3
      • specloop: task 1.4 Make build-revision feedback input unique per invocation in `nightshift/specloop_intake.py`, with exclusive UTF-8 JSON creation, an absolute path and close-before-dispatch semantics
      • specloop: complete task 1.4
      • specloop: task 1.5 Expose `nightshift jobs release <id>` in `nightshift/cli.py` with exact output and 0/1/2 exit behavior before configuration and credential loading. Extend CLI tests in `tests/test_s
      • specloop: complete task 1.5
      • specloop: task 1.6 Update the stopped-job recovery passages in `README.md`, `KNOWN-LIMITATIONS.md` and `docs/specloop/README.md` together, replacing the missing-command/manual-edit guidance with relea
      • specloop: complete task 1.6
      • Merge current PR base 9160d40f6cfc38014ddd5eeab0d96b13f869698d
      • specloop: archive mattpolicastro__nightshift-issue-34-background-jobs-release-a-stopped-job-s into openspec/specs
      • Merge pull request #97 from mattpolicastro/spec/mattpolicastro__nightshift-issue-34-background-jobs-release-a-stopped-job-s
    • Merged PR
      Spec: Background jobs: release a stopped job's hold
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-34-background-jobs-release-a-stopped-job-s into openspec/specs
      27 commits
      • specloop: archive mattpolicastro__nightshift-issue-34-background-jobs-release-a-stopped-job-s into openspec/specs
      • Draft OpenSpec change mattpolicastro__nightshift-issue-15-portability-make-host-paths-configurable (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-15-portability-make-host-paths-configurable (specloop propose, round 3)
      • specloop: task 1.1 Add the consumed-setting resolver in `nightshift/host_paths.py` and wire it into `specloop/verify.py:run_extracted()`, `specloop/quota.py:codex_limits()` and only PATH construction
      • specloop: complete task 1.1
      • specloop: task 1.2 Normalize and validate the existing worker-root setting in `nightshift/config.py`, with default/absolute/tilde/relative/invalid/isolation regression cases in new `tests/test_worktre
      • specloop: complete task 1.2
      • specloop: task 1.3 Add `plugins/nightshift/server/host-paths.ts` with the shared resolution contract, and wire both production adapters in `plugins/nightshift/server/attention.ts` and `plugins/nightsh
      • specloop: complete task 1.3
      • specloop: task 1.4 Update only the portability passages named in the design in `KNOWN-LIMITATIONS.md`, `README.md`, `docs/specloop/prepare.md`, `plugins/nightshift/README.md` and `config.example.toml`
      • specloop: complete task 1.4
      • Merge current PR base 1ab6fafb6c9d2f8821d72a4164180521717d78a5
      • tests: keep portability docs checks structural (drop pinned prose so later doc edits don't break them)
      • specloop: archive mattpolicastro__nightshift-issue-15-portability-make-host-paths-configurable into openspec/specs
      • prompts: existing tests predate the change; test docs by structure, not wording
      • Merge pull request #95 from mattpolicastro/spec/mattpolicastro__nightshift-issue-15-portability-make-host-paths-configurable
      • Merge branch 'main' into fix/prompt-test-rules
      • Merge pull request #96 from mattpolicastro/fix/prompt-test-rules
      • specloop: task 1.1 Implement validated, atomic release in `nightshift/specloop_job.py` with `release_job()`, its error type, exact-ID resolution, stopped evidence checks, matching-reference removal an
      • specloop: task 1.2 Coordinate release with collection and legacy revision initialization in `nightshift/specloop_job.py` and the job-bearing receipt paths of `nightshift/specloop_intake.py`. Add the a
      • specloop: task 1.3 Integrate released receipts with ordinary intake and recorded-identity recovery in `nightshift/specloop_intake.py`. Add `test_released_stopped_job_allows_a_new_round` in `tests/test
      • specloop: task 1.4 Make build-revision feedback input unique per invocation in `nightshift/specloop_intake.py`, with exclusive UTF-8 JSON creation, an absolute path and close-before-dispatch semantics
      • specloop: task 1.5 Expose `nightshift jobs release <id>` in `nightshift/cli.py` with exact output and 0/1/2 exit behavior before configuration and credential loading. Extend CLI tests in `tests/test_s
      • specloop: complete task 1.5
      • specloop: task 1.6 Update the stopped-job recovery passages in `README.md`, `KNOWN-LIMITATIONS.md` and `docs/specloop/README.md` together, replacing the missing-command/manual-edit guidance with relea
      • specloop: complete task 1.6
      • Merge current PR base 9160d40f6cfc38014ddd5eeab0d96b13f869698d
    • Merged PR
      prompts: existing tests predate the change; test docs by structure, not wording
    • Pushed
      Draft OpenSpec change mattpolicastro__nightshift-issue-15-portability-make-host-paths-configurable (specloop propose, round 2)
      15 commits
      • Draft OpenSpec change mattpolicastro__nightshift-issue-15-portability-make-host-paths-configurable (specloop propose, round 2)
      • Draft OpenSpec change mattpolicastro__nightshift-issue-15-portability-make-host-paths-configurable (specloop propose, round 3)
      • specloop: task 1.1 Add the consumed-setting resolver in `nightshift/host_paths.py` and wire it into `specloop/verify.py:run_extracted()`, `specloop/quota.py:codex_limits()` and only PATH construction
      • specloop: complete task 1.1
      • specloop: task 1.2 Normalize and validate the existing worker-root setting in `nightshift/config.py`, with default/absolute/tilde/relative/invalid/isolation regression cases in new `tests/test_worktre
      • specloop: complete task 1.2
      • specloop: task 1.3 Add `plugins/nightshift/server/host-paths.ts` with the shared resolution contract, and wire both production adapters in `plugins/nightshift/server/attention.ts` and `plugins/nightsh
      • specloop: complete task 1.3
      • specloop: task 1.4 Update only the portability passages named in the design in `KNOWN-LIMITATIONS.md`, `README.md`, `docs/specloop/prepare.md`, `plugins/nightshift/README.md` and `config.example.toml`
      • specloop: complete task 1.4
      • Merge current PR base 1ab6fafb6c9d2f8821d72a4164180521717d78a5
      • tests: keep portability docs checks structural (drop pinned prose so later doc edits don't break them)
      • specloop: archive mattpolicastro__nightshift-issue-15-portability-make-host-paths-configurable into openspec/specs
      • Merge pull request #95 from mattpolicastro/spec/mattpolicastro__nightshift-issue-15-portability-make-host-paths-configurable
      • Merge branch 'main' into fix/prompt-test-rules
    • Merged PR
      Spec: Portability: make host paths configurable
    • Pushed
      specloop: archive mattpolicastro__nightshift-issue-15-portability-make-host-paths-configurable into openspec/specs
      40 commits
      • specloop: archive mattpolicastro__nightshift-issue-15-portability-make-host-paths-configurable into openspec/specs
      • tests: keep portability docs checks structural (drop pinned prose so later doc edits don't break them)
      • Draft OpenSpec change nightshift-issue-72-providers-fall-back-to-the-next-profile (specloop propose, round 1)
      • specloop: task 1.1 In `specloop/loop.py`, introduce loop-local event-backed task/profile retry accounting, preserve the legacy `ts.infra` display/pause scalar and reset semantics, and add focused rest
      • specloop: complete task 1.1
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.2
      • specloop: authorize task 2.1 to update the interim tests task 1.1 added (they predate the fallback)
      • specloop: task 2.1 Update `specloop/loop.py:_infra`, `_pick` and `_all_exhausted` together to persist 900-second unavailable deadlines, record diagnostic events, send fallback FYIs, and pause only whe
      • specloop: complete task 2.1
      • specloop: task 2.2 Complete cooldown expiry and single-profile manual-resume compatibility in `specloop/loop.py` without modifying state, CLI or supervisor modules. Add new `tests/test_provider_cooldo
      • specloop: complete task 2.2
      • specloop: task 2.3 Add scripted driver-continuation tests in new `tests/test_provider_fallback_continuation.py`, with any necessary bounded fixes confined to `specloop/loop.py`. Exercise implementatio
      • specloop: complete task 2.3
      • specloop: task 3.1 Add unavailable diagnostic classification to `specloop/agents/codex.py` and `specloop/agents/claude.py`, preserving both `USAGE` expressions, their priority, and all invocation/sand
      • Draft OpenSpec change nightshift-issue-93-land-run-specloop-via-its-interpreter-re (specloop propose, round 1)
      • specloop: complete task 3.1
      • specloop: task 1.1 Use the current interpreter for discovery and finish in `nightshift/land.py`, preserving all existing gates, runner options and timeouts. Correct only the prerequisites passage of `
      • specloop: task 4.1 Replace only the existing `**Usage limits**` paragraph in `docs/specloop/README.md` with the behavior specified by this change; preserve concurrent #76 edits everywhere else. Add na
      • specloop: task 1.2 In `nightshift/land.py`, classify completed nonzero update-branch results using the design's refusal precedence and narrow parser-error/silent-response rules; preserve transport-los
      • specloop: complete task 4.1
      • Merge current PR base 182a48d0ae6cbb1d355d1dc66e67a6d53e8529aa
      • specloop: append acceptance fixes tasks
      • specloop: task 5.1 Make the harness's verification pass on the branch head: (details: tests: expected exit 0, got 2 (FAIL, 195.33s))
      • specloop: complete task 5.1
      • specloop: archive nightshift-issue-93-land-run-specloop-via-its-interpreter-re into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-93-land-run-specloop-via-its-interpreter-re
      • Merge current PR base 280d18e44905de121d146f2e9d1d6774d769b95e
      • Merge pull request #94 from mattpolicastro/spec/nightshift-issue-93-land-run-specloop-via-its-interpreter-re
      • specloop: archive nightshift-issue-72-providers-fall-back-to-the-next-profile into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-72-providers-fall-back-to-the-next-profile
      • Merge pull request #86 from mattpolicastro/spec/nightshift-issue-72-providers-fall-back-to-the-next-profile
      • specloop: task 1.1 Add the consumed-setting resolver in `nightshift/host_paths.py` and wire it into `specloop/verify.py:run_extracted()`, `specloop/quota.py:codex_limits()` and only PATH construction
      • specloop: task 1.2 Normalize and validate the existing worker-root setting in `nightshift/config.py`, with default/absolute/tilde/relative/invalid/isolation regression cases in new `tests/test_worktre
      • specloop: task 1.3 Add `plugins/nightshift/server/host-paths.ts` with the shared resolution contract, and wire both production adapters in `plugins/nightshift/server/attention.ts` and `plugins/nightsh
      • specloop: complete task 1.3
      • specloop: task 1.4 Update only the portability passages named in the design in `KNOWN-LIMITATIONS.md`, `README.md`, `docs/specloop/prepare.md`, `plugins/nightshift/README.md` and `config.example.toml`
      • specloop: complete task 1.4
      • Merge current PR base 1ab6fafb6c9d2f8821d72a4164180521717d78a5
    • Merged PR
      Spec: Providers: fall back to the next profile when one is unavailable
    • Pushed
      Draft OpenSpec change nightshift-issue-93-land-run-specloop-via-its-interpreter-re (specloop propose, round 1)
      10 commits
      • Draft OpenSpec change nightshift-issue-93-land-run-specloop-via-its-interpreter-re (specloop propose, round 1)
      • specloop: task 1.1 Use the current interpreter for discovery and finish in `nightshift/land.py`, preserving all existing gates, runner options and timeouts. Correct only the prerequisites passage of `
      • specloop: complete task 1.1
      • specloop: task 1.2 In `nightshift/land.py`, classify completed nonzero update-branch results using the design's refusal precedence and narrow parser-error/silent-response rules; preserve transport-los
      • specloop: complete task 1.2
      • specloop: archive nightshift-issue-93-land-run-specloop-via-its-interpreter-re into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-93-land-run-specloop-via-its-interpreter-re
      • Merge pull request #94 from mattpolicastro/spec/nightshift-issue-93-land-run-specloop-via-its-interpreter-re
      • Merge branch 'main' into spec/nightshift-issue-72-providers-fall-back-to-the-next-profile
      • specloop: archive nightshift-issue-72-providers-fall-back-to-the-next-profile into openspec/specs
    • Merged PR
      Spec: land: run specloop via its interpreter; reconcile branch updates with unparseable responses
    • Pushed
      Draft OpenSpec change nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f (specloop propose, round 1)
      140 commits
      • Draft OpenSpec change nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 2)
      • Draft OpenSpec change nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel (specloop propose, round 1)
      • specloop: task 1.1 Create the section parser, finding representation, and pure wording lint in `nightshift/arm.py`; create fixture-driven `tests/test_arm.py` with `test_arm_flags_missing_sections`, `t
      • specloop: complete task 1.1
      • specloop: task 1.2 Add the bounded injectable GitHub issue reader, issue cache, and direct blocker completion lint to `nightshift/arm.py`, importing `queue.blockers` without editing its owner; add sta
      • specloop: complete task 1.2
      • specloop: task 1.1 Add the parser, injectable subprocess runner and clock boundary, config loading, PR identity resolution and enrollment validation in new `nightshift/land.py`; create the scripted-ru
      • specloop: task 1.2 Add version-1 status discovery and pre-mutation run eligibility validation, with tests for no match, duplicate matches, malformed status and error rows. Add `test_daemon_and_supervi
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.3
      • specloop: task 2.1 Add paginated armed-issue collection, Scope extraction via `propose.paths`, in-flight collection via `propose.in_flight`, front-door run identity, and self exclusion to `nightshift/
      • specloop: complete task 2.1
      • specloop: task 2.2 Add the `critic.open_pr_files` adapter and paginated PR metadata join in `nightshift/arm.py`; extend `tests/test_arm.py` to exercise all three context sources, renames, pagination,
      • specloop: complete task 2.2
      • specloop: task 2.3 Add cached cycle-safe dependency reachability, combined overlap findings, and pre-write batch candidate comparison in `nightshift/arm.py`; extend `tests/test_arm.py` with `test_arm_
      • specloop: complete task 2.3
      • specloop: count task-list lines by a line rule, not Markdown parsing (descope after four review rounds of Markdown edge cases)
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.1 Add paginated trusted publication-comment selection and task-list detection for the body and selected comment by the design's line rule (task-list lines count anywhere, including in
      • specloop: task 2.4 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.4
      • specloop: task 2.2 Add authenticated actor lookup and in-place checkbox edits for `--checks-done`, with tests for one write per changed source, unchanged complete sources, and partial-write recovery.
      • specloop: task 3.1 Add argument parsing, checkout/repository resolution, deterministic reporting, main/module entry point, and basic mode-controlled label application in `nightshift/arm.py`; add `test
      • specloop: complete task 3.1
      • specloop: task 2.3 Add stable head-specific attestation creation/PATCH and paginated reconciliation before creates and after lost responses; ensure the production runner does not blindly retry POST. A
      • specloop: task 3.2 Complete existing-label handling, uncertain-write reconciliation, target failure isolation, and aggregate batch outcomes in `nightshift/arm.py`; add corresponding main-boundary test
      • Draft OpenSpec change nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti (specloop propose, round 1)
      • specloop: complete task 3.2
      • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-73-evidence-gates-route-mutants-to-their-ow (specloop propose, round 1)
      • specloop: task 1.1 Create `nightshift/deploy.py` with module entry point, flags/defaults, injectable runner/context, checkout discovery/fetch/refusal and conditional fast-forward, plus frozen environm
      • specloop: task 3.3 Create `docs/arming.md` with the issue template, named-test examples, discouraged wording replacements, dependency/overlap guidance, module invocation, mode and exit matrix, prerequ
      • specloop: task 3.1 Wire refreshed run eligibility, plain finish invocation, post-finish head validation and done-run continuation behind the human-check gate. Add `test_land_finishes_only_at_human_che
      • specloop: complete task 3.3
      • Merge current PR base cde086dc7c74e6449e3430924e5013f97ce26220
      • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 2)
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 1.1 Extend only the `tasks.md` rules in `specloop/propose.py: PROMPT` with same-file/same-concern grouping, one or two docs-only tasks in one section, the normal six-task target, depend
      • specloop: task 3.2 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: append review round 1
      • specloop: task 2.1 Add committed manifest comparison, safe staging, the empty marker before renames, simple directory swap, and three-copy retention in `nightshift/deploy.py`. Add `test_check_reports_
      • specloop: task 1.2 Extend only checklist items 1 and 7 in `specloop/critic.py: PROMPT` with strictly-more-than-eight / docs-only-more-than-two advisory merge findings and blast-radius-scaled retry rem
      • specloop: task 4.1 Add expected-head CI polling, JSON/exit-status classification and the injected shared deadline. Add `test_land_refuses_failing_ci` and pending-to-green, empty/all-skipped, cancellat
      • specloop: complete task 4.1
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 3.1 Add presence-only pending reporting and reload handling in `nightshift/deploy.py`: default/override/empty command, reload whenever marked, remove only after success, and concrete sh
      • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 4.2
      • specloop: task 1.1 Add mutation-only `Step` parsing and `Manifest.mutation_step` in `specloop/manifest.py`, resolve fallback mutation IDs against both step namespaces, validate collisions, and supply
      • specloop: task 1.2 Add frozen `MutationRoute`, default-empty `Manifest.mutation_routes`, and ordered route parsing/validation in `specloop/manifest.py:_gates`. Require a nonempty fallback when routes
      • specloop: archive nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti into openspec/specs
      • specloop: task 5.1 Add the REST update helper with `expected_head_sha`, an immediate pre-update main read, asynchronous head observation and exact ordered two-parent validation. Add tests for REST arg
      • specloop: complete task 5.1
      • Merge pull request #85 from mattpolicastro/spec/nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti
      • specloop: task 5.2 Wire initial base-ancestry checking and the three-round controller, retaining the pre-update baseline during update observation and the same deadline across rounds. Add `test_land_u
      • specloop: complete task 5.2
      • specloop: task 4.1 Add process-age probes and a shared bounded restart helper in `nightshift/deploy.py`, using existing heartbeat/status shapes, local job inventory, fresh activity guards, labels, for
      • specloop: task 6.1 Add source/head/run revalidation before finish and before the final main read, refusing concurrent changes and newly added checks; add scripted tests that inject each change at both
      • specloop: complete task 6.1
      • specloop: task 2.1 Add a pure route/step resolver in `specloop/evidence.py`, using case-sensitive fnmatch on relative POSIX paths, first-match precedence, route step order and legacy fallback declarat
      • specloop: task 6.2 Wire the guarded merge commit command, merged-state confirmation and useful success/refusal output. Add stable-base success, competing push, protection rejection, queued-but-open re
      • specloop: complete task 6.2
      • Draft OpenSpec change nightshift-issue-13-config-resilience-a-bad-specloop-manifes (specloop propose, round 1)
      • specloop: task 2.2 Integrate resolved routes into `specloop/evidence.py:mutate`: group by ordered step IDs, run used full baselines serially before workers, reuse identical sequences, assign each muta
      • Draft OpenSpec change nightshift-issue-13-config-resilience-a-bad-specloop-manifes (specloop propose, round 2)
      • specloop: task 2.3 Isolate immutable per-sequence prepare/step budget derivation in `specloop/evidence.py`, retaining original full-baseline ceilings and the existing floor/factor/cap/fallback formula
      • Draft OpenSpec change nightshift-issue-13-config-resilience-a-bad-specloop-manifes (specloop propose, round 3)
      • specloop: task 7.1 Write new `docs/landing.md` with command examples, flags, prerequisites, check sources, attestation marker semantics, single-invocation guidance, three-round/shared-timeout behavior
      • specloop: task 5.1 Wire all helpers into complete check/apply orchestration in `nightshift/deploy.py`, reporting independent check failures, refreshing each step, using post-pull HEAD, stopping later
      • specloop: complete task 7.1
      • Merge current PR base 42115e4016d85112f0b9b4ff507c9cce55081724
      • specloop: task 3.1 Implement narrowed execution and full confirmation in `specloop/evidence.py:_mutate_one`, using copied manifests, the same mutated source, fresh confirmation preparation/builds and
      • specloop: archive nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel into openspec/specs
      • specloop: task 1.1 Add the simple reader and `collect_report` aggregation in new `nightshift/timings.py`, plus temporary-log fixtures and `test_phase_durations_from_event_pairs`, `test_per_change_buil
      • specloop: task 3.2 Add coordinator-owned `mutation-runs.json` receipts in `specloop/evidence.py` following the design's schema, preserving existing evidence and step receipt formats. Retain initial an
      • Merge pull request #83 from mattpolicastro/spec/nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel
      • specloop: task 6.1 Create only `docs/deploy.md` for invocation/no-sync/bootstrap, flags/defaults, exit codes, quiet-window responsibility, specloop-only background-job guard, marker and empty-reload s
      • specloop: task 3.3 Complete route/phase lifecycle coverage in `tests/test_mutation_narrowing.py` and `tests/test_mutation_routes.py`, making only necessary execution-helper fixes in `specloop/evidence
      • Draft OpenSpec change nightshift-issue-89-land-treat-no-checks-reported-yet-after (specloop propose, round 2)
      • Merge current PR base eaa7e808503b51c407549bacded2e9a3ad806df7
      • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: archive nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me into openspec/specs
      • specloop: task 4.1 Add stdlib-only `examples/specloop/select_tests.py` with the function/CLI interface, AST import matching, package/relative-import handling, deterministic output and empty-output fal
      • specloop: task 1.1 In `specloop/loop.py`, introduce loop-local event-backed task/profile retry accounting, preserve the legacy `ts.infra` display/pause scalar and reset semantics, and add focused rest
      • Merge pull request #82 from mattpolicastro/spec/nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me
      • specloop: task 4.2 Update `examples/specloop/self-hosting.toml` with its Python route and mutation-only selector command, preserving existing verification, negative-control and coverage commands. Add
      • specloop: task 2.1 Extend `nightshift/timings.py` with whole-run filters, `render_table`, `main` and the module guard, using one report dictionary for the single text table and JSON. Add `test_since_a
      • specloop: task 4.3 Update only Section evidence in `docs/specloop/README.md` with route/placeholder syntax, mutation-only commands, per-sequence baselines, confirmation and timeout semantics, receipt
      • specloop: complete task 4.3
      • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b
      • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: archive nightshift-issue-73-evidence-gates-route-mutants-to-their-ow into openspec/specs
      • specloop: task 1.1 Implement manifest readiness and repository health in `nightshift/config.py`, `nightshift/specloop_intake.py` and `nightshift/daemon.py`: defer artifact failures, preserve shape/pat
      • tests: run #73's fixture steps unwrapped outside specloop's sandbox
      • specloop: task 1.1 Update `nightshift/land.py` with the exact registration-response predicate, pending classification, local wait-state tracking, and specific deadline refusal; preserve bracketing hea
      • specloop: task 3.1 Insert only the short build-timing subsection beside the touchpoint paragraph in `README.md`, preserving existing content and concurrent arming guidance; budget about 20 lines. Hono
      • specloop: task 4.1 Address review feedback 1: "**mattpolicastro:**\n\nSmoke test of `python -m nightshift.arm --check` against the real armed queue. It found genuine overlaps (#34 with #47 and #52, #9
      • tests: leave access time out of deploy's no-write snapshots
      • specloop: task 1.2 Wire readiness at new drafting/admission boundaries in `nightshift/specloop_intake.py` and `nightshift/daemon.py`, including spec-stage revision; preserve admitted-run publication/b
      • Merge pull request #91 from mattpolicastro/fix/deploy-test-atime
      • Merge branch 'main' into spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow
      • Merge current PR base 27672f3f6d35b8f479acb431cc03c54f3820ef92
      • Merge pull request #87 from mattpolicastro/spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow
      • Merge current PR base 28719715027df11f6ac700eb23c81fbd95d2898b
      • specloop: authorize task 2.1 to update the interim tests task 1.1 added (they predate the fallback)
      • specloop: task 1.3 Add specloop-enrollment worker reconciliation in `nightshift/daemon.py` using existing queue read/label interfaces and an atomic recovery journal before remote mutations. Release or
      • propose: hands-off clauses in other runs' tasks are not planned edits
      • specloop: archive nightshift-issue-74-build-timing-report-where-build-time-goe into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-74-build-timing-report-where-build-time-goe
      • specloop: task 1.4 Finish poll/restart recovery of switch journals in `nightshift/daemon.py`, retaining them after working disappears, reconciling remote labels/marked comments and completing outcomes
      • specloop: complete task 1.4
      • specloop: task 2.1 Update `specloop/loop.py:_infra`, `_pick` and `_all_exhausted` together to persist 900-second unavailable deadlines, record diagnostic events, send fallback FYIs, and pause only whe
      • Merge pull request #84 from mattpolicastro/spec/nightshift-issue-74-build-timing-report-where-build-time-goe
      • specloop: archive nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f
      • specloop: task 2.2 Complete cooldown expiry and single-profile manual-resume compatibility in `specloop/loop.py` without modifying state, CLI or supervisor modules. Add new `tests/test_provider_cooldo
      • Merge pull request #81 from mattpolicastro/spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f
      • Merge branch 'main' into fix/in-flight-hands-off
      • specloop: task 2.1 Extend only the missing-proposal identity fallback in `nightshift/touchpoints.py::collect_history` to accept exact owner-qualified and legacy prefixes derived from the validated rec
      • specloop: task 2.3 Add scripted driver-continuation tests in new `tests/test_provider_fallback_continuation.py`, with any necessary bounded fixes confined to `specloop/loop.py`. Exercise implementatio
      • Merge pull request #92 from mattpolicastro/fix/in-flight-hands-off
      • specloop: archive nightshift-issue-89-land-treat-no-checks-reported-yet-after into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-89-land-treat-no-checks-reported-yet-after
      • Merge pull request #90 from mattpolicastro/spec/nightshift-issue-89-land-treat-no-checks-reported-yet-after
      • specloop: task 2.2 Centralize owner-qualified generation and the unchanged branch predicate in `nightshift/specloop_intake.py`; integrate unsupported-name failures into readiness for new work. Add `te
      • specloop: task 2.3 Preserve active recorded identities and add exact qualified/legacy PR lookup in `nightshift/specloop_intake.py`. Cover title edits, lost receipts, lookup failures, closed/merged PR
      • specloop: task 3.1 Add unavailable diagnostic classification to `specloop/agents/codex.py` and `specloop/agents/claude.py`, preserving both `USAGE` expressions, their priority, and all invocation/sand
      • specloop: task 2.4 Update only the affected enrollment/recovery/naming/limitations passages in `README.md`, `docs/specloop/README.md` and `KNOWN-LIMITATIONS.md` on top of #67. Explain all three behavi
      • specloop: task 4.1 Replace only the existing `**Usage limits**` paragraph in `docs/specloop/README.md` with the behavior specified by this change; preserve concurrent #76 edits everywhere else. Add na
      • Merge current PR base 182a48d0ae6cbb1d355d1dc66e67a6d53e8529aa
      • specloop: append acceptance fixes tasks
      • specloop: archive nightshift-issue-13-config-resilience-a-bad-specloop-manifes into openspec/specs
      • specloop: task 5.1 Make the harness's verification pass on the branch head: (details: tests: expected exit 0, got 2 (FAIL, 195.33s))
      • Merge pull request #88 from mattpolicastro/spec/nightshift-issue-13-config-resilience-a-bad-specloop-manifes
      • Merge current PR base 280d18e44905de121d146f2e9d1d6774d769b95e
      • Merge branch 'main' into spec/nightshift-issue-93-land-run-specloop-via-its-interpreter-re
      • specloop: archive nightshift-issue-93-land-run-specloop-via-its-interpreter-re into openspec/specs
    • Merged PR
      Spec: Config resilience: a bad specloop manifest must not stop worker repositories
    • Pushed
      specloop: task 1.1 Use the current interpreter for discovery and finish in `nightshift/land.py`, preserving all existing gates, runner options and timeouts. Correct only the prerequisites passage of `
      121 commits
      • specloop: task 1.1 Use the current interpreter for discovery and finish in `nightshift/land.py`, preserving all existing gates, runner options and timeouts. Correct only the prerequisites passage of `
      • specloop: complete task 1.1
      • specloop: task 1.2 In `nightshift/land.py`, classify completed nonzero update-branch results using the design's refusal precedence and narrow parser-error/silent-response rules; preserve transport-los
      • specloop: complete task 1.2
      • specloop: archive nightshift-issue-13-config-resilience-a-bad-specloop-manifes into openspec/specs
      • Draft OpenSpec change nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 2)
      • Draft OpenSpec change nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel (specloop propose, round 1)
      • specloop: task 1.1 Create the section parser, finding representation, and pure wording lint in `nightshift/arm.py`; create fixture-driven `tests/test_arm.py` with `test_arm_flags_missing_sections`, `t
      • specloop: task 1.2 Add the bounded injectable GitHub issue reader, issue cache, and direct blocker completion lint to `nightshift/arm.py`, importing `queue.blockers` without editing its owner; add sta
      • specloop: task 1.1 Add the parser, injectable subprocess runner and clock boundary, config loading, PR identity resolution and enrollment validation in new `nightshift/land.py`; create the scripted-ru
      • specloop: task 1.2 Add version-1 status discovery and pre-mutation run eligibility validation, with tests for no match, duplicate matches, malformed status and error rows. Add `test_daemon_and_supervi
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.3
      • specloop: task 2.1 Add paginated armed-issue collection, Scope extraction via `propose.paths`, in-flight collection via `propose.in_flight`, front-door run identity, and self exclusion to `nightshift/
      • specloop: complete task 2.1
      • specloop: task 2.2 Add the `critic.open_pr_files` adapter and paginated PR metadata join in `nightshift/arm.py`; extend `tests/test_arm.py` to exercise all three context sources, renames, pagination,
      • specloop: complete task 2.2
      • specloop: task 2.3 Add cached cycle-safe dependency reachability, combined overlap findings, and pre-write batch candidate comparison in `nightshift/arm.py`; extend `tests/test_arm.py` with `test_arm_
      • specloop: complete task 2.3
      • specloop: count task-list lines by a line rule, not Markdown parsing (descope after four review rounds of Markdown edge cases)
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.1 Add paginated trusted publication-comment selection and task-list detection for the body and selected comment by the design's line rule (task-list lines count anywhere, including in
      • specloop: task 2.4 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.4
      • specloop: task 2.2 Add authenticated actor lookup and in-place checkbox edits for `--checks-done`, with tests for one write per changed source, unchanged complete sources, and partial-write recovery.
      • specloop: task 3.1 Add argument parsing, checkout/repository resolution, deterministic reporting, main/module entry point, and basic mode-controlled label application in `nightshift/arm.py`; add `test
      • specloop: complete task 3.1
      • specloop: task 2.3 Add stable head-specific attestation creation/PATCH and paginated reconciliation before creates and after lost responses; ensure the production runner does not blindly retry POST. A
      • specloop: task 3.2 Complete existing-label handling, uncertain-write reconciliation, target failure isolation, and aggregate batch outcomes in `nightshift/arm.py`; add corresponding main-boundary test
      • specloop: complete task 3.2
      • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-73-evidence-gates-route-mutants-to-their-ow (specloop propose, round 1)
      • specloop: task 1.1 Create `nightshift/deploy.py` with module entry point, flags/defaults, injectable runner/context, checkout discovery/fetch/refusal and conditional fast-forward, plus frozen environm
      • specloop: task 3.3 Create `docs/arming.md` with the issue template, named-test examples, discouraged wording replacements, dependency/overlap guidance, module invocation, mode and exit matrix, prerequ
      • specloop: task 3.1 Wire refreshed run eligibility, plain finish invocation, post-finish head validation and done-run continuation behind the human-check gate. Add `test_land_finishes_only_at_human_che
      • specloop: complete task 3.3
      • Merge current PR base cde086dc7c74e6449e3430924e5013f97ce26220
      • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 2)
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 3.2 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: append review round 1
      • specloop: task 2.1 Add committed manifest comparison, safe staging, the empty marker before renames, simple directory swap, and three-copy retention in `nightshift/deploy.py`. Add `test_check_reports_
      • specloop: task 4.1 Add expected-head CI polling, JSON/exit-status classification and the injected shared deadline. Add `test_land_refuses_failing_ci` and pending-to-green, empty/all-skipped, cancellat
      • specloop: complete task 4.1
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 3.1 Add presence-only pending reporting and reload handling in `nightshift/deploy.py`: default/override/empty command, reload whenever marked, remove only after success, and concrete sh
      • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 4.2
      • specloop: task 1.1 Add mutation-only `Step` parsing and `Manifest.mutation_step` in `specloop/manifest.py`, resolve fallback mutation IDs against both step namespaces, validate collisions, and supply
      • specloop: task 1.2 Add frozen `MutationRoute`, default-empty `Manifest.mutation_routes`, and ordered route parsing/validation in `specloop/manifest.py:_gates`. Require a nonempty fallback when routes
      • specloop: task 5.1 Add the REST update helper with `expected_head_sha`, an immediate pre-update main read, asynchronous head observation and exact ordered two-parent validation. Add tests for REST arg
      • specloop: complete task 5.1
      • specloop: task 5.2 Wire initial base-ancestry checking and the three-round controller, retaining the pre-update baseline during update observation and the same deadline across rounds. Add `test_land_u
      • specloop: complete task 5.2
      • specloop: task 4.1 Add process-age probes and a shared bounded restart helper in `nightshift/deploy.py`, using existing heartbeat/status shapes, local job inventory, fresh activity guards, labels, for
      • specloop: task 6.1 Add source/head/run revalidation before finish and before the final main read, refusing concurrent changes and newly added checks; add scripted tests that inject each change at both
      • specloop: complete task 6.1
      • specloop: task 2.1 Add a pure route/step resolver in `specloop/evidence.py`, using case-sensitive fnmatch on relative POSIX paths, first-match precedence, route step order and legacy fallback declarat
      • specloop: task 6.2 Wire the guarded merge commit command, merged-state confirmation and useful success/refusal output. Add stable-base success, competing push, protection rejection, queued-but-open re
      • specloop: complete task 6.2
      • specloop: task 2.2 Integrate resolved routes into `specloop/evidence.py:mutate`: group by ordered step IDs, run used full baselines serially before workers, reuse identical sequences, assign each muta
      • specloop: task 2.3 Isolate immutable per-sequence prepare/step budget derivation in `specloop/evidence.py`, retaining original full-baseline ceilings and the existing floor/factor/cap/fallback formula
      • specloop: task 7.1 Write new `docs/landing.md` with command examples, flags, prerequisites, check sources, attestation marker semantics, single-invocation guidance, three-round/shared-timeout behavior
      • specloop: task 5.1 Wire all helpers into complete check/apply orchestration in `nightshift/deploy.py`, reporting independent check failures, refreshing each step, using post-pull HEAD, stopping later
      • specloop: complete task 7.1
      • Merge current PR base 42115e4016d85112f0b9b4ff507c9cce55081724
      • specloop: task 3.1 Implement narrowed execution and full confirmation in `specloop/evidence.py:_mutate_one`, using copied manifests, the same mutated source, fresh confirmation preparation/builds and
      • specloop: archive nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel into openspec/specs
      • specloop: task 1.1 Add the simple reader and `collect_report` aggregation in new `nightshift/timings.py`, plus temporary-log fixtures and `test_phase_durations_from_event_pairs`, `test_per_change_buil
      • specloop: task 3.2 Add coordinator-owned `mutation-runs.json` receipts in `specloop/evidence.py` following the design's schema, preserving existing evidence and step receipt formats. Retain initial an
      • Merge pull request #83 from mattpolicastro/spec/nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel
      • specloop: task 6.1 Create only `docs/deploy.md` for invocation/no-sync/bootstrap, flags/defaults, exit codes, quiet-window responsibility, specloop-only background-job guard, marker and empty-reload s
      • specloop: task 3.3 Complete route/phase lifecycle coverage in `tests/test_mutation_narrowing.py` and `tests/test_mutation_routes.py`, making only necessary execution-helper fixes in `specloop/evidence
      • Draft OpenSpec change nightshift-issue-89-land-treat-no-checks-reported-yet-after (specloop propose, round 2)
      • Merge current PR base eaa7e808503b51c407549bacded2e9a3ad806df7
      • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: archive nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me into openspec/specs
      • specloop: task 4.1 Add stdlib-only `examples/specloop/select_tests.py` with the function/CLI interface, AST import matching, package/relative-import handling, deterministic output and empty-output fal
      • Merge pull request #82 from mattpolicastro/spec/nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me
      • specloop: task 4.2 Update `examples/specloop/self-hosting.toml` with its Python route and mutation-only selector command, preserving existing verification, negative-control and coverage commands. Add
      • specloop: task 2.1 Extend `nightshift/timings.py` with whole-run filters, `render_table`, `main` and the module guard, using one report dictionary for the single text table and JSON. Add `test_since_a
      • specloop: task 4.3 Update only Section evidence in `docs/specloop/README.md` with route/placeholder syntax, mutation-only commands, per-sequence baselines, confirmation and timeout semantics, receipt
      • specloop: complete task 4.3
      • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b
      • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: archive nightshift-issue-73-evidence-gates-route-mutants-to-their-ow into openspec/specs
      • specloop: task 1.1 Implement manifest readiness and repository health in `nightshift/config.py`, `nightshift/specloop_intake.py` and `nightshift/daemon.py`: defer artifact failures, preserve shape/pat
      • tests: run #73's fixture steps unwrapped outside specloop's sandbox
      • specloop: task 1.1 Update `nightshift/land.py` with the exact registration-response predicate, pending classification, local wait-state tracking, and specific deadline refusal; preserve bracketing hea
      • specloop: task 3.1 Insert only the short build-timing subsection beside the touchpoint paragraph in `README.md`, preserving existing content and concurrent arming guidance; budget about 20 lines. Hono
      • specloop: task 4.1 Address review feedback 1: "**mattpolicastro:**\n\nSmoke test of `python -m nightshift.arm --check` against the real armed queue. It found genuine overlaps (#34 with #47 and #52, #9
      • tests: leave access time out of deploy's no-write snapshots
      • specloop: task 1.2 Wire readiness at new drafting/admission boundaries in `nightshift/specloop_intake.py` and `nightshift/daemon.py`, including spec-stage revision; preserve admitted-run publication/b
      • Merge pull request #91 from mattpolicastro/fix/deploy-test-atime
      • Merge branch 'main' into spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow
      • Merge current PR base 27672f3f6d35b8f479acb431cc03c54f3820ef92
      • Merge pull request #87 from mattpolicastro/spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow
      • Merge current PR base 28719715027df11f6ac700eb23c81fbd95d2898b
      • specloop: task 1.3 Add specloop-enrollment worker reconciliation in `nightshift/daemon.py` using existing queue read/label interfaces and an atomic recovery journal before remote mutations. Release or
      • propose: hands-off clauses in other runs' tasks are not planned edits
      • specloop: archive nightshift-issue-74-build-timing-report-where-build-time-goe into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-74-build-timing-report-where-build-time-goe
      • specloop: task 1.4 Finish poll/restart recovery of switch journals in `nightshift/daemon.py`, retaining them after working disappears, reconciling remote labels/marked comments and completing outcomes
      • specloop: complete task 1.4
      • Merge pull request #84 from mattpolicastro/spec/nightshift-issue-74-build-timing-report-where-build-time-goe
      • specloop: archive nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f
      • Merge pull request #81 from mattpolicastro/spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f
      • Merge branch 'main' into fix/in-flight-hands-off
      • specloop: task 2.1 Extend only the missing-proposal identity fallback in `nightshift/touchpoints.py::collect_history` to accept exact owner-qualified and legacy prefixes derived from the validated rec
      • Merge pull request #92 from mattpolicastro/fix/in-flight-hands-off
      • specloop: archive nightshift-issue-89-land-treat-no-checks-reported-yet-after into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-89-land-treat-no-checks-reported-yet-after
      • Merge pull request #90 from mattpolicastro/spec/nightshift-issue-89-land-treat-no-checks-reported-yet-after
      • specloop: task 2.2 Centralize owner-qualified generation and the unchanged branch predicate in `nightshift/specloop_intake.py`; integrate unsupported-name failures into readiness for new work. Add `te
      • specloop: task 2.3 Preserve active recorded identities and add exact qualified/legacy PR lookup in `nightshift/specloop_intake.py`. Cover title edits, lost receipts, lookup failures, closed/merged PR
      • specloop: task 2.4 Update only the affected enrollment/recovery/naming/limitations passages in `README.md`, `docs/specloop/README.md` and `KNOWN-LIMITATIONS.md` on top of #67. Explain all three behavi
      • Merge current PR base 182a48d0ae6cbb1d355d1dc66e67a6d53e8529aa
    • Merged PR
      Spec: land: treat 'no checks reported yet' after a push as pending
    • Pushed
      Draft OpenSpec change nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f (specloop propose, round 1)
      48 commits
      • Draft OpenSpec change nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f (specloop propose, round 1)
      • specloop: task 1.1 Create the section parser, finding representation, and pure wording lint in `nightshift/arm.py`; create fixture-driven `tests/test_arm.py` with `test_arm_flags_missing_sections`, `t
      • specloop: complete task 1.1
      • specloop: task 1.2 Add the bounded injectable GitHub issue reader, issue cache, and direct blocker completion lint to `nightshift/arm.py`, importing `queue.blockers` without editing its owner; add sta
      • specloop: complete task 1.2
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.3
      • specloop: task 2.1 Add paginated armed-issue collection, Scope extraction via `propose.paths`, in-flight collection via `propose.in_flight`, front-door run identity, and self exclusion to `nightshift/
      • specloop: complete task 2.1
      • specloop: task 2.2 Add the `critic.open_pr_files` adapter and paginated PR metadata join in `nightshift/arm.py`; extend `tests/test_arm.py` to exercise all three context sources, renames, pagination,
      • specloop: complete task 2.2
      • specloop: task 2.3 Add cached cycle-safe dependency reachability, combined overlap findings, and pre-write batch candidate comparison in `nightshift/arm.py`; extend `tests/test_arm.py` with `test_arm_
      • specloop: complete task 2.3
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.4 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.4
      • specloop: task 3.1 Add argument parsing, checkout/repository resolution, deterministic reporting, main/module entry point, and basic mode-controlled label application in `nightshift/arm.py`; add `test
      • specloop: complete task 3.1
      • specloop: task 3.2 Complete existing-label handling, uncertain-write reconciliation, target failure isolation, and aggregate batch outcomes in `nightshift/arm.py`; add corresponding main-boundary test
      • specloop: complete task 3.2
      • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 1)
      • specloop: task 3.3 Create `docs/arming.md` with the issue template, named-test examples, discouraged wording replacements, dependency/overlap guidance, module invocation, mode and exit matrix, prerequ
      • specloop: complete task 3.3
      • Merge current PR base cde086dc7c74e6449e3430924e5013f97ce26220
      • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 2)
      • specloop: append review round 1
      • specloop: task 1.1 Add the simple reader and `collect_report` aggregation in new `nightshift/timings.py`, plus temporary-log fixtures and `test_phase_durations_from_event_pairs`, `test_per_change_buil
      • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 2.1 Extend `nightshift/timings.py` with whole-run filters, `render_table`, `main` and the module guard, using one report dictionary for the single text table and JSON. Add `test_since_a
      • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 3.1 Insert only the short build-timing subsection beside the touchpoint paragraph in `README.md`, preserving existing content and concurrent arming guidance; budget about 20 lines. Hono
      • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b
      • specloop: task 4.1 Address review feedback 1: "**mattpolicastro:**\n\nSmoke test of `python -m nightshift.arm --check` against the real armed queue. It found genuine overlaps (#34 with #47 and #52, #9
      • specloop: complete task 4.1
      • Merge current PR base 27672f3f6d35b8f479acb431cc03c54f3820ef92
      • Merge current PR base 28719715027df11f6ac700eb23c81fbd95d2898b
      • propose: hands-off clauses in other runs' tasks are not planned edits
      • specloop: archive nightshift-issue-74-build-timing-report-where-build-time-goe into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-74-build-timing-report-where-build-time-goe
      • Merge pull request #84 from mattpolicastro/spec/nightshift-issue-74-build-timing-report-where-build-time-goe
      • specloop: archive nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f
      • Merge pull request #81 from mattpolicastro/spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f
      • Merge branch 'main' into fix/in-flight-hands-off
      • Merge pull request #92 from mattpolicastro/fix/in-flight-hands-off
      • Merge branch 'main' into spec/nightshift-issue-89-land-treat-no-checks-reported-yet-after
      • specloop: archive nightshift-issue-89-land-treat-no-checks-reported-yet-after into openspec/specs
    • Merged PR
      propose: in-flight map ignores other runs' hands-off clauses
    • Pushed
      Draft OpenSpec change nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f (specloop propose, round 1)
      44 commits
      • Draft OpenSpec change nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f (specloop propose, round 1)
      • specloop: task 1.1 Create the section parser, finding representation, and pure wording lint in `nightshift/arm.py`; create fixture-driven `tests/test_arm.py` with `test_arm_flags_missing_sections`, `t
      • specloop: complete task 1.1
      • specloop: task 1.2 Add the bounded injectable GitHub issue reader, issue cache, and direct blocker completion lint to `nightshift/arm.py`, importing `queue.blockers` without editing its owner; add sta
      • specloop: complete task 1.2
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.3
      • specloop: task 2.1 Add paginated armed-issue collection, Scope extraction via `propose.paths`, in-flight collection via `propose.in_flight`, front-door run identity, and self exclusion to `nightshift/
      • specloop: complete task 2.1
      • specloop: task 2.2 Add the `critic.open_pr_files` adapter and paginated PR metadata join in `nightshift/arm.py`; extend `tests/test_arm.py` to exercise all three context sources, renames, pagination,
      • specloop: complete task 2.2
      • specloop: task 2.3 Add cached cycle-safe dependency reachability, combined overlap findings, and pre-write batch candidate comparison in `nightshift/arm.py`; extend `tests/test_arm.py` with `test_arm_
      • specloop: complete task 2.3
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.4 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.4
      • specloop: task 3.1 Add argument parsing, checkout/repository resolution, deterministic reporting, main/module entry point, and basic mode-controlled label application in `nightshift/arm.py`; add `test
      • specloop: complete task 3.1
      • specloop: task 3.2 Complete existing-label handling, uncertain-write reconciliation, target failure isolation, and aggregate batch outcomes in `nightshift/arm.py`; add corresponding main-boundary test
      • specloop: complete task 3.2
      • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 1)
      • specloop: task 3.3 Create `docs/arming.md` with the issue template, named-test examples, discouraged wording replacements, dependency/overlap guidance, module invocation, mode and exit matrix, prerequ
      • specloop: complete task 3.3
      • Merge current PR base cde086dc7c74e6449e3430924e5013f97ce26220
      • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 2)
      • specloop: append review round 1
      • specloop: task 1.1 Add the simple reader and `collect_report` aggregation in new `nightshift/timings.py`, plus temporary-log fixtures and `test_phase_durations_from_event_pairs`, `test_per_change_buil
      • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 2.1 Extend `nightshift/timings.py` with whole-run filters, `render_table`, `main` and the module guard, using one report dictionary for the single text table and JSON. Add `test_since_a
      • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 3.1 Insert only the short build-timing subsection beside the touchpoint paragraph in `README.md`, preserving existing content and concurrent arming guidance; budget about 20 lines. Hono
      • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b
      • specloop: task 4.1 Address review feedback 1: "**mattpolicastro:**\n\nSmoke test of `python -m nightshift.arm --check` against the real armed queue. It found genuine overlaps (#34 with #47 and #52, #9
      • specloop: complete task 4.1
      • Merge current PR base 27672f3f6d35b8f479acb431cc03c54f3820ef92
      • Merge current PR base 28719715027df11f6ac700eb23c81fbd95d2898b
      • specloop: archive nightshift-issue-74-build-timing-report-where-build-time-goe into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-74-build-timing-report-where-build-time-goe
      • Merge pull request #84 from mattpolicastro/spec/nightshift-issue-74-build-timing-report-where-build-time-goe
      • specloop: archive nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f
      • Merge pull request #81 from mattpolicastro/spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f
      • Merge branch 'main' into fix/in-flight-hands-off
    • Merged PR
      Spec: nightshift.arm: lint an issue and check file overlap before arming
    • Pushed
      Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 1)
      20 commits
      • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 2)
      • specloop: task 1.1 Add the simple reader and `collect_report` aggregation in new `nightshift/timings.py`, plus temporary-log fixtures and `test_phase_durations_from_event_pairs`, `test_per_change_buil
      • specloop: complete task 1.1
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.2
      • specloop: task 2.1 Extend `nightshift/timings.py` with whole-run filters, `render_table`, `main` and the module guard, using one report dictionary for the single text table and JSON. Add `test_since_a
      • specloop: complete task 2.1
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.2
      • specloop: task 3.1 Insert only the short build-timing subsection beside the touchpoint paragraph in `README.md`, preserving existing content and concurrent arming guidance; budget about 20 lines. Hono
      • specloop: complete task 3.1
      • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b
      • specloop: archive nightshift-issue-74-build-timing-report-where-build-time-goe into openspec/specs
      • Merge branch 'main' into spec/nightshift-issue-74-build-timing-report-where-build-time-goe
      • Merge pull request #84 from mattpolicastro/spec/nightshift-issue-74-build-timing-report-where-build-time-goe
      • Merge branch 'main' into spec/nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f
      • specloop: archive nightshift-issue-76-nightshift-arm-lint-an-issue-and-check-f into openspec/specs
    • Merged PR
      Spec: Build timing report: where build time goes, per phase, change and profile
    • Pushed
      Draft OpenSpec change nightshift-issue-73-evidence-gates-route-mutants-to-their-ow (specloop propose, round 1)
      82 commits
      • Draft OpenSpec change nightshift-issue-73-evidence-gates-route-mutants-to-their-ow (specloop propose, round 1)
      • specloop: task 1.1 Add mutation-only `Step` parsing and `Manifest.mutation_step` in `specloop/manifest.py`, resolve fallback mutation IDs against both step namespaces, validate collisions, and supply
      • specloop: complete task 1.1
      • specloop: task 1.2 Add frozen `MutationRoute`, default-empty `Manifest.mutation_routes`, and ordered route parsing/validation in `specloop/manifest.py:_gates`. Require a nonempty fallback when routes
      • specloop: complete task 1.2
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.3
      • specloop: task 2.1 Add a pure route/step resolver in `specloop/evidence.py`, using case-sensitive fnmatch on relative POSIX paths, first-match precedence, route step order and legacy fallback declarat
      • specloop: complete task 2.1
      • specloop: task 2.2 Integrate resolved routes into `specloop/evidence.py:mutate`: group by ordered step IDs, run used full baselines serially before workers, reuse identical sequences, assign each muta
      • specloop: complete task 2.2
      • specloop: task 2.3 Isolate immutable per-sequence prepare/step budget derivation in `specloop/evidence.py`, retaining original full-baseline ceilings and the existing floor/factor/cap/fallback formula
      • specloop: complete task 2.3
      • specloop: task 3.1 Implement narrowed execution and full confirmation in `specloop/evidence.py:_mutate_one`, using copied manifests, the same mutated source, fresh confirmation preparation/builds and
      • specloop: complete task 3.1
      • specloop: task 3.2 Add coordinator-owned `mutation-runs.json` receipts in `specloop/evidence.py` following the design's schema, preserving existing evidence and step receipt formats. Retain initial an
      • specloop: complete task 3.2
      • specloop: task 3.3 Complete route/phase lifecycle coverage in `tests/test_mutation_narrowing.py` and `tests/test_mutation_routes.py`, making only necessary execution-helper fixes in `specloop/evidence
      • specloop: complete task 3.3
      • specloop: task 4.1 Add stdlib-only `examples/specloop/select_tests.py` with the function/CLI interface, AST import matching, package/relative-import handling, deterministic output and empty-output fal
      • specloop: complete task 4.1
      • specloop: task 4.2 Update `examples/specloop/self-hosting.toml` with its Python route and mutation-only selector command, preserving existing verification, negative-control and coverage commands. Add
      • specloop: complete task 4.2
      • specloop: task 4.3 Update only Section evidence in `docs/specloop/README.md` with route/placeholder syntax, mutation-only commands, per-sequence baselines, confirmation and timeout semantics, receipt
      • specloop: complete task 4.3
      • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b
      • specloop: archive nightshift-issue-73-evidence-gates-route-mutants-to-their-ow into openspec/specs
      • tests: run #73's fixture steps unwrapped outside specloop's sandbox
      • tests: leave access time out of deploy's no-write snapshots
      • Merge pull request #91 from mattpolicastro/fix/deploy-test-atime
      • Merge branch 'main' into spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow
      • Merge pull request #87 from mattpolicastro/spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow
      • Merge branch 'main' into spec/nightshift-issue-74-build-timing-report-where-build-time-goe
      • specloop: archive nightshift-issue-74-build-timing-report-where-build-time-goe into openspec/specs
      • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 2)
      • specloop: task 1.1 Create `nightshift/deploy.py` with module entry point, flags/defaults, injectable runner/context, checkout discovery/fetch/refusal and conditional fast-forward, plus frozen environm
      • specloop: task 2.1 Add committed manifest comparison, safe staging, the empty marker before renames, simple directory swap, and three-copy retention in `nightshift/deploy.py`. Add `test_check_reports_
      • specloop: task 3.1 Add presence-only pending reporting and reload handling in `nightshift/deploy.py`: default/override/empty command, reload whenever marked, remove only after success, and concrete sh
      • specloop: task 4.1 Add process-age probes and a shared bounded restart helper in `nightshift/deploy.py`, using existing heartbeat/status shapes, local job inventory, fresh activity guards, labels, for
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 5.1 Wire all helpers into complete check/apply orchestration in `nightshift/deploy.py`, reporting independent check failures, refreshing each step, using post-pull HEAD, stopping later
      • specloop: complete task 5.1
      • specloop: task 6.1 Create only `docs/deploy.md` for invocation/no-sync/bootstrap, flags/defaults, exit codes, quiet-window responsibility, specloop-only background-job guard, marker and empty-reload s
      • specloop: complete task 6.1
      • Merge current PR base eaa7e808503b51c407549bacded2e9a3ad806df7
      • specloop: archive nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me into openspec/specs
      • Merge pull request #82 from mattpolicastro/spec/nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me
      • specloop: task 1.1 Update `nightshift/land.py` with the exact registration-response predicate, pending classification, local wait-state tracking, and specific deadline refusal; preserve bracketing hea
      • Merge current PR base 27672f3f6d35b8f479acb431cc03c54f3820ef92
      • Merge current PR base 28719715027df11f6ac700eb23c81fbd95d2898b
      • Draft OpenSpec change nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel (specloop propose, round 1)
      • specloop: task 1.1 Add the parser, injectable subprocess runner and clock boundary, config loading, PR identity resolution and enrollment validation in new `nightshift/land.py`; create the scripted-ru
      • specloop: task 1.2 Add version-1 status discovery and pre-mutation run eligibility validation, with tests for no match, duplicate matches, malformed status and error rows. Add `test_daemon_and_supervi
      • specloop: count task-list lines by a line rule, not Markdown parsing (descope after four review rounds of Markdown edge cases)
      • specloop: task 2.1 Add paginated trusted publication-comment selection and task-list detection for the body and selected comment by the design's line rule (task-list lines count anywhere, including in
      • specloop: task 2.2 Add authenticated actor lookup and in-place checkbox edits for `--checks-done`, with tests for one write per changed source, unchanged complete sources, and partial-write recovery.
      • specloop: task 2.3 Add stable head-specific attestation creation/PATCH and paginated reconciliation before creates and after lost responses; ensure the production runner does not blindly retry POST. A
      • Draft OpenSpec change nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti (specloop propose, round 1)
      • specloop: task 3.1 Wire refreshed run eligibility, plain finish invocation, post-finish head validation and done-run continuation behind the human-check gate. Add `test_land_finishes_only_at_human_che
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 1.1 Extend only the `tasks.md` rules in `specloop/propose.py: PROMPT` with same-file/same-concern grouping, one or two docs-only tasks in one section, the normal six-task target, depend
      • specloop: task 3.2 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: append review round 1
      • specloop: task 1.2 Extend only checklist items 1 and 7 in `specloop/critic.py: PROMPT` with strictly-more-than-eight / docs-only-more-than-two advisory merge findings and blast-radius-scaled retry rem
      • specloop: task 4.1 Add expected-head CI polling, JSON/exit-status classification and the injected shared deadline. Add `test_land_refuses_failing_ci` and pending-to-green, empty/all-skipped, cancellat
      • specloop: archive nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti into openspec/specs
      • specloop: task 5.1 Add the REST update helper with `expected_head_sha`, an immediate pre-update main read, asynchronous head observation and exact ordered two-parent validation. Add tests for REST arg
      • Merge pull request #85 from mattpolicastro/spec/nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti
      • specloop: task 5.2 Wire initial base-ancestry checking and the three-round controller, retaining the pre-update baseline during update observation and the same deadline across rounds. Add `test_land_u
      • specloop: complete task 5.2
      • specloop: task 6.1 Add source/head/run revalidation before finish and before the final main read, refusing concurrent changes and newly added checks; add scripted tests that inject each change at both
      • specloop: task 6.2 Wire the guarded merge commit command, merged-state confirmation and useful success/refusal output. Add stable-base success, competing push, protection rejection, queued-but-open re
      • specloop: complete task 6.2
      • specloop: task 7.1 Write new `docs/landing.md` with command examples, flags, prerequisites, check sources, attestation marker semantics, single-invocation guidance, three-round/shared-timeout behavior
      • specloop: complete task 7.1
      • Merge current PR base 42115e4016d85112f0b9b4ff507c9cce55081724
      • specloop: archive nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel into openspec/specs
      • Merge pull request #83 from mattpolicastro/spec/nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel
      • specloop: task 4.1 Address review feedback 1: "**mattpolicastro:**\n\nSmoke test of `python -m nightshift.arm --check` against the real armed queue. It found genuine overlaps (#34 with #47 and #52, #9
    • Merged PR
      Spec: Evidence gates: route mutants to their own suite, narrow, and confirm survivors
    • Pushed
      tests: leave access time out of deploy's no-write snapshots
      3 commits
      • tests: leave access time out of deploy's no-write snapshots
      • Merge pull request #91 from mattpolicastro/fix/deploy-test-atime
      • Merge branch 'main' into spec/nightshift-issue-73-evidence-gates-route-mutants-to-their-ow
    • Merged PR
      tests: fix flaky deploy no-write snapshot (main is red)
    • Pushed
      Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1)
      76 commits
      • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 2)
      • Draft OpenSpec change nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel (specloop propose, round 1)
      • specloop: task 1.1 Add the parser, injectable subprocess runner and clock boundary, config loading, PR identity resolution and enrollment validation in new `nightshift/land.py`; create the scripted-ru
      • specloop: complete task 1.1
      • specloop: task 1.2 Add version-1 status discovery and pre-mutation run eligibility validation, with tests for no match, duplicate matches, malformed status and error rows. Add `test_daemon_and_supervi
      • specloop: complete task 1.2
      • specloop: count task-list lines by a line rule, not Markdown parsing (descope after four review rounds of Markdown edge cases)
      • specloop: task 2.1 Add paginated trusted publication-comment selection and task-list detection for the body and selected comment by the design's line rule (task-list lines count anywhere, including in
      • specloop: complete task 2.1
      • specloop: task 2.2 Add authenticated actor lookup and in-place checkbox edits for `--checks-done`, with tests for one write per changed source, unchanged complete sources, and partial-write recovery.
      • specloop: complete task 2.2
      • specloop: task 2.3 Add stable head-specific attestation creation/PATCH and paginated reconciliation before creates and after lost responses; ensure the production runner does not blindly retry POST. A
      • Draft OpenSpec change nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti (specloop propose, round 1)
      • specloop: complete task 2.3
      • specloop: task 1.1 Create `nightshift/deploy.py` with module entry point, flags/defaults, injectable runner/context, checkout discovery/fetch/refusal and conditional fast-forward, plus frozen environm
      • specloop: task 3.1 Wire refreshed run eligibility, plain finish invocation, post-finish head validation and done-run continuation behind the human-check gate. Add `test_land_finishes_only_at_human_che
      • specloop: complete task 3.1
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 1.1 Extend only the `tasks.md` rules in `specloop/propose.py: PROMPT` with same-file/same-concern grouping, one or two docs-only tasks in one section, the normal six-task target, depend
      • specloop: task 3.2 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.2
      • specloop: task 2.1 Add committed manifest comparison, safe staging, the empty marker before renames, simple directory swap, and three-copy retention in `nightshift/deploy.py`. Add `test_check_reports_
      • specloop: task 1.2 Extend only checklist items 1 and 7 in `specloop/critic.py: PROMPT` with strictly-more-than-eight / docs-only-more-than-two advisory merge findings and blast-radius-scaled retry rem
      • specloop: task 4.1 Add expected-head CI polling, JSON/exit-status classification and the injected shared deadline. Add `test_land_refuses_failing_ci` and pending-to-green, empty/all-skipped, cancellat
      • specloop: complete task 4.1
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 3.1 Add presence-only pending reporting and reload handling in `nightshift/deploy.py`: default/override/empty command, reload whenever marked, remove only after success, and concrete sh
      • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 4.2
      • specloop: archive nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti into openspec/specs
      • specloop: task 5.1 Add the REST update helper with `expected_head_sha`, an immediate pre-update main read, asynchronous head observation and exact ordered two-parent validation. Add tests for REST arg
      • specloop: complete task 5.1
      • Merge pull request #85 from mattpolicastro/spec/nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti
      • specloop: task 5.2 Wire initial base-ancestry checking and the three-round controller, retaining the pre-update baseline during update observation and the same deadline across rounds. Add `test_land_u
      • specloop: complete task 5.2
      • specloop: task 4.1 Add process-age probes and a shared bounded restart helper in `nightshift/deploy.py`, using existing heartbeat/status shapes, local job inventory, fresh activity guards, labels, for
      • specloop: task 6.1 Add source/head/run revalidation before finish and before the final main read, refusing concurrent changes and newly added checks; add scripted tests that inject each change at both
      • specloop: complete task 6.1
      • specloop: task 6.2 Wire the guarded merge commit command, merged-state confirmation and useful success/refusal output. Add stable-base success, competing push, protection rejection, queued-but-open re
      • specloop: complete task 6.2
      • specloop: task 7.1 Write new `docs/landing.md` with command examples, flags, prerequisites, check sources, attestation marker semantics, single-invocation guidance, three-round/shared-timeout behavior
      • specloop: task 5.1 Wire all helpers into complete check/apply orchestration in `nightshift/deploy.py`, reporting independent check failures, refreshing each step, using post-pull HEAD, stopping later
      • specloop: complete task 7.1
      • Merge current PR base 42115e4016d85112f0b9b4ff507c9cce55081724
      • specloop: archive nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel into openspec/specs
      • specloop: task 1.1 Add the simple reader and `collect_report` aggregation in new `nightshift/timings.py`, plus temporary-log fixtures and `test_phase_durations_from_event_pairs`, `test_per_change_buil
      • Merge pull request #83 from mattpolicastro/spec/nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel
      • specloop: task 6.1 Create only `docs/deploy.md` for invocation/no-sync/bootstrap, flags/defaults, exit codes, quiet-window responsibility, specloop-only background-job guard, marker and empty-reload s
      • Merge current PR base eaa7e808503b51c407549bacded2e9a3ad806df7
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: archive nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me into openspec/specs
      • Merge pull request #82 from mattpolicastro/spec/nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me
      • specloop: task 2.1 Extend `nightshift/timings.py` with whole-run filters, `render_table`, `main` and the module guard, using one report dictionary for the single text table and JSON. Add `test_since_a
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 3.1 Insert only the short build-timing subsection beside the touchpoint paragraph in `README.md`, preserving existing content and concurrent arming guidance; budget about 20 lines. Hono
      • Merge current PR base 86abd0380a98f8fcdced845870563fc4f7ba658b
      • tests: run #73's fixture steps unwrapped outside specloop's sandbox
      • specloop: archive nightshift-issue-73-evidence-gates-route-mutants-to-their-ow into openspec/specs
      • specloop: task 1.1 Add mutation-only `Step` parsing and `Manifest.mutation_step` in `specloop/manifest.py`, resolve fallback mutation IDs against both step namespaces, validate collisions, and supply
      • specloop: task 1.2 Add frozen `MutationRoute`, default-empty `Manifest.mutation_routes`, and ordered route parsing/validation in `specloop/manifest.py:_gates`. Require a nonempty fallback when routes
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.3
      • specloop: task 2.1 Add a pure route/step resolver in `specloop/evidence.py`, using case-sensitive fnmatch on relative POSIX paths, first-match precedence, route step order and legacy fallback declarat
      • specloop: task 2.2 Integrate resolved routes into `specloop/evidence.py:mutate`: group by ordered step IDs, run used full baselines serially before workers, reuse identical sequences, assign each muta
      • specloop: task 2.3 Isolate immutable per-sequence prepare/step budget derivation in `specloop/evidence.py`, retaining original full-baseline ceilings and the existing floor/factor/cap/fallback formula
      • specloop: task 3.1 Implement narrowed execution and full confirmation in `specloop/evidence.py:_mutate_one`, using copied manifests, the same mutated source, fresh confirmation preparation/builds and
      • specloop: task 3.2 Add coordinator-owned `mutation-runs.json` receipts in `specloop/evidence.py` following the design's schema, preserving existing evidence and step receipt formats. Retain initial an
      • specloop: task 3.3 Complete route/phase lifecycle coverage in `tests/test_mutation_narrowing.py` and `tests/test_mutation_routes.py`, making only necessary execution-helper fixes in `specloop/evidence
      • specloop: complete task 3.3
      • specloop: task 4.1 Add stdlib-only `examples/specloop/select_tests.py` with the function/CLI interface, AST import matching, package/relative-import handling, deterministic output and empty-output fal
      • specloop: task 4.2 Update `examples/specloop/self-hosting.toml` with its Python route and mutation-only selector command, preserving existing verification, negative-control and coverage commands. Add
      • specloop: task 4.3 Update only Section evidence in `docs/specloop/README.md` with route/placeholder syntax, mutation-only commands, per-sequence baselines, confirmation and timeout semantics, receipt
      • specloop: complete task 4.3
    • Merged PR
      Spec: nightshift.deploy: detect and fix post-merge drift
    • Pushed
      specloop: archive nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me into openspec/specs
      36 commits
      • specloop: archive nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me into openspec/specs
      • Draft OpenSpec change nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel (specloop propose, round 1)
      • specloop: task 1.1 Add the parser, injectable subprocess runner and clock boundary, config loading, PR identity resolution and enrollment validation in new `nightshift/land.py`; create the scripted-ru
      • specloop: complete task 1.1
      • specloop: task 1.2 Add version-1 status discovery and pre-mutation run eligibility validation, with tests for no match, duplicate matches, malformed status and error rows. Add `test_daemon_and_supervi
      • specloop: complete task 1.2
      • specloop: count task-list lines by a line rule, not Markdown parsing (descope after four review rounds of Markdown edge cases)
      • specloop: task 2.1 Add paginated trusted publication-comment selection and task-list detection for the body and selected comment by the design's line rule (task-list lines count anywhere, including in
      • specloop: complete task 2.1
      • specloop: task 2.2 Add authenticated actor lookup and in-place checkbox edits for `--checks-done`, with tests for one write per changed source, unchanged complete sources, and partial-write recovery.
      • specloop: complete task 2.2
      • specloop: task 2.3 Add stable head-specific attestation creation/PATCH and paginated reconciliation before creates and after lost responses; ensure the production runner does not blindly retry POST. A
      • specloop: complete task 2.3
      • specloop: task 3.1 Wire refreshed run eligibility, plain finish invocation, post-finish head validation and done-run continuation behind the human-check gate. Add `test_land_finishes_only_at_human_che
      • specloop: complete task 3.1
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 3.2 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.2
      • specloop: task 4.1 Add expected-head CI polling, JSON/exit-status classification and the injected shared deadline. Add `test_land_refuses_failing_ci` and pending-to-green, empty/all-skipped, cancellat
      • specloop: complete task 4.1
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 4.2
      • specloop: task 5.1 Add the REST update helper with `expected_head_sha`, an immediate pre-update main read, asynchronous head observation and exact ordered two-parent validation. Add tests for REST arg
      • specloop: complete task 5.1
      • specloop: task 5.2 Wire initial base-ancestry checking and the three-round controller, retaining the pre-update baseline during update observation and the same deadline across rounds. Add `test_land_u
      • specloop: complete task 5.2
      • specloop: task 6.1 Add source/head/run revalidation before finish and before the final main read, refusing concurrent changes and newly added checks; add scripted tests that inject each change at both
      • specloop: complete task 6.1
      • specloop: task 6.2 Wire the guarded merge commit command, merged-state confirmation and useful success/refusal output. Add stable-base success, competing push, protection rejection, queued-but-open re
      • specloop: complete task 6.2
      • specloop: task 7.1 Write new `docs/landing.md` with command examples, flags, prerequisites, check sources, attestation marker semantics, single-invocation guidance, three-round/shared-timeout behavior
      • specloop: complete task 7.1
      • Merge current PR base 42115e4016d85112f0b9b4ff507c9cce55081724
      • specloop: archive nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel into openspec/specs
      • Merge pull request #83 from mattpolicastro/spec/nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel
    • Merged PR
      Spec: nightshift.land: land a reviewed PR safely
    • Pushed
      specloop: archive nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel into openspec/specs
      70 commits
      • specloop: archive nightshift-issue-78-nightshift-land-land-a-reviewed-pr-safel into openspec/specs
      • Draft OpenSpec change nightshift-issue-67-docs-bring-the-specloop-guide-and-known (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-68-factory-page-show-how-long-each-run-has (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-68-factory-page-show-how-long-each-run-has (specloop propose, round 2)
      • specloop: task 1.1 Update publication in `docs/specloop/README.md` and the specloop flow in `README.md` from the landed base-sync behavior: driver preparation, publish handoff, pauses and recovery, sa
      • specloop: complete task 1.1
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.1 Implement the best-effort latest-pause lookup and additive `since` field in `specloop/cli.py` for normal and synthetic non-null pauses, leaving text status and state persistence unc
      • specloop: task 1.2 Add tagged tests covering `specloop-documentation/publication-guidance/base-moves-before-publication`, `specloop-documentation/publication-guidance/base-preparation-pauses`, fixing
      • specloop: complete task 1.2
      • specloop: task 2.1 Extend `plugins/nightshift/shared/factory.ts` with the optional nullable pause fields and minimally update the existing projection in `plugins/nightshift/server/factory.ts` to copy
      • specloop: complete task 2.1
      • specloop: task 2.1 Update drafting guidance in `docs/specloop/README.md` for the in-flight map, normalized paths, overlap feedback, four-round default, human-task lint and preserved spec guarantees; a
      • specloop: task 3.1 Add the pure `factoryWaitingTime` helper in `plugins/nightshift/client/factory-model.ts` and new `plugins/nightshift/tests/factory-waiting-model.test.ts`. Test exact-zero eligibilit
      • specloop: task 2.2 Extend the same guide's proposal sequence with the independent critic, all eight checklist items, both concurrent-file sources, single correction and contradiction/risk outcomes, ci
      • specloop: complete task 3.1
      • specloop: complete task 2.2
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.3 Add tagged tests covering `specloop-documentation/spec-critic-guidance/critic-checklist-is-complete`, `specloop-documentation/spec-critic-guidance/critic-outcome-is-actionable`, fix
      • specloop: complete task 2.3
      • specloop: task 2.4 Add tagged tests covering `specloop-documentation/spec-drafting-guidance/concurrent-files-inform-a-draft`, `specloop-documentation/spec-drafting-guidance/drafting-rules-preserve-fea
      • specloop: complete task 2.4
      • specloop: task 3.1 Reconcile front-door sections in `docs/specloop/README.md` and `README.md` with dependencies, label authorization, consumed feedback IDs and legacy initialization, idea files and is
      • specloop: task 4.1 Render separate waiting text beside the preserved status/progress block in `plugins/nightshift/client/factory.tsx`, using the existing render/refresh lifecycle and current theme. Ad
      • specloop: complete task 4.1
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 4.1 Update evidence guidance in `docs/specloop/README.md` for concurrency, timeout scoring, prose/comment exclusions, `mutation_skip`, measured versus skipped evidence, and both guard-c
      • specloop: complete task 4.2
      • Merge current PR base 8c7a17529fe703415c19446f654d2a17a3df1271
      • specloop: compute done once so status typing matches the baseline
      • specloop: task 1.1 Add the parser, injectable subprocess runner and clock boundary, config loading, PR identity resolution and enrollment validation in new `nightshift/land.py`; create the scripted-ru
      • specloop: task 5.1 Add concise operations guidance in `docs/specloop/README.md` and links or summaries in the specloop portions of `README.md`: job controls and supervisor boundaries, touchpoint comma
      • specloop: task 1.2 Add version-1 status discovery and pre-mutation run eligibility validation, with tests for no match, duplicate matches, malformed status and error rows. Add `test_daemon_and_supervi
      • specloop: archive nightshift-issue-68-factory-page-show-how-long-each-run-has into openspec/specs
      • specloop: complete task 5.1
      • Merge pull request #71 from mattpolicastro/spec/nightshift-issue-68-factory-page-show-how-long-each-run-has
      • specloop: task 6.1 Reconcile `KNOWN-LIMITATIONS.md` with the preceding documentation and the design's fix/remaining-gap map. Remove only demonstrated fixes, split partially fixed bullets, retain unres
      • specloop: complete task 6.1
      • specloop: task 7.1 Reconcile wording and local links across `docs/specloop/README.md`, `KNOWN-LIMITATIONS.md` and the scoped parts of `README.md`; check PR citations against local merge history and th
      • specloop: complete task 7.1
      • specloop: strengthen section 7 after its evidence check
      • specloop: task 7.2 Add tagged tests covering `specloop-documentation/documentation-integrity/references-and-reader-checks-are-reviewable`, `specloop-documentation/documentation-integrity/scope-and-reg
      • specloop: complete task 7.2
      • Merge current PR base 53478607141bbb9aa3222799db0bcedc3eb4165a
      • specloop: count task-list lines by a line rule, not Markdown parsing (descope after four review rounds of Markdown edge cases)
      • specloop: task 2.1 Add paginated trusted publication-comment selection and task-list detection for the body and selected comment by the design's line rule (task-list lines count anywhere, including in
      • tests: keep docs checks generic so later doc edits don't break them (drop pinned citations, phrases and limitation text)
      • specloop: task 2.2 Add authenticated actor lookup and in-place checkbox edits for `--checks-done`, with tests for one write per changed source, unchanged complete sources, and partial-write recovery.
      • specloop: archive nightshift-issue-67-docs-bring-the-specloop-guide-and-known into openspec/specs
      • Merge pull request #70 from mattpolicastro/spec/nightshift-issue-67-docs-bring-the-specloop-guide-and-known
      • specloop: task 2.3 Add stable head-specific attestation creation/PATCH and paginated reconciliation before creates and after lost responses; ensure the production runner does not blindly retry POST. A
      • Draft OpenSpec change nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti (specloop propose, round 1)
      • specloop: task 3.1 Wire refreshed run eligibility, plain finish invocation, post-finish head validation and done-run continuation behind the human-check gate. Add `test_land_finishes_only_at_human_che
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 1.1 Extend only the `tasks.md` rules in `specloop/propose.py: PROMPT` with same-file/same-concern grouping, one or two docs-only tasks in one section, the normal six-task target, depend
      • specloop: task 3.2 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.2
      • specloop: task 1.2 Extend only checklist items 1 and 7 in `specloop/critic.py: PROMPT` with strictly-more-than-eight / docs-only-more-than-two advisory merge findings and blast-radius-scaled retry rem
      • specloop: task 4.1 Add expected-head CI polling, JSON/exit-status classification and the injected shared deadline. Add `test_land_refuses_failing_ci` and pending-to-green, empty/all-skipped, cancellat
      • specloop: archive nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti into openspec/specs
      • specloop: task 5.1 Add the REST update helper with `expected_head_sha`, an immediate pre-update main read, asynchronous head observation and exact ordered two-parent validation. Add tests for REST arg
      • Merge pull request #85 from mattpolicastro/spec/nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti
      • specloop: task 5.2 Wire initial base-ancestry checking and the three-round controller, retaining the pre-update baseline during update observation and the same deadline across rounds. Add `test_land_u
      • specloop: complete task 5.2
      • specloop: task 6.1 Add source/head/run revalidation before finish and before the final main read, refusing concurrent changes and newly added checks; add scripted tests that inject each change at both
      • specloop: task 6.2 Wire the guarded merge commit command, merged-state confirmation and useful success/refusal output. Add stable-base success, competing push, protection rejection, queued-but-open re
      • specloop: complete task 6.2
      • specloop: task 7.1 Write new `docs/landing.md` with command examples, flags, prerequisites, check sources, attestation marker semantics, single-invocation guidance, three-round/shared-timeout behavior
      • Merge current PR base 42115e4016d85112f0b9b4ff507c9cce55081724
    • Merged PR
      Spec: Drafting: size tasks by risk, not by section
    • Pushed
      specloop: archive nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti into openspec/specs
      63 commits
      • specloop: archive nightshift-issue-75-drafting-size-tasks-by-risk-not-by-secti into openspec/specs
      • specloop: task 1.1 Extend only the `tasks.md` rules in `specloop/propose.py: PROMPT` with same-file/same-concern grouping, one or two docs-only tasks in one section, the normal six-task target, depend
      • specloop: complete task 1.1
      • specloop: task 1.2 Extend only checklist items 1 and 7 in `specloop/critic.py: PROMPT` with strictly-more-than-eight / docs-only-more-than-two advisory merge findings and blast-radius-scaled retry rem
      • specloop: complete task 1.2
      • Draft OpenSpec change nightshift-issue-67-docs-bring-the-specloop-guide-and-known (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-68-factory-page-show-how-long-each-run-has (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-68-factory-page-show-how-long-each-run-has (specloop propose, round 2)
      • specloop: task 1.1 Update publication in `docs/specloop/README.md` and the specloop flow in `README.md` from the landed base-sync behavior: driver preparation, publish handoff, pauses and recovery, sa
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.1 Implement the best-effort latest-pause lookup and additive `since` field in `specloop/cli.py` for normal and synthetic non-null pauses, leaving text status and state persistence unc
      • specloop: task 1.2 Add tagged tests covering `specloop-documentation/publication-guidance/base-moves-before-publication`, `specloop-documentation/publication-guidance/base-preparation-pauses`, fixing
      • specloop: task 2.1 Extend `plugins/nightshift/shared/factory.ts` with the optional nullable pause fields and minimally update the existing projection in `plugins/nightshift/server/factory.ts` to copy
      • specloop: complete task 2.1
      • specloop: task 2.1 Update drafting guidance in `docs/specloop/README.md` for the in-flight map, normalized paths, overlap feedback, four-round default, human-task lint and preserved spec guarantees; a
      • specloop: task 3.1 Add the pure `factoryWaitingTime` helper in `plugins/nightshift/client/factory-model.ts` and new `plugins/nightshift/tests/factory-waiting-model.test.ts`. Test exact-zero eligibilit
      • specloop: task 2.2 Extend the same guide's proposal sequence with the independent critic, all eight checklist items, both concurrent-file sources, single correction and contradiction/risk outcomes, ci
      • specloop: complete task 3.1
      • specloop: complete task 2.2
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.3 Add tagged tests covering `specloop-documentation/spec-critic-guidance/critic-checklist-is-complete`, `specloop-documentation/spec-critic-guidance/critic-outcome-is-actionable`, fix
      • specloop: complete task 2.3
      • specloop: task 2.4 Add tagged tests covering `specloop-documentation/spec-drafting-guidance/concurrent-files-inform-a-draft`, `specloop-documentation/spec-drafting-guidance/drafting-rules-preserve-fea
      • specloop: complete task 2.4
      • specloop: task 3.1 Reconcile front-door sections in `docs/specloop/README.md` and `README.md` with dependencies, label authorization, consumed feedback IDs and legacy initialization, idea files and is
      • specloop: task 4.1 Render separate waiting text beside the preserved status/progress block in `plugins/nightshift/client/factory.tsx`, using the existing render/refresh lifecycle and current theme. Ad
      • specloop: complete task 4.1
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 4.1 Update evidence guidance in `docs/specloop/README.md` for concurrency, timeout scoring, prose/comment exclusions, `mutation_skip`, measured versus skipped evidence, and both guard-c
      • specloop: complete task 4.2
      • specloop: task 1.1 Create the section parser, finding representation, and pure wording lint in `nightshift/arm.py`; create fixture-driven `tests/test_arm.py` with `test_arm_flags_missing_sections`, `t
      • Merge current PR base 8c7a17529fe703415c19446f654d2a17a3df1271
      • specloop: task 1.2 Add the bounded injectable GitHub issue reader, issue cache, and direct blocker completion lint to `nightshift/arm.py`, importing `queue.blockers` without editing its owner; add sta
      • specloop: compute done once so status typing matches the baseline
      • specloop: task 5.1 Add concise operations guidance in `docs/specloop/README.md` and links or summaries in the specloop portions of `README.md`: job controls and supervisor boundaries, touchpoint comma
      • specloop: archive nightshift-issue-68-factory-page-show-how-long-each-run-has into openspec/specs
      • specloop: complete task 5.1
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.3
      • Merge pull request #71 from mattpolicastro/spec/nightshift-issue-68-factory-page-show-how-long-each-run-has
      • specloop: task 6.1 Reconcile `KNOWN-LIMITATIONS.md` with the preceding documentation and the design's fix/remaining-gap map. Remove only demonstrated fixes, split partially fixed bullets, retain unres
      • specloop: complete task 6.1
      • specloop: task 2.1 Add paginated armed-issue collection, Scope extraction via `propose.paths`, in-flight collection via `propose.in_flight`, front-door run identity, and self exclusion to `nightshift/
      • specloop: task 7.1 Reconcile wording and local links across `docs/specloop/README.md`, `KNOWN-LIMITATIONS.md` and the scoped parts of `README.md`; check PR citations against local merge history and th
      • specloop: complete task 7.1
      • specloop: task 2.2 Add the `critic.open_pr_files` adapter and paginated PR metadata join in `nightshift/arm.py`; extend `tests/test_arm.py` to exercise all three context sources, renames, pagination,
      • specloop: strengthen section 7 after its evidence check
      • specloop: task 2.3 Add cached cycle-safe dependency reachability, combined overlap findings, and pre-write batch candidate comparison in `nightshift/arm.py`; extend `tests/test_arm.py` with `test_arm_
      • specloop: task 7.2 Add tagged tests covering `specloop-documentation/documentation-integrity/references-and-reader-checks-are-reviewable`, `specloop-documentation/documentation-integrity/scope-and-reg
      • specloop: complete task 7.2
      • Merge current PR base 53478607141bbb9aa3222799db0bcedc3eb4165a
      • specloop: task 2.4 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • tests: keep docs checks generic so later doc edits don't break them (drop pinned citations, phrases and limitation text)
      • specloop: archive nightshift-issue-67-docs-bring-the-specloop-guide-and-known into openspec/specs
      • specloop: task 3.1 Add argument parsing, checkout/repository resolution, deterministic reporting, main/module entry point, and basic mode-controlled label application in `nightshift/arm.py`; add `test
      • Merge pull request #70 from mattpolicastro/spec/nightshift-issue-67-docs-bring-the-specloop-guide-and-known
      • specloop: task 3.2 Complete existing-label handling, uncertain-write reconciliation, target failure isolation, and aggregate batch outcomes in `nightshift/arm.py`; add corresponding main-boundary test
      • specloop: complete task 3.2
      • specloop: task 3.3 Create `docs/arming.md` with the issue template, named-test examples, discouraged wording replacements, dependency/overlap guidance, module invocation, mode and exit matrix, prerequ
      • specloop: complete task 3.3
      • Merge current PR base cde086dc7c74e6449e3430924e5013f97ce26220
      • Draft OpenSpec change nightshift-issue-74-build-timing-report-where-build-time-goe (specloop propose, round 2)
    • Merged PR
      Spec: Docs: bring the specloop guide and known limitations up to date
    • Pushed
      Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1)
      47 commits
      • Draft OpenSpec change nightshift-issue-77-nightshift-deploy-detect-and-fix-post-me (specloop propose, round 1)
      • tests: keep docs checks generic so later doc edits don't break them (drop pinned citations, phrases and limitation text)
      • CI: fail on new mypy errors against a committed baseline
      • Merge branch 'main' into ci/mypy-baseline
      • Draft OpenSpec change nightshift-issue-68-factory-page-show-how-long-each-run-has (specloop propose, round 1)
      • queue: annotate the feedback dedupe map so the type gate passes on current main
      • Draft OpenSpec change nightshift-issue-68-factory-page-show-how-long-each-run-has (specloop propose, round 2)
      • Merge pull request #69 from mattpolicastro/ci/mypy-baseline
      • specloop: task 1.1 Update publication in `docs/specloop/README.md` and the specloop flow in `README.md` from the landed base-sync behavior: driver preparation, publish handoff, pauses and recovery, sa
      • specloop: complete task 1.1
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.1 Implement the best-effort latest-pause lookup and additive `since` field in `specloop/cli.py` for normal and synthetic non-null pauses, leaving text status and state persistence unc
      • specloop: task 1.2 Add tagged tests covering `specloop-documentation/publication-guidance/base-moves-before-publication`, `specloop-documentation/publication-guidance/base-preparation-pauses`, fixing
      • specloop: complete task 1.2
      • specloop: task 2.1 Extend `plugins/nightshift/shared/factory.ts` with the optional nullable pause fields and minimally update the existing projection in `plugins/nightshift/server/factory.ts` to copy
      • specloop: complete task 2.1
      • specloop: task 2.1 Update drafting guidance in `docs/specloop/README.md` for the in-flight map, normalized paths, overlap feedback, four-round default, human-task lint and preserved spec guarantees; a
      • specloop: task 3.1 Add the pure `factoryWaitingTime` helper in `plugins/nightshift/client/factory-model.ts` and new `plugins/nightshift/tests/factory-waiting-model.test.ts`. Test exact-zero eligibilit
      • specloop: task 2.2 Extend the same guide's proposal sequence with the independent critic, all eight checklist items, both concurrent-file sources, single correction and contradiction/risk outcomes, ci
      • specloop: complete task 3.1
      • specloop: complete task 2.2
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.3 Add tagged tests covering `specloop-documentation/spec-critic-guidance/critic-checklist-is-complete`, `specloop-documentation/spec-critic-guidance/critic-outcome-is-actionable`, fix
      • specloop: complete task 2.3
      • specloop: task 2.4 Add tagged tests covering `specloop-documentation/spec-drafting-guidance/concurrent-files-inform-a-draft`, `specloop-documentation/spec-drafting-guidance/drafting-rules-preserve-fea
      • specloop: complete task 2.4
      • specloop: task 3.1 Reconcile front-door sections in `docs/specloop/README.md` and `README.md` with dependencies, label authorization, consumed feedback IDs and legacy initialization, idea files and is
      • specloop: task 4.1 Render separate waiting text beside the preserved status/progress block in `plugins/nightshift/client/factory.tsx`, using the existing render/refresh lifecycle and current theme. Ad
      • specloop: complete task 4.1
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 4.1 Update evidence guidance in `docs/specloop/README.md` for concurrency, timeout scoring, prose/comment exclusions, `mutation_skip`, measured versus skipped evidence, and both guard-c
      • specloop: complete task 4.2
      • Merge current PR base 8c7a17529fe703415c19446f654d2a17a3df1271
      • specloop: compute done once so status typing matches the baseline
      • specloop: task 5.1 Add concise operations guidance in `docs/specloop/README.md` and links or summaries in the specloop portions of `README.md`: job controls and supervisor boundaries, touchpoint comma
      • specloop: archive nightshift-issue-68-factory-page-show-how-long-each-run-has into openspec/specs
      • specloop: complete task 5.1
      • Merge pull request #71 from mattpolicastro/spec/nightshift-issue-68-factory-page-show-how-long-each-run-has
      • specloop: task 6.1 Reconcile `KNOWN-LIMITATIONS.md` with the preceding documentation and the design's fix/remaining-gap map. Remove only demonstrated fixes, split partially fixed bullets, retain unres
      • specloop: complete task 6.1
      • specloop: task 7.1 Reconcile wording and local links across `docs/specloop/README.md`, `KNOWN-LIMITATIONS.md` and the scoped parts of `README.md`; check PR citations against local merge history and th
      • specloop: complete task 7.1
      • specloop: strengthen section 7 after its evidence check
      • specloop: task 7.2 Add tagged tests covering `specloop-documentation/documentation-integrity/references-and-reader-checks-are-reviewable`, `specloop-documentation/documentation-integrity/scope-and-reg
      • specloop: complete task 7.2
      • Merge current PR base 53478607141bbb9aa3222799db0bcedc3eb4165a
    • Merged PR
      Spec: Factory page: show how long each run has waited on a human
    • Pushed
      specloop: archive nightshift-issue-68-factory-page-show-how-long-each-run-has into openspec/specs
      17 commits
      • specloop: archive nightshift-issue-68-factory-page-show-how-long-each-run-has into openspec/specs
      • CI: fail on new mypy errors against a committed baseline
      • Merge branch 'main' into ci/mypy-baseline
      • queue: annotate the feedback dedupe map so the type gate passes on current main
      • Merge pull request #69 from mattpolicastro/ci/mypy-baseline
      • specloop: task 1.1 Implement the best-effort latest-pause lookup and additive `since` field in `specloop/cli.py` for normal and synthetic non-null pauses, leaving text status and state persistence unc
      • specloop: complete task 1.1
      • specloop: task 2.1 Extend `plugins/nightshift/shared/factory.ts` with the optional nullable pause fields and minimally update the existing projection in `plugins/nightshift/server/factory.ts` to copy
      • specloop: complete task 2.1
      • specloop: task 3.1 Add the pure `factoryWaitingTime` helper in `plugins/nightshift/client/factory-model.ts` and new `plugins/nightshift/tests/factory-waiting-model.test.ts`. Test exact-zero eligibilit
      • specloop: complete task 3.1
      • specloop: task 4.1 Render separate waiting text beside the preserved status/progress block in `plugins/nightshift/client/factory.tsx`, using the existing render/refresh lifecycle and current theme. Ad
      • specloop: complete task 4.1
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 4.2 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 4.2
      • Merge current PR base 8c7a17529fe703415c19446f654d2a17a3df1271
    • Merged PR
      CI: fail on new mypy errors against a committed baseline
    • Pushed
      queue: annotate the feedback dedupe map so the type gate passes on current main
      31 commits
      • queue: annotate the feedback dedupe map so the type gate passes on current main
      • Draft OpenSpec change nightshift-issue-6-revision-feedback-include-comments-poste (specloop propose, round 1)
      • specloop: task 1.1 Add `FeedbackItem` and the paginated, strict `pr_feedback_items` reader in `nightshift/queue.py`, preserving the existing `pr_feedback` interface. Share strict raw-record enumeratio
      • specloop: complete task 1.1
      • specloop: task 1.2 Extend `nightshift/queue.py::_reconcile_intake_comment` to recognize `revise` alongside draft/admit/publish markers. Add `tests/test_revision_comment_retry.py` using real `queue._gh
      • specloop: complete task 1.2
      • specloop: task 2.1 Add revision-only receipt validation, snapshot, replacement, and idempotent acknowledgement helpers in `nightshift/specloop_intake.py`, reusing `_save` without changing shared job A
      • specloop: complete task 2.1
      • specloop: task 2.2 Add revision-only automatic legacy initialization helpers in `nightshift/specloop_intake.py`: read recorded `saved_at` (or `updated_at` alias), inclusively seed all trusted IDs by c
      • specloop: complete task 2.2
      • specloop: task 3.1 Wire automatic legacy initialization before collection/replacement, the structured reader, and durable snapshots into `revise_pending` and acknowledge admitted revisions before noti
      • specloop: complete task 3.1
      • specloop: task 3.2 Complete spec-stage snapshot delivery and acknowledge only after successful push, keeping the existing idea-file, branch, and head checks. Extend `tests/test_revision_feedback_consu
      • specloop: complete task 3.2
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 3.3 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.3
      • specloop: task 4.1 Complete revision-only recovery ordering for saved results and consumption writes. Add `tests/test_revision_feedback_recovery.py` tests across both stages for deferred background re
      • specloop: complete task 4.1
      • specloop: task 4.2 Handle a newer authorized label event without discarding the previous running/completed round, and recheck the current event before removing a revision label. Extend `tests/test_rev
      • specloop: complete task 4.2
      • specloop: task 5.1 Complete legacy pending-job/delivery recovery in `revise_pending` using the persisted baseline from tasks 2.2 and 3.1. Preserve payloads and original markers with the explicit legac
      • specloop: complete task 5.1
      • specloop: task 5.2 Preserve #5 authorization ahead of feedback reads and receipt writes, and add `real_trust` integration coverage in the new recovery/consumption test files for unauthorized empty/non
      • specloop: complete task 5.2
      • specloop: task 6.1 Update `README.md` around line 114 to explain per-PR consumed comment IDs instead of branch-tip time, comments arriving during a revision remaining available, relabelling not replay
      • specloop: complete task 6.1
      • Merge current PR base 5b66c89764709d60e06ce0a098c15c58fac1f967
      • specloop: archive nightshift-issue-6-revision-feedback-include-comments-poste into openspec/specs
      • Merge pull request #61 from mattpolicastro/spec/nightshift-issue-6-revision-feedback-include-comments-poste
      • Merge branch 'main' into ci/mypy-baseline
    • Merged PR
      Spec: Revision feedback: include comments posted during a revision, never re-queue the last round
    • Pushed
      specloop: archive nightshift-issue-6-revision-feedback-include-comments-poste into openspec/specs
      13 commits
      • specloop: archive nightshift-issue-6-revision-feedback-include-comments-poste into openspec/specs
      • Draft OpenSpec change nightshift-issue-33-mutation-operators-negate-bare-condition (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-33-mutation-operators-negate-bare-condition (specloop propose, round 2)
      • specloop: task 1.1 After #21 has landed, add source-aware `negate-condition` candidate generation and the shared Python analysis needed for it in `specloop/evidence.py`, preserving the `generate` inte
      • specloop: complete task 1.1
      • specloop: task 1.2 Extend the generation helpers in `specloop/evidence.py` with `drop-return`: a last return directly in an `if`/`elif`/`else` branch whose owning `if` has a following statement in its
      • specloop: complete task 1.2
      • specloop: task 1.3 Add `test_gate_measures_a_guard_clause_change` in `tests/test_specloop_evidence.py` with real base/head commits adding only the two guard lines, real generation and dispatch, and a
      • specloop: complete task 1.3
      • Merge current PR base 1dc8d8965ff6f50620a6363be6a1db1b9b5cc258
      • Merge current PR base 5b66c89764709d60e06ce0a098c15c58fac1f967
      • specloop: archive nightshift-issue-33-mutation-operators-negate-bare-condition into openspec/specs
      • Merge pull request #64 from mattpolicastro/spec/nightshift-issue-33-mutation-operators-negate-bare-condition
    • Merged PR
      Spec: Mutation operators: negate bare conditions and drop early returns
    • Pushed
      specloop: archive nightshift-issue-33-mutation-operators-negate-bare-condition into openspec/specs
    • Pushed
      Draft OpenSpec change nightshift-issue-21-mutation-testing-skip-cosmetic-literals (specloop propose, round 1)
      99 commits
      • Draft OpenSpec change nightshift-issue-21-mutation-testing-skip-cosmetic-literals (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-50-touchpoint-report-count-human-interventi (specloop propose, round 2)
      • specloop: task 1.1 Add standard-library discovery and record normalization in `nightshift/touchpoints.py`, with temporary-directory tests in the new `tests/test_touchpoints.py` for numeric receipts, r
      • specloop: complete task 1.1
      • specloop: task 1.2 Add intake aggregation and receipt/job deduplication in `nightshift/touchpoints.py`, plus tests in `tests/test_touchpoints.py` for each outcome, repeated independent jobs, stripped
      • specloop: complete task 1.2
      • specloop: task 2.1 Add event replay, build-revision commit deduplication, pause/resume reason attribution and human-accept counting in `nightshift/touchpoints.py`; add and finish `test_touchpoints_cou
      • specloop: complete task 2.1
      • specloop: task 2.2 Complete scheduled-pause classification, per-task infra recovery accounting that survives manual resumes, unknown reason warnings and broken-log attribution in `nightshift/touchpoin
      • specloop: complete task 2.2
      • specloop: task 1.1 Add and validate `Manifest.mutation_skip` in `specloop/manifest.py`, apply literal whole-line exclusions before sampling in `specloop/evidence.py`, and add `tests/test_mutation_skip
      • specloop: task 2.1 Load candidate files from committed `head` in `gather`, pass complete source to `generate`, and add Python AST/token span filtering in `specloop/evidence.py`. Move Python comment-pr
      • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1)
      • specloop: task 2.2 Preserve today's non-Python comment-prefix exclusions in `specloop/evidence.py` and add only line-level `/* ... */` tracking for blocks whose opening and closing lines are comment-o
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.3 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 2)
      • specloop: complete task 2.3
      • specloop: task 3.1 Implement `collect_report` date provenance, inclusive UTC selection, row/aggregate totals and deterministic version-1 document fields in `nightshift/touchpoints.py`; add `test_touch
      • specloop: descope the JSX style filter (task 3.1)
      • specloop: complete task 3.1
      • specloop: task 1.1 Add the bounded source-origin fetch helper in `specloop/loop.py`, with local-path resolution, explicit base refspec, diagnostic handling and no source mutations; add local bare-orig
      • specloop: task 3.2 Implement `render_table`, argparse `main`, module execution, JSON-only stdout, zero-history output and exit codes in `nightshift/touchpoints.py`; add CLI and subprocess smoke tests
      • specloop: task 1.2 Add disposable clean/conflicting merge construction in `specloop/loop.py` using harness identity and two-parent history, plus additive `base_sync` intent loading in `specloop/state.
      • specloop: complete task 3.2
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.3
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 3.3 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 2.1 Build the driver-only `loop.prepare_publish` gate from the fetch/merge helpers, persist intent before compare-and-swap advancement, invoke the existing trusted verifier and retain a
      • specloop: complete task 3.3
      • specloop: task 2.2 Reconcile interrupted integration and verification in the driver gate, bind successful receipts to head, and handle repaired descendants; add restart/failure-injection tests in new
      • Draft OpenSpec change nightshift-issue-58-in-flight-file-map-parse-file-py-functio (specloop propose, round 1)
      • specloop: merge current main into the run (manual, ahead of #46): brings in #8 for task 4.1
      • specloop: task 3.1 Wire the gate before final checks in `loop.finals`, reload head and retain the unchanged-base fast path; extend new readiness tests and adjust only existing fixture setup that now n
      • specloop: task 1.1 Update `paths()` in `specloop/propose.py` to normalize single-colon identifier suffixes while preserving existing double-colon, punctuation, prefix-exclusion, wildcard, and deduplic
      • specloop: task 3.2 Wire `cli._publish` after `_remote` to fetch once with a 20-second timeout and use a read-only ancestry/obligation predicate. If preparation is needed, atomically save running statu
      • specloop: task 4.1 Complete record/directory failure isolation and source-location diagnostics in `nightshift/touchpoints.py`; add `test_unreadable_records_are_reported_not_fatal` and compatibility te
      • specloop: task 1.2 Extend `paths(text, root=None)` and wire the resolved source root from `in_flight()` in `specloop/propose.py`. In `tests/test_specloop_in_flight_paths.py`, add `test_root_level_file
      • specloop: complete task 4.1
      • specloop: task 3.3 Add local publication fixtures and handoff/restart regressions in new `tests/test_specloop_base_publication.py`, driving unchanged `publish_pending` through real CLI status/publish
      • specloop: task 3.4 Extend new publication integration tests for repeated base advancement and push failure followed by another advance. Verify each publish only fetches and schedules, each preparation
      • specloop: task 4.1 After #8 has merged (an admission prerequisite), remove prose-only annotations in `nightshift/specloop_job.py`, `nightshift/specloop_client.py`, `specloop/state.py`, and `specloop/e
      • specloop: complete task 3.4
      • specloop: archive nightshift-issue-58-in-flight-file-map-parse-file-py-functio into openspec/specs
      • Merge pull request #60 from mattpolicastro/spec/nightshift-issue-58-in-flight-file-map-parse-file-py-functio
      • specloop: task 4.2 Add read-only/offline invariant assertions in `tests/test_touchpoints.py` around file bytes and directory contents, forbid external calls, and exercise both output modes; run `uv ru
      • specloop: task 3.5 Implement retryable fetch-failure handling in `_publish` and add timeout/failure and CLI format regressions in the new test files, asserting the 20-second fetch budget without waiti
      • specloop: complete task 4.2
      • specloop: complete task 3.5
      • Spec critic: block on unplanned migrations, retry gaps and stale operator docs
      • specloop: task 5.1 Change `Evidence.unmeasured` and equivalent-aware `Evidence.summary` in `specloop/evidence.py`. Add `tests/test_mutation_measurement.py` with `test_equivalent_and_timeout_only_evide
      • specloop: task 3.6 Add receipt-recovery regressions in `tests/test_specloop_base_publication.py` for a lost stable publish response and comment failure before/after delivery, using the fixtures from 3
      • specloop: complete task 5.1
      • Merge pull request #62 from mattpolicastro/fix/critic-blocking-classes
      • specloop: complete task 3.6
      • specloop: task 5.2 Extend `tests/test_mutation_measurement.py` with host-independent `gather` and `section_evidence` integration tests for filtered selection at concurrency 1 and 2, prepared/unprepare
      • specloop: complete task 5.2
      • specloop: task 3.7 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.7
      • specloop: task 1.1 Add `FeedbackItem` and the paginated, strict `pr_feedback_items` reader in `nightshift/queue.py`, preserving the existing `pr_feedback` interface. Share strict raw-record enumeratio
      • specloop: archive nightshift-issue-50-touchpoint-report-count-human-interventi into openspec/specs
      • specloop: task 1.2 Extend `nightshift/queue.py::_reconcile_intake_comment` to recognize `revise` alongside draft/admit/publish markers. Add `tests/test_revision_comment_retry.py` using real `queue._gh
      • specloop: archive nightshift-issue-21-mutation-testing-skip-cosmetic-literals into openspec/specs
      • Merge pull request #53 from mattpolicastro/spec/nightshift-issue-50-touchpoint-report-count-human-interventi
      • specloop: task 4.1 Add the section comparison-baseline helper and wire only the `evidence.gather` call boundary in `specloop/loop.py`, reusing disposable merge construction without changing run refs o
      • Merge pull request #48 from mattpolicastro/spec/nightshift-issue-21-mutation-testing-skip-cosmetic-literals
      • Fix main: drop a prose annotation inside a touchpoints docstring
      • specloop: task 2.1 Add revision-only receipt validation, snapshot, replacement, and idempotent acknowledgement helpers in `nightshift/specloop_intake.py`, reusing `_save` without changing shared job A
      • Merge pull request #63 from mattpolicastro/chore/drop-prose-annotation
      • specloop: task 4.2 Complete persisted-baseline/revision and comparison-conflict handling with tests in `tests/test_specloop_base_evidence.py`; run the focused new files and `uv run pytest`, resolving
      • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 1)
      • specloop: task 2.2 Add revision-only automatic legacy initialization helpers in `nightshift/specloop_intake.py`: read recorded `saved_at` (or `updated_at` alias), inclusively seed all trusted IDs by c
      • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 2)
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 4.3 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 4.3
      • specloop: task 3.1 Wire automatic legacy initialization before collection/replacement, the structured reader, and durable snapshots into `revise_pending` and acknowledge admitted revisions before noti
      • specloop: task 3.2 Complete spec-stage snapshot delivery and acknowledge only after successful push, keeping the existing idea-file, branch, and head checks. Extend `tests/test_revision_feedback_consu
      • specloop: merge current main into the run before merging (manual; #46 automates this once landed)
      • specloop: drop prose equivalence markers that #21 now forbids
      • specloop: merge current main into the run (manual): brings PR #63's fix
      • specloop: task 1.1 After #21 lands, update and validate only `test_parallel_mutants_respect_time_box` and its decorators in `tests/test_specloop_evidence.py` in this same implementation session: add t
      • specloop: archive nightshift-issue-46-before-publishing-merge-the-current-base into openspec/specs
      • Merge pull request #59 from mattpolicastro/spec/nightshift-issue-46-before-publishing-merge-the-current-base
      • specloop: task 4.1 Complete revision-only recovery ordering for saved results and consumption writes. Add `tests/test_revision_feedback_recovery.py` tests across both stages for deferred background re
      • Merge current PR base 1dc8d8965ff6f50620a6363be6a1db1b9b5cc258
      • specloop: task 4.2 Handle a newer authorized label event without discarding the previous running/completed round, and recheck the current event before removing a revision label. Extend `tests/test_rev
      • specloop: task 5.1 Complete legacy pending-job/delivery recovery in `revise_pending` using the persisted baseline from tasks 2.2 and 3.1. Preserve payloads and original markers with the explicit legac
      • specloop: archive nightshift-issue-49-de-flake-test-parallel-mutants-respect-t into openspec/specs
      • specloop: task 5.2 Preserve #5 authorization ahead of feedback reads and receipt writes, and add `real_trust` integration coverage in the new recovery/consumption test files for unauthorized empty/non
      • Merge pull request #65 from mattpolicastro/spec/nightshift-issue-49-de-flake-test-parallel-mutants-respect-t
      • specloop: task 6.1 Update `README.md` around line 114 to explain per-PR consumed comment IDs instead of branch-tip time, comments arriving during a revision remaining available, relabelling not replay
      • specloop: complete task 6.1
      • Merge current PR base 5b66c89764709d60e06ce0a098c15c58fac1f967
      • specloop: task 1.1 After #21 has landed, add source-aware `negate-condition` candidate generation and the shared Python analysis needed for it in `specloop/evidence.py`, preserving the `generate` inte
      • specloop: task 1.2 Extend the generation helpers in `specloop/evidence.py` with `drop-return`: a last return directly in an `if`/`elif`/`else` branch whose owning `if` has a following statement in its
      • specloop: task 1.3 Add `test_gate_measures_a_guard_clause_change` in `tests/test_specloop_evidence.py` with real base/head commits adding only the two guard lines, real generation and dispatch, and a
    • Merged PR
      Spec: De-flake test_parallel_mutants_respect_time_box under load
    • Pushed
      specloop: archive nightshift-issue-49-de-flake-test-parallel-mutants-respect-t into openspec/specs
      45 commits
      • specloop: archive nightshift-issue-49-de-flake-test-parallel-mutants-respect-t into openspec/specs
      • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 2)
      • specloop: task 1.1 Add the bounded source-origin fetch helper in `specloop/loop.py`, with local-path resolution, explicit base refspec, diagnostic handling and no source mutations; add local bare-orig
      • specloop: complete task 1.1
      • specloop: task 1.2 Add disposable clean/conflicting merge construction in `specloop/loop.py` using harness identity and two-parent history, plus additive `base_sync` intent loading in `specloop/state.
      • specloop: complete task 1.2
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.3
      • specloop: task 2.1 Build the driver-only `loop.prepare_publish` gate from the fetch/merge helpers, persist intent before compare-and-swap advancement, invoke the existing trusted verifier and retain a
      • specloop: complete task 2.1
      • specloop: task 2.2 Reconcile interrupted integration and verification in the driver gate, bind successful receipts to head, and handle repaired descendants; add restart/failure-injection tests in new
      • specloop: complete task 2.2
      • specloop: task 3.1 Wire the gate before final checks in `loop.finals`, reload head and retain the unchanged-base fast path; extend new readiness tests and adjust only existing fixture setup that now n
      • specloop: complete task 3.1
      • specloop: task 3.2 Wire `cli._publish` after `_remote` to fetch once with a 20-second timeout and use a read-only ancestry/obligation predicate. If preparation is needed, atomically save running statu
      • specloop: complete task 3.2
      • specloop: task 3.3 Add local publication fixtures and handoff/restart regressions in new `tests/test_specloop_base_publication.py`, driving unchanged `publish_pending` through real CLI status/publish
      • specloop: complete task 3.3
      • specloop: task 3.4 Extend new publication integration tests for repeated base advancement and push failure followed by another advance. Verify each publish only fetches and schedules, each preparation
      • specloop: complete task 3.4
      • specloop: task 3.5 Implement retryable fetch-failure handling in `_publish` and add timeout/failure and CLI format regressions in the new test files, asserting the 20-second fetch budget without waiti
      • specloop: complete task 3.5
      • specloop: task 3.6 Add receipt-recovery regressions in `tests/test_specloop_base_publication.py` for a lost stable publish response and comment failure before/after delivery, using the fixtures from 3
      • specloop: complete task 3.6
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 3.7 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.7
      • specloop: task 4.1 Add the section comparison-baseline helper and wire only the `evidence.gather` call boundary in `specloop/loop.py`, reusing disposable merge construction without changing run refs o
      • specloop: complete task 4.1
      • Fix main: drop a prose annotation inside a touchpoints docstring
      • Merge pull request #63 from mattpolicastro/chore/drop-prose-annotation
      • specloop: task 4.2 Complete persisted-baseline/revision and comparison-conflict handling with tests in `tests/test_specloop_base_evidence.py`; run the focused new files and `uv run pytest`, resolving
      • specloop: complete task 4.2
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 4.3 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 4.3
      • specloop: merge current main into the run before merging (manual; #46 automates this once landed)
      • specloop: drop prose equivalence markers that #21 now forbids
      • specloop: merge current main into the run (manual): brings PR #63's fix
      • specloop: task 1.1 After #21 lands, update and validate only `test_parallel_mutants_respect_time_box` and its decorators in `tests/test_specloop_evidence.py` in this same implementation session: add t
      • specloop: archive nightshift-issue-46-before-publishing-merge-the-current-base into openspec/specs
      • Merge pull request #59 from mattpolicastro/spec/nightshift-issue-46-before-publishing-merge-the-current-base
      • Merge current PR base 1dc8d8965ff6f50620a6363be6a1db1b9b5cc258
    • Merged PR
      Spec: Before publishing, merge the current base and verify again
    • Pushed
      specloop: archive nightshift-issue-46-before-publishing-merge-the-current-base into openspec/specs
      96 commits
      • specloop: archive nightshift-issue-46-before-publishing-merge-the-current-base into openspec/specs
      • Draft OpenSpec change nightshift-issue-5-check-who-applied-a-front-door-label (specloop propose, round 1)
      • specloop: task 1.1 After #12, extract `_latest_label_events` in `nightshift/specloop_intake.py`, retaining ID-only `_label_events` and `_approval_event` interfaces. Add pagination, reapplication, unla
      • specloop: complete task 1.1
      • specloop: task 1.2 Implement `_label_actor_association` and membership HTTP-status parsing in `nightshift/specloop_intake.py`; add real-trust tests in the new authorization test file for personal owne
      • specloop: complete task 1.2
      • specloop: task 2.1 Implement `_authorize_label_events` and `_comment_label_rejection` in `nightshift/specloop_intake.py`, preserving labels and using event-scoped markers without repeat PATCH requests
      • specloop: complete task 2.1
      • Draft OpenSpec change nightshift-issue-21-mutation-testing-skip-cosmetic-literals (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-50-touchpoint-report-count-human-interventi (specloop propose, round 2)
      • specloop: task 1.1 Add standard-library discovery and record normalization in `nightshift/touchpoints.py`, with temporary-directory tests in the new `tests/test_touchpoints.py` for numeric receipts, r
      • specloop: task 1.2 Add intake aggregation and receipt/job deduplication in `nightshift/touchpoints.py`, plus tests in `tests/test_touchpoints.py` for each outcome, repeated independent jobs, stripped
      • specloop: task 2.1 Add event replay, build-revision commit deduplication, pause/resume reason attribution and human-accept counting in `nightshift/touchpoints.py`; add and finish `test_touchpoints_cou
      • specloop: task 2.2 Complete scheduled-pause classification, per-task infra recovery accounting that survives manual resumes, unknown reason warnings and broken-log attribution in `nightshift/touchpoin
      • specloop: merge current main into the run (manual, ahead of #46): brings in #8's background-test rewrite
      • specloop: complete task 2.2
      • specloop: task 1.1 Add and validate `Manifest.mutation_skip` in `specloop/manifest.py`, apply literal whole-line exclusions before sampling in `specloop/evidence.py`, and add `tests/test_mutation_skip
      • specloop: task 2.2 Gate initial and rearmed drafting in `propose_pending` after blocker checks and before receipt creation or dispatch. Add the draft/ready-alias cases of `test_label_from_non_collabor
      • specloop: task 2.1 Load candidate files from committed `head` in `gather`, pass complete source to `generate`, and add Python AST/token span filtering in `specloop/evidence.py`. Move Python comment-pr
      • specloop: task 2.3 Gate proposal receipt and open-PR recovery delivery without introducing blocker lookups on recovery paths. Add tests in the new recovery file for legacy receipts, an unauthorized re
      • specloop: task 2.2 Preserve today's non-Python comment-prefix exclusions in `specloop/evidence.py` and add only line-level `/* ... */` tracking for blocks whose opening and closing lines are comment-o
      • Draft OpenSpec change nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t (specloop propose, round 1)
      • specloop: complete task 2.3
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.3 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 3.1 Gate `admit_pending` before `_approval_covers_head`, preserving integer event IDs and existing admission recovery. Extend the two required tests with admission cases, and add stale-
      • specloop: complete task 3.1
      • specloop: task 3.1 Implement `collect_report` date provenance, inclusive UTC selection, row/aggregate totals and deterministic version-1 document fields in `nightshift/touchpoints.py`; add `test_touch
      • specloop: descope the JSX style filter (task 3.1)
      • specloop: task 1.1 Add the checklist prompt and `check` interface in new `specloop/critic.py`, reusing `feasibility.SCHEMA`, the existing read-call conventions, effective change name, extracted candid
      • specloop: task 3.2 Implement `render_table`, argparse `main`, module execution, JSON-only stdout, zero-history output and exit codes in `nightshift/touchpoints.py`; add CLI and subprocess smoke tests
      • specloop: task 1.2 Add the injectable, bounded `open_pr_files` lookup and deterministic context rendering in `specloop/critic.py`, including pagination, host selection, own-PR exclusion, rename paths,
      • specloop: complete task 3.2
      • specloop: task 1.3 Integrate the critic after successful feasibility in `specloop/propose.py`, lazily collect and reuse concurrent context, feed all blocking fields into one correction within `rounds`
      • specloop: complete task 1.3
      • specloop: task 1.4 Extend `tests/test_specloop_critic_propose.py` with the bounded correction and failure matrix, and fix any corresponding orchestration defects only in `specloop/propose.py` or `spec
      • specloop: complete task 1.4
      • specloop: task 2.1 Add `test_critic_notes_reach_the_pr_body` in new `tests/test_specloop_critic_delivery.py`, exercising actual proposal/CLI serialization and the unchanged intake delivery path with f
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 3.3 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.3
      • specloop: archive nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t into openspec/specs
      • specloop: task 3.2 Gate `revise_pending` before feedback/status reads, dispatch, and recovery delivery. Extend the two required tests across spec/build revision, including unauthorized empty feedback,
      • Merge pull request #57 from mattpolicastro/spec/nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t
      • Draft OpenSpec change nightshift-issue-58-in-flight-file-map-parse-file-py-functio (specloop propose, round 1)
      • specloop: merge current main into the run (manual, ahead of #46): brings in #8 for task 4.1
      • specloop: task 1.1 Update `paths()` in `specloop/propose.py` to normalize single-colon identifier suffixes while preserving existing double-colon, punctuation, prefix-exclusion, wildcard, and deduplic
      • specloop: archive nightshift-issue-5-check-who-applied-a-front-door-label into openspec/specs
      • Merge pull request #42 from mattpolicastro/spec/nightshift-issue-5-check-who-applied-a-front-door-label
      • specloop: task 4.1 Complete record/directory failure isolation and source-location diagnostics in `nightshift/touchpoints.py`; add `test_unreadable_records_are_reported_not_fatal` and compatibility te
      • specloop: task 1.2 Extend `paths(text, root=None)` and wire the resolved source root from `in_flight()` in `specloop/propose.py`. In `tests/test_specloop_in_flight_paths.py`, add `test_root_level_file
      • specloop: complete task 4.1
      • specloop: task 4.1 After #8 has merged (an admission prerequisite), remove prose-only annotations in `nightshift/specloop_job.py`, `nightshift/specloop_client.py`, `specloop/state.py`, and `specloop/e
      • specloop: archive nightshift-issue-58-in-flight-file-map-parse-file-py-functio into openspec/specs
      • Merge pull request #60 from mattpolicastro/spec/nightshift-issue-58-in-flight-file-map-parse-file-py-functio
      • specloop: task 4.2 Add read-only/offline invariant assertions in `tests/test_touchpoints.py` around file bytes and directory contents, forbid external calls, and exercise both output modes; run `uv ru
      • specloop: complete task 4.2
      • Spec critic: block on unplanned migrations, retry gaps and stale operator docs
      • specloop: task 5.1 Change `Evidence.unmeasured` and equivalent-aware `Evidence.summary` in `specloop/evidence.py`. Add `tests/test_mutation_measurement.py` with `test_equivalent_and_timeout_only_evide
      • specloop: complete task 5.1
      • Merge pull request #62 from mattpolicastro/fix/critic-blocking-classes
      • specloop: task 5.2 Extend `tests/test_mutation_measurement.py` with host-independent `gather` and `section_evidence` integration tests for filtered selection at concurrency 1 and 2, prepared/unprepare
      • specloop: complete task 5.2
      • specloop: archive nightshift-issue-50-touchpoint-report-count-human-interventi into openspec/specs
      • specloop: archive nightshift-issue-21-mutation-testing-skip-cosmetic-literals into openspec/specs
      • Merge pull request #53 from mattpolicastro/spec/nightshift-issue-50-touchpoint-report-count-human-interventi
      • Merge pull request #48 from mattpolicastro/spec/nightshift-issue-21-mutation-testing-skip-cosmetic-literals
      • Fix main: drop a prose annotation inside a touchpoints docstring
      • Merge pull request #63 from mattpolicastro/chore/drop-prose-annotation
      • specloop: merge current main into the run before merging (manual; #46 automates this once landed)
      • specloop: drop prose equivalence markers that #21 now forbids
      • specloop: task 1.1 Add the bounded source-origin fetch helper in `specloop/loop.py`, with local-path resolution, explicit base refspec, diagnostic handling and no source mutations; add local bare-orig
      • specloop: task 1.2 Add disposable clean/conflicting merge construction in `specloop/loop.py` using harness identity and two-parent history, plus additive `base_sync` intent loading in `specloop/state.
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.3 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 2.1 Build the driver-only `loop.prepare_publish` gate from the fetch/merge helpers, persist intent before compare-and-swap advancement, invoke the existing trusted verifier and retain a
      • specloop: task 2.2 Reconcile interrupted integration and verification in the driver gate, bind successful receipts to head, and handle repaired descendants; add restart/failure-injection tests in new
      • specloop: task 3.1 Wire the gate before final checks in `loop.finals`, reload head and retain the unchanged-base fast path; extend new readiness tests and adjust only existing fixture setup that now n
      • specloop: task 3.2 Wire `cli._publish` after `_remote` to fetch once with a 20-second timeout and use a read-only ancestry/obligation predicate. If preparation is needed, atomically save running statu
      • specloop: task 3.3 Add local publication fixtures and handoff/restart regressions in new `tests/test_specloop_base_publication.py`, driving unchanged `publish_pending` through real CLI status/publish
      • specloop: task 3.4 Extend new publication integration tests for repeated base advancement and push failure followed by another advance. Verify each publish only fetches and schedules, each preparation
      • specloop: complete task 3.4
      • specloop: task 3.5 Implement retryable fetch-failure handling in `_publish` and add timeout/failure and CLI format regressions in the new test files, asserting the 20-second fetch budget without waiti
      • specloop: complete task 3.5
      • specloop: task 3.6 Add receipt-recovery regressions in `tests/test_specloop_base_publication.py` for a lost stable publish response and comment failure before/after delivery, using the fixtures from 3
      • specloop: complete task 3.6
      • specloop: task 3.7 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.7
      • specloop: task 4.1 Add the section comparison-baseline helper and wire only the `evidence.gather` call boundary in `specloop/loop.py`, reusing disposable merge construction without changing run refs o
      • specloop: task 4.2 Complete persisted-baseline/revision and comparison-conflict handling with tests in `tests/test_specloop_base_evidence.py`; run the focused new files and `uv run pytest`, resolving
      • specloop: strengthen section 4 after its evidence check
      • specloop: task 4.3 Strengthen the tests so each of these single-line mutations of code added in section 4 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 4.3
      • Draft OpenSpec change nightshift-issue-33-mutation-operators-negate-bare-condition (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-33-mutation-operators-negate-bare-condition (specloop propose, round 2)
      • Draft OpenSpec change nightshift-issue-49-de-flake-test-parallel-mutants-respect-t (specloop propose, round 1)
    • Merged PR
      Fix main: drop a prose annotation inside a touchpoints docstring
    • Merged PR
      Spec: Mutation testing: skip cosmetic literals in UI code
    • Pushed
      Draft OpenSpec change nightshift-issue-50-touchpoint-report-count-human-interventi (specloop propose, round 2)
      25 commits
      • Draft OpenSpec change nightshift-issue-50-touchpoint-report-count-human-interventi (specloop propose, round 2)
      • specloop: task 1.1 Add standard-library discovery and record normalization in `nightshift/touchpoints.py`, with temporary-directory tests in the new `tests/test_touchpoints.py` for numeric receipts, r
      • specloop: complete task 1.1
      • specloop: task 1.2 Add intake aggregation and receipt/job deduplication in `nightshift/touchpoints.py`, plus tests in `tests/test_touchpoints.py` for each outcome, repeated independent jobs, stripped
      • specloop: complete task 1.2
      • specloop: task 2.1 Add event replay, build-revision commit deduplication, pause/resume reason attribution and human-accept counting in `nightshift/touchpoints.py`; add and finish `test_touchpoints_cou
      • specloop: complete task 2.1
      • specloop: task 2.2 Complete scheduled-pause classification, per-task infra recovery accounting that survives manual resumes, unknown reason warnings and broken-log attribution in `nightshift/touchpoin
      • specloop: complete task 2.2
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.3 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.3
      • specloop: task 3.1 Implement `collect_report` date provenance, inclusive UTC selection, row/aggregate totals and deterministic version-1 document fields in `nightshift/touchpoints.py`; add `test_touch
      • specloop: complete task 3.1
      • specloop: task 3.2 Implement `render_table`, argparse `main`, module execution, JSON-only stdout, zero-history output and exit codes in `nightshift/touchpoints.py`; add CLI and subprocess smoke tests
      • specloop: complete task 3.2
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 3.3 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.3
      • specloop: task 4.1 Complete record/directory failure isolation and source-location diagnostics in `nightshift/touchpoints.py`; add `test_unreadable_records_are_reported_not_fatal` and compatibility te
      • specloop: complete task 4.1
      • specloop: task 4.2 Add read-only/offline invariant assertions in `tests/test_touchpoints.py` around file bytes and directory contents, forbid external calls, and exercise both output modes; run `uv ru
      • specloop: complete task 4.2
      • specloop: archive nightshift-issue-50-touchpoint-report-count-human-interventi into openspec/specs
      • Merge pull request #53 from mattpolicastro/spec/nightshift-issue-50-touchpoint-report-count-human-interventi
    • Merged PR
      Spec: Touchpoint report: count human interventions per change
    • Pushed
      specloop: archive nightshift-issue-21-mutation-testing-skip-cosmetic-literals into openspec/specs
      72 commits
      • specloop: archive nightshift-issue-21-mutation-testing-skip-cosmetic-literals into openspec/specs
      • Draft OpenSpec change nightshift-issue-8-kill-switch-should-stop-running-backgrou (specloop propose, round 1)
      • specloop: task 1.1 Add atomic process identity metadata at wrapper startup and `list_jobs(state_dir)` in `nightshift/specloop_job.py`; test restart discovery, stable ordering, all three stage director
      • specloop: complete task 1.1
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.2
      • specloop: task 2.1 Add per-job control locking, durable stop intent, and serialized wrapper finalization/result collection in `nightshift/specloop_job.py`. Make cancelled collection retain its parent
      • specloop: complete task 2.1
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.2
      • specloop: task 3.1 Implement exact-ID resolution, ownership verification and `stop_job(state_dir, job_id)` in `nightshift/specloop_job.py`, using the landed stop-state protocol. Add `test_jobs_stop_te
      • specloop: complete task 3.1
      • specloop: task 3.2 Add the 5 second SIGTERM grace period, SIGKILL escalation, 1 second exit confirmation and error reporting. Test an ignoring descendant, repeated stop, permission errors, unconfirmed
      • specloop: complete task 3.2
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 3.3 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.3
      • specloop: task 4.1 Extend `nightshift/cli.py` with jobs listing and stop dispatch before configuration loading. Add CLI tests for readable fields, missing/broken config, offline operation, exit codes,
      • specloop: complete task 4.1
      • Draft OpenSpec change nightshift-issue-14-specloop-cli-polish (specloop propose, round 1)
      • specloop: task 5.1 Audit and, where missing, enforce pause checks in `nightshift/daemon.py` before launch and each external delivery operation. Extend `tests/test_specloop_background.py` with `test_pa
      • specloop: complete task 5.1
      • specloop: task 5.2 Add restart/resume and cancellation integration regressions in `tests/test_specloop_background.py`: unstopped results deliver once, stopped attempts stay held across resume, and com
      • specloop: complete task 5.2
      • specloop: task 6.1 Update README usage, kill-switch and daemon-unload guidance with list/stop examples, the termination deadlines, legacy identity limitations, stopped-job holds, and the independent s
      • specloop: complete task 6.1
      • specloop: append review round 1
      • specloop: merge current main into the run before publishing (manual, ahead of #46)
      • specloop: task 7.1 Address review feedback 1: "**mattpolicastro:**\n\nHosted CI fails 8 tests in `tests/test_specloop_background.py`: `test_cancelled_jobs_remain_pending_after_restart_and_resume[*-pro
      • specloop: complete task 7.1
      • specloop: task 7.2 Address review feedback 2: "**mattpolicastro:**\n\nClarification on the comment above: you can't merge `main` from the build sandbox, and you don't need to. Write an `idea-<hex>.txt
      • specloop: task 1.1 Add known-ID filtering in `specloop/tasks.py` and apply it to section evidence and scenario context in `specloop/loop.py`, using scenarios from the evaluated revision while preservi
      • specloop: complete task 7.2
      • specloop: task 2.1 Update recipe rendering in `specloop/loop.py` and `specloop/feasibility.py` to show labeled prepare and verify groups, ordered and expanded commands with shell-safe quoting and expe
      • Parallel tests: add pytest-xdist; make the scenario plugin work under it
      • specloop: strengthen section 7 after its evidence check
      • Merge pull request #54 from mattpolicastro/feat/parallel-tests
      • specloop: task 7.3 Strengthen the tests so each of these single-line mutations of code added in section 7 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • Implementer: a sandbox-only check failure is not a block
      • specloop: complete task 7.3
      • specloop: task 3.1 Add narrowly scoped JSON-aware parser error handling in `specloop/cli.py`, including subparsers and default process argv, returning one version-1 error document with exit status 2 b
      • Merge pull request #55 from mattpolicastro/fix/implementer-sandbox-failures
      • specloop: adapt #31's section-evidence tests to #14's scenario lookup
      • specloop: archive nightshift-issue-14-specloop-cli-polish into openspec/specs
      • Merge pull request #45 from mattpolicastro/spec/nightshift-issue-14-specloop-cli-polish
      • specloop: archive nightshift-issue-8-kill-switch-should-stop-running-backgrou into openspec/specs
      • Merge pull request #28 from mattpolicastro/spec/nightshift-issue-8-kill-switch-should-stop-running-backgrou
      • specloop: task 1.1 Add and validate `Manifest.mutation_skip` in `specloop/manifest.py`, apply literal whole-line exclusions before sampling in `specloop/evidence.py`, and add `tests/test_mutation_skip
      • specloop: task 2.1 Load candidate files from committed `head` in `gather`, pass complete source to `generate`, and add Python AST/token span filtering in `specloop/evidence.py`. Move Python comment-pr
      • specloop: task 2.2 Preserve today's non-Python comment-prefix exclusions in `specloop/evidence.py` and add only line-level `/* ... */` tracking for blocks whose opening and closing lines are comment-o
      • Draft OpenSpec change nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t (specloop propose, round 1)
      • specloop: task 2.3 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.3
      • specloop: descope the JSX style filter (task 3.1)
      • specloop: task 1.1 Add the checklist prompt and `check` interface in new `specloop/critic.py`, reusing `feasibility.SCHEMA`, the existing read-call conventions, effective change name, extracted candid
      • specloop: task 1.2 Add the injectable, bounded `open_pr_files` lookup and deterministic context rendering in `specloop/critic.py`, including pagination, host selection, own-PR exclusion, rename paths,
      • specloop: task 1.3 Integrate the critic after successful feasibility in `specloop/propose.py`, lazily collect and reuse concurrent context, feed all blocking fields into one correction within `rounds`
      • specloop: complete task 1.3
      • specloop: task 1.4 Extend `tests/test_specloop_critic_propose.py` with the bounded correction and failure matrix, and fix any corresponding orchestration defects only in `specloop/propose.py` or `spec
      • specloop: complete task 1.4
      • specloop: task 2.1 Add `test_critic_notes_reach_the_pr_body` in new `tests/test_specloop_critic_delivery.py`, exercising actual proposal/CLI serialization and the unchanged intake delivery path with f
      • specloop: archive nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t into openspec/specs
      • Merge pull request #57 from mattpolicastro/spec/nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t
      • specloop: merge current main into the run (manual, ahead of #46): brings in #8 for task 4.1
      • specloop: task 4.1 After #8 has merged (an admission prerequisite), remove prose-only annotations in `nightshift/specloop_job.py`, `nightshift/specloop_client.py`, `specloop/state.py`, and `specloop/e
      • specloop: task 5.1 Change `Evidence.unmeasured` and equivalent-aware `Evidence.summary` in `specloop/evidence.py`. Add `tests/test_mutation_measurement.py` with `test_equivalent_and_timeout_only_evide
      • specloop: task 5.2 Extend `tests/test_mutation_measurement.py` with host-independent `gather` and `section_evidence` integration tests for filtered selection at concurrency 1 and 2, prepared/unprepare
      • specloop: archive nightshift-issue-50-touchpoint-report-count-human-interventi into openspec/specs
      • Spec critic: block on unplanned migrations, retry gaps and stale operator docs
      • Merge pull request #62 from mattpolicastro/fix/critic-blocking-classes
    • Merged PR
      Spec critic: block on unplanned migrations, retry gaps and stale operator docs
    • Pushed
      Draft OpenSpec change nightshift-issue-6-revision-feedback-include-comments-poste (specloop propose, round 1)
      8 commits
      • Draft OpenSpec change nightshift-issue-6-revision-feedback-include-comments-poste (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-58-in-flight-file-map-parse-file-py-functio (specloop propose, round 1)
      • specloop: task 1.1 Update `paths()` in `specloop/propose.py` to normalize single-colon identifier suffixes while preserving existing double-colon, punctuation, prefix-exclusion, wildcard, and deduplic
      • specloop: complete task 1.1
      • specloop: task 1.2 Extend `paths(text, root=None)` and wire the resolved source root from `in_flight()` in `specloop/propose.py`. In `tests/test_specloop_in_flight_paths.py`, add `test_root_level_file
      • specloop: complete task 1.2
      • specloop: archive nightshift-issue-58-in-flight-file-map-parse-file-py-functio into openspec/specs
      • Merge pull request #60 from mattpolicastro/spec/nightshift-issue-58-in-flight-file-map-parse-file-py-functio
    • Merged PR
      Spec: In-flight file map: parse file.py:function and root-level files
    • Pushed
      specloop: archive nightshift-issue-58-in-flight-file-map-parse-file-py-functio into openspec/specs
      21 commits
      • specloop: archive nightshift-issue-58-in-flight-file-map-parse-file-py-functio into openspec/specs
      • specloop: task 1.1 Update `paths()` in `specloop/propose.py` to normalize single-colon identifier suffixes while preserving existing double-colon, punctuation, prefix-exclusion, wildcard, and deduplic
      • specloop: complete task 1.1
      • specloop: task 1.2 Extend `paths(text, root=None)` and wire the resolved source root from `in_flight()` in `specloop/propose.py`. In `tests/test_specloop_in_flight_paths.py`, add `test_root_level_file
      • specloop: complete task 1.2
      • Draft OpenSpec change nightshift-issue-5-check-who-applied-a-front-door-label (specloop propose, round 1)
      • specloop: task 1.1 After #12, extract `_latest_label_events` in `nightshift/specloop_intake.py`, retaining ID-only `_label_events` and `_approval_event` interfaces. Add pagination, reapplication, unla
      • specloop: task 1.2 Implement `_label_actor_association` and membership HTTP-status parsing in `nightshift/specloop_intake.py`; add real-trust tests in the new authorization test file for personal owne
      • specloop: task 2.1 Implement `_authorize_label_events` and `_comment_label_rejection` in `nightshift/specloop_intake.py`, preserving labels and using event-scoped markers without repeat PATCH requests
      • specloop: complete task 2.1
      • specloop: merge current main into the run (manual, ahead of #46): brings in #8's background-test rewrite
      • specloop: task 2.2 Gate initial and rearmed drafting in `propose_pending` after blocker checks and before receipt creation or dispatch. Add the draft/ready-alias cases of `test_label_from_non_collabor
      • specloop: complete task 2.2
      • specloop: task 2.3 Gate proposal receipt and open-PR recovery delivery without introducing blocker lookups on recovery paths. Add tests in the new recovery file for legacy receipts, an unauthorized re
      • specloop: complete task 2.3
      • specloop: task 3.1 Gate `admit_pending` before `_approval_covers_head`, preserving integer event IDs and existing admission recovery. Extend the two required tests with admission cases, and add stale-
      • specloop: complete task 3.1
      • specloop: task 3.2 Gate `revise_pending` before feedback/status reads, dispatch, and recovery delivery. Extend the two required tests across spec/build revision, including unauthorized empty feedback,
      • specloop: complete task 3.2
      • specloop: archive nightshift-issue-5-check-who-applied-a-front-door-label into openspec/specs
      • Merge pull request #42 from mattpolicastro/spec/nightshift-issue-5-check-who-applied-a-front-door-label
    • Merged PR
      Spec: Check who applied a front-door label
    • Merged PR
      Spec: Spec critic: a pre-PR review pass using the reviewer's checklist
    • Pushed
      specloop: archive nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t into openspec/specs
      50 commits
      • specloop: archive nightshift-issue-51-spec-critic-a-pre-pr-review-pass-using-t into openspec/specs
      • specloop: task 1.1 Add the checklist prompt and `check` interface in new `specloop/critic.py`, reusing `feasibility.SCHEMA`, the existing read-call conventions, effective change name, extracted candid
      • specloop: complete task 1.1
      • specloop: task 1.2 Add the injectable, bounded `open_pr_files` lookup and deterministic context rendering in `specloop/critic.py`, including pagination, host selection, own-PR exclusion, rename paths,
      • specloop: complete task 1.2
      • specloop: task 1.3 Integrate the critic after successful feasibility in `specloop/propose.py`, lazily collect and reuse concurrent context, feed all blocking fields into one correction within `rounds`
      • specloop: complete task 1.3
      • specloop: task 1.4 Extend `tests/test_specloop_critic_propose.py` with the bounded correction and failure matrix, and fix any corresponding orchestration defects only in `specloop/propose.py` or `spec
      • specloop: complete task 1.4
      • specloop: task 2.1 Add `test_critic_notes_reach_the_pr_body` in new `tests/test_specloop_critic_delivery.py`, exercising actual proposal/CLI serialization and the unchanged intake delivery path with f
      • specloop: complete task 2.1
      • Draft OpenSpec change nightshift-issue-46-before-publishing-merge-the-current-base (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-8-kill-switch-should-stop-running-backgrou (specloop propose, round 1)
      • specloop: task 1.1 Add atomic process identity metadata at wrapper startup and `list_jobs(state_dir)` in `nightshift/specloop_job.py`; test restart discovery, stable ordering, all three stage director
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: task 2.1 Add per-job control locking, durable stop intent, and serialized wrapper finalization/result collection in `nightshift/specloop_job.py`. Make cancelled collection retain its parent
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.2
      • specloop: task 3.1 Implement exact-ID resolution, ownership verification and `stop_job(state_dir, job_id)` in `nightshift/specloop_job.py`, using the landed stop-state protocol. Add `test_jobs_stop_te
      • specloop: complete task 3.1
      • specloop: task 3.2 Add the 5 second SIGTERM grace period, SIGKILL escalation, 1 second exit confirmation and error reporting. Test an ignoring descendant, repeated stop, permission errors, unconfirmed
      • specloop: complete task 3.2
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 3.3 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.3
      • specloop: task 4.1 Extend `nightshift/cli.py` with jobs listing and stop dispatch before configuration loading. Add CLI tests for readable fields, missing/broken config, offline operation, exit codes,
      • specloop: complete task 4.1
      • specloop: task 5.1 Audit and, where missing, enforce pause checks in `nightshift/daemon.py` before launch and each external delivery operation. Extend `tests/test_specloop_background.py` with `test_pa
      • specloop: complete task 5.1
      • specloop: task 5.2 Add restart/resume and cancellation integration regressions in `tests/test_specloop_background.py`: unstopped results deliver once, stopped attempts stay held across resume, and com
      • specloop: complete task 5.2
      • specloop: task 6.1 Update README usage, kill-switch and daemon-unload guidance with list/stop examples, the termination deadlines, legacy identity limitations, stopped-job holds, and the independent s
      • specloop: complete task 6.1
      • specloop: append review round 1
      • specloop: merge current main into the run before publishing (manual, ahead of #46)
      • specloop: task 7.1 Address review feedback 1: "**mattpolicastro:**\n\nHosted CI fails 8 tests in `tests/test_specloop_background.py`: `test_cancelled_jobs_remain_pending_after_restart_and_resume[*-pro
      • specloop: complete task 7.1
      • specloop: task 7.2 Address review feedback 2: "**mattpolicastro:**\n\nClarification on the comment above: you can't merge `main` from the build sandbox, and you don't need to. Write an `idea-<hex>.txt
      • specloop: complete task 7.2
      • specloop: strengthen section 7 after its evidence check
      • specloop: task 7.3 Strengthen the tests so each of these single-line mutations of code added in section 7 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 7.3
      • specloop: archive nightshift-issue-8-kill-switch-should-stop-running-backgrou into openspec/specs
      • Merge pull request #28 from mattpolicastro/spec/nightshift-issue-8-kill-switch-should-stop-running-backgrou
      • specloop: archive nightshift-issue-14-specloop-cli-polish into openspec/specs
      • specloop: task 1.1 Add known-ID filtering in `specloop/tasks.py` and apply it to section evidence and scenario context in `specloop/loop.py`, using scenarios from the evaluated revision while preservi
      • specloop: task 2.1 Update recipe rendering in `specloop/loop.py` and `specloop/feasibility.py` to show labeled prepare and verify groups, ordered and expanded commands with shell-safe quoting and expe
      • specloop: task 3.1 Add narrowly scoped JSON-aware parser error handling in `specloop/cli.py`, including subparsers and default process argv, returning one version-1 error document with exit status 2 b
    • Pushed
      Plaits Lab SDK: link live-audition wasm with em++
      9 commits
      • Plaits Lab SDK: link live-audition wasm with em++
      • Plaits Lab SDK: live Plucked strikes report TRIG patched
      • Plaits Lab SDK: find em++ on PATH so Windows uses em++.bat
      • Plaits Lab SDK: expect 98 catalog models in the stereo audit test
      • Plaits Lab SDK: a single-engine VCV Rack 2 test bench
      • Merge upstream master: Lyle's merged SDK audition fixes
      • Merge sdk-vcv-test-bench: the single-engine VCV Rack test bench offered upstream
      • Phreak v2: seven telephone tone systems, a modem table and a line control
      • Worklog and the VCV test bench's OpenSpec change
    • Pushed
      Implementer: a sandbox-only check failure is not a block
      11 commits
      • Implementer: a sandbox-only check failure is not a block
      • Merge pull request #55 from mattpolicastro/fix/implementer-sandbox-failures
      • Draft OpenSpec change nightshift-issue-31-evidence-track-mutant-timeouts-separatel (specloop propose, round 1)
      • specloop: task 1.1 In `specloop/evidence.py`, retain the first non-passing receipt in `_mutate_one`, apply invalid-step precedence, and return/document `timeout` for selected test receipts with null e
      • specloop: complete task 1.1
      • specloop: task 1.2 In `specloop/evidence.py`, align the summary's caught fraction with the existing score filter, add the exact nonzero timeout-count line, and correct unmeasured wording while preserv
      • specloop: complete task 1.2
      • specloop: task 1.3 Add only the integer `timeouts` argument at the existing evidence-event call in `specloop/loop.py:section_evidence`. Add new event and reviewer-context tests in `tests/test_specloop
      • specloop: complete task 1.3
      • specloop: archive nightshift-issue-31-evidence-track-mutant-timeouts-separatel into openspec/specs
      • Merge pull request #44 from mattpolicastro/spec/nightshift-issue-31-evidence-track-mutant-timeouts-separatel
    • Merged PR
      Spec: Evidence: track mutant timeouts separately from kills
    • Merged PR
      Spec: Factory page: a styled UI pass
    • Pushed
      specloop: archive nightshift-issue-31-evidence-track-mutant-timeouts-separatel into openspec/specs
      16 commits
      • specloop: archive nightshift-issue-31-evidence-track-mutant-timeouts-separatel into openspec/specs
      • specloop: archive nightshift-issue-39-factory-page-a-styled-ui-pass into openspec/specs
      • specloop: task 1.1 In `specloop/evidence.py`, retain the first non-passing receipt in `_mutate_one`, apply invalid-step precedence, and return/document `timeout` for selected test receipts with null e
      • specloop: complete task 1.1
      • specloop: task 1.2 In `specloop/evidence.py`, align the summary's caught fraction with the existing score filter, add the exact nonzero timeout-count line, and correct unmeasured wording while preserv
      • specloop: complete task 1.2
      • specloop: task 1.3 Add only the integer `timeouts` argument at the existing evidence-event call in `specloop/loop.py:section_evidence`. Add new event and reviewer-context tests in `tests/test_specloop
      • specloop: complete task 1.3
      • specloop: task 1.1 In `plugins/nightshift/client/factory.tsx`, add local token-based action styles, minimum 44-by-44 targets, and wrapping, selecting roles from the unchanged `factoryButtons` order wi
      • specloop: task 1.2 Reuse the landed button styles for Confirm and Cancel in `plugins/nightshift/client/factory.tsx`. Add rendered confirmation tests in `plugins/nightshift/tests/factory-style.test.ts`
      • specloop: task 2.1 In `plugins/nightshift/client/factory.tsx`, style the nested status chip and muted progress while retaining the exact combined Text content and direct-child change title. Add `statu
      • specloop: complete task 2.1
      • specloop: task 2.2 In `plugins/nightshift/client/factory.tsx`, place all currently available navigation items in one secondary wrapping row apart from actions and confirmations, preserving Details gat
      • specloop: complete task 2.2
      • specloop: task 3.1 Style Details, Finished and Refresh in `plugins/nightshift/client/factory.tsx`, retaining the tested disclosure spacing, tree relationships and text, and using a decorative non-text
      • specloop: complete task 3.1
    • Pushed
      specloop: task 1.1 Add atomic process identity metadata at wrapper startup and `list_jobs(state_dir)` in `nightshift/specloop_job.py`; test restart discovery, stable ordering, all three stage director
      32 commits
      • specloop: task 1.1 Add atomic process identity metadata at wrapper startup and `list_jobs(state_dir)` in `nightshift/specloop_job.py`; test restart discovery, stable ordering, all three stage director
      • specloop: complete task 1.1
      • specloop: strengthen section 1 after its evidence check
      • specloop: task 1.2 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 1.2
      • specloop: task 2.1 Add per-job control locking, durable stop intent, and serialized wrapper finalization/result collection in `nightshift/specloop_job.py`. Make cancelled collection retain its parent
      • specloop: complete task 2.1
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.2
      • specloop: task 3.1 Implement exact-ID resolution, ownership verification and `stop_job(state_dir, job_id)` in `nightshift/specloop_job.py`, using the landed stop-state protocol. Add `test_jobs_stop_te
      • specloop: complete task 3.1
      • specloop: task 3.2 Add the 5 second SIGTERM grace period, SIGKILL escalation, 1 second exit confirmation and error reporting. Test an ignoring descendant, repeated stop, permission errors, unconfirmed
      • specloop: complete task 3.2
      • specloop: strengthen section 3 after its evidence check
      • specloop: task 3.3 Strengthen the tests so each of these single-line mutations of code added in section 3 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 3.3
      • specloop: task 4.1 Extend `nightshift/cli.py` with jobs listing and stop dispatch before configuration loading. Add CLI tests for readable fields, missing/broken config, offline operation, exit codes,
      • specloop: complete task 4.1
      • specloop: task 5.1 Audit and, where missing, enforce pause checks in `nightshift/daemon.py` before launch and each external delivery operation. Extend `tests/test_specloop_background.py` with `test_pa
      • specloop: complete task 5.1
      • specloop: task 5.2 Add restart/resume and cancellation integration regressions in `tests/test_specloop_background.py`: unstopped results deliver once, stopped attempts stay held across resume, and com
      • specloop: complete task 5.2
      • specloop: task 6.1 Update README usage, kill-switch and daemon-unload guidance with list/stop examples, the termination deadlines, legacy identity limitations, stopped-job holds, and the independent s
      • specloop: complete task 6.1
      • Draft OpenSpec change nightshift-issue-10-one-unreadable-run-must-not-break-speclo (specloop propose, round 1)
      • specloop: task 1.1 Add opt-in `require_existing` loading to `Run` construction, `for_change`, and reload behavior in `specloop/state.py`; keep admission defaults and unknown-field compatibility. Add u
      • specloop: task 2.1 Extract per-run JSON construction and implement the exception boundary and compatible synthetic error row in `specloop/cli.py`, using strict state reads and preserving named-unknown
      • specloop: task 3.1 Add `test_status_after_partial_finish` in `tests/test_specloop_act.py` using a real local archive commit, a stubbed failing external push, and a second healthy run; check named/all-
      • specloop: task 3.2 Add mixed healthy/error document tests through the daemon client and attention parser in Python tests and through Factory's injected executor in `plugins/nightshift/tests/factory.te
      • specloop: archive nightshift-issue-10-one-unreadable-run-must-not-break-speclo into openspec/specs
      • Merge pull request #32 from mattpolicastro/spec/nightshift-issue-10-one-unreadable-run-must-not-break-speclo
    • Merged PR
      Spec: One unreadable run must not break `specloop status --json` for every repository
    • Pushed
      specloop: archive nightshift-issue-10-one-unreadable-run-must-not-break-speclo into openspec/specs
      3 commits
      • specloop: archive nightshift-issue-10-one-unreadable-run-must-not-break-speclo into openspec/specs
      • Drafter: the implementer never sees the in-flight list, so name files to avoid
      • Merge pull request #43 from mattpolicastro/fix/in-flight-name-files
    • Merged PR
      Drafter: the implementer never sees the in-flight list, so name files to avoid
    • Pushed
      Draft OpenSpec change nightshift-issue-5-check-who-applied-a-front-door-label (specloop propose, round 1)
      20 commits
      • Draft OpenSpec change nightshift-issue-5-check-who-applied-a-front-door-label (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-4-run-evidence-gate-mutants-in-parallel (specloop propose, round 1)
      • specloop: task 1.1 Add `Manifest.mutation_parallel` and strict positive-integer parsing in `specloop/manifest.py`, with default, invalid-type, explicit serial limit and template/load round-trip tests
      • specloop: complete task 1.1
      • specloop: task 2.1 Refactor `specloop/evidence.py` to use a private source and fresh build through `verify.run_extracted` for each mutant, initially retaining serial dispatch; keep the baseline immuta
      • specloop: complete task 2.1
      • specloop: task 2.2 Apply immutable baseline-derived timeout overrides to mutant prepare and verify steps in `specloop/evidence.py`; add exact-budget and real short subprocess timeout tests alongside t
      • specloop: complete task 2.2
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.3 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.3
      • specloop: task 3.1 Add bounded thread-pool dispatch and index-based collection in `specloop/evidence.py`; drain active workers before baseline cleanup and propagate unexpected errors. Add event-driven
      • specloop: complete task 3.1
      • specloop: task 3.2 Add `test_parallel_mutants_match_serial_results` and `test_parallel_mutants_respect_time_box` in `tests/test_specloop_evidence.py`, exercising the landed dispatcher with prepared/un
      • specloop: complete task 3.2
      • specloop: append review round 1
      • specloop: task 4.1 Address review feedback 1: "**mattpolicastro:**\n\nHosted CI fails 13 tests in `tests/test_specloop_evidence.py`, every one a prepared-mode (`[True]`) variant. For example, `test_fa
      • specloop: complete task 4.1
      • specloop: archive nightshift-issue-4-run-evidence-gate-mutants-in-parallel into openspec/specs
      • Merge pull request #27 from mattpolicastro/spec/nightshift-issue-4-run-evidence-gate-mutants-in-parallel
    • Merged PR
      Spec: Run evidence-gate mutants in parallel
    • Pushed
      Draft OpenSpec change nightshift-issue-12-pass-drafting-ideas-through-a-file-not-a (specloop propose, round 1)
      7 commits
      • Draft OpenSpec change nightshift-issue-12-pass-drafting-ideas-through-a-file-not-a (specloop propose, round 1)
      • specloop: task 1.1 Extend `_start` in `nightshift/specloop_intake.py` with the optional idea keyword and implement the unique UTF-8 payload file under the receipt's job directory; switch `propose_pend
      • specloop: complete task 1.1
      • specloop: task 2.1 Switch the spec-stage `revise_pending` call in `nightshift/specloop_intake.py` to the landed `_start` idea keyword. Update `tests/test_specloop_spec_revision.py` to read payload fil
      • specloop: complete task 2.1
      • specloop: archive nightshift-issue-12-pass-drafting-ideas-through-a-file-not-a into openspec/specs
      • Merge pull request #35 from mattpolicastro/spec/nightshift-issue-12-pass-drafting-ideas-through-a-file-not-a
    • Merged PR
      Spec: Pass drafting ideas through a file, not argv
    • Pushed
      specloop: archive nightshift-issue-12-pass-drafting-ideas-through-a-file-not-a into openspec/specs
      3 commits
      • specloop: archive nightshift-issue-12-pass-drafting-ideas-through-a-file-not-a into openspec/specs
      • Implementer: run results go in the summary, never in a repository file
      • Merge pull request #38 from mattpolicastro/fix/implementer-no-run-notes
    • Merged PR
      Implementer: run results go in the summary, never in a repository file
    • Pushed
      Draft OpenSpec change nightshift-issue-25-factory-page-fold-finished-runs-away (specloop propose, round 1)
      15 commits
      • Draft OpenSpec change nightshift-issue-25-factory-page-fold-finished-runs-away (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-25-factory-page-fold-finished-runs-away (specloop propose, round 2)
      • specloop: task 1.1 Add `groupFactoryRuns(runs: readonly FactoryRun[]): { active: FactoryRun[]; finished: FactoryRun[] }` in `plugins/nightshift/client/factory-model.ts`, leaving `orderFactoryRuns` unc
      • specloop: complete task 1.1
      • specloop: task 2.1 Use `groupFactoryRuns` in `plugins/nightshift/client/factory.tsx`, add the initially collapsed accessible Finished toggle, reuse FactoryRow for both groups, and update counts and th
      • specloop: complete task 2.1
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.2
      • specloop: task 3.1 Append additional action regression tests in `plugins/nightshift/tests/factory-view.test.ts` for both Finish and Abort, verifying no send before confirmation, post-action status tra
      • specloop: complete task 3.1
      • specloop: task 4.1 Append focused regression tests in `plugins/nightshift/tests/factory-view.test.ts` for status transitions, retained disclosure choice across refreshes and temporary empty finished g
      • specloop: complete task 4.1
      • specloop: archive nightshift-issue-25-factory-page-fold-finished-runs-away into openspec/specs
      • Merge pull request #26 from mattpolicastro/spec/nightshift-issue-25-factory-page-fold-finished-runs-away
    • Merged PR
      Spec: Factory page: fold finished runs away
    • Pushed
      specloop: task 1.1 Add `groupFactoryRuns(runs: readonly FactoryRun[]): { active: FactoryRun[]; finished: FactoryRun[] }` in `plugins/nightshift/client/factory-model.ts`, leaving `orderFactoryRuns` unc
      19 commits
      • specloop: task 1.1 Add `groupFactoryRuns(runs: readonly FactoryRun[]): { active: FactoryRun[]; finished: FactoryRun[] }` in `plugins/nightshift/client/factory-model.ts`, leaving `orderFactoryRuns` unc
      • specloop: complete task 1.1
      • specloop: task 2.1 Use `groupFactoryRuns` in `plugins/nightshift/client/factory.tsx`, add the initially collapsed accessible Finished toggle, reuse FactoryRow for both groups, and update counts and th
      • specloop: complete task 2.1
      • specloop: strengthen section 2 after its evidence check
      • specloop: task 2.2 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.2
      • specloop: task 3.1 Append additional action regression tests in `plugins/nightshift/tests/factory-view.test.ts` for both Finish and Abort, verifying no send before confirmation, post-action status tra
      • specloop: complete task 3.1
      • specloop: task 4.1 Append focused regression tests in `plugins/nightshift/tests/factory-view.test.ts` for status transitions, retained disclosure choice across refreshes and temporary empty finished g
      • specloop: complete task 4.1
      • specloop: task 1.1 Add `Manifest.mutation_parallel` and strict positive-integer parsing in `specloop/manifest.py`, with default, invalid-type, explicit serial limit and template/load round-trip tests
      • specloop: task 2.1 Refactor `specloop/evidence.py` to use a private source and fresh build through `verify.run_extracted` for each mutant, initially retaining serial dispatch; keep the baseline immuta
      • specloop: task 2.2 Apply immutable baseline-derived timeout overrides to mutant prepare and verify steps in `specloop/evidence.py`; add exact-budget and real short subprocess timeout tests alongside t
      • specloop: task 2.3 Strengthen the tests so each of these single-line mutations of code added in section 2 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
      • specloop: complete task 2.3
      • specloop: task 3.1 Add bounded thread-pool dispatch and index-based collection in `specloop/evidence.py`; drain active workers before baseline cleanup and propagate unexpected errors. Add event-driven
      • specloop: task 3.2 Add `test_parallel_mutants_match_serial_results` and `test_parallel_mutants_respect_time_box` in `tests/test_specloop_evidence.py`, exercising the landed dispatcher with prepared/un
      • specloop: complete task 3.2
    • Merged PR
      Spec stage: hands-off paths are not overlaps; four drafting rounds
    • Pushed
      Spec stage: catch human-only tasks, work in flight, and broken spec guarantees
      2 commits
      • Spec stage: catch human-only tasks, work in flight, and broken spec guarantees
      • Merge pull request #36 from mattpolicastro/fix/spec-stage-checks
    • Merged PR
      Spec stage: catch human-only tasks, work in flight, and broken spec guarantees
    • Pushed
      Draft OpenSpec change nightshift-issue-12-pass-drafting-ideas-through-a-file-not-a (specloop propose, round 1)
      9 commits
      • Draft OpenSpec change nightshift-issue-12-pass-drafting-ideas-through-a-file-not-a (specloop propose, round 1)
      • Draft OpenSpec change nightshift-issue-24-front-door-honour-blocked-by-before-draf (specloop propose, round 2)
      • Draft OpenSpec change nightshift-issue-24-front-door-honour-blocked-by-before-draf (specloop propose, round 1)
      • specloop: task 1.1 Add the new-round blocker check and INFO logger in `nightshift/specloop_intake.py` at the boundary described in `design.md`. Add only new local test support and the three required t
      • specloop: complete task 1.1
      • specloop: task 1.2 Add focused tests in `tests/test_specloop_intake.py` for pending background-job collection followed by delivery after a blocker reopens, open-PR recovery without a receipt, a body w
      • specloop: complete task 1.2
      • specloop: archive nightshift-issue-24-front-door-honour-blocked-by-before-draf into openspec/specs
      • Merge pull request #29 from mattpolicastro/spec/nightshift-issue-24-front-door-honour-blocked-by-before-draf
    • Merged PR
      Spec: Front door: honour `blocked-by:` before drafting
    • Pushed
      Draft OpenSpec change nightshift-issue-11-attention-list-infra-pauses-past-their-a (specloop propose, round 1)
      9 commits
      • Draft OpenSpec change nightshift-issue-11-attention-list-infra-pauses-past-their-a (specloop propose, round 1)
      • specloop: task 1.1 Add `pause.auto_resumes_remaining` in `specloop/cli.py::_status_json` using `serve.AUTO_RESUME`, the pause schedule, and a non-mutating task lookup as specified in design.md. Extend
      • specloop: complete task 1.1
      • specloop: task 2.1 Replace `HUMAN_REASONS` in `nightshift/specloop_attention.py` with the allowance predicate, missing-field fallback, and allowance validation. Extend `tests/test_specloop_attention.p
      • specloop: complete task 2.1
      • specloop: task 2.2 Add marked snapshot regressions in `tests/test_specloop_attention.py` for malformed allowances after a successful read, offline cached exhausted/requested entries, and successful re
      • specloop: complete task 2.2
      • specloop: archive nightshift-issue-11-attention-list-infra-pauses-past-their-a into openspec/specs
      • Merge pull request #22 from mattpolicastro/spec/nightshift-issue-11-attention-list-infra-pauses-past-their-a
    • Merged PR
      Spec: Attention: list infra pauses past their automatic resumes, and `requested` pauses
    • Pushed
      Drafter: human-only checks belong in the design, never in tasks.md
      2 commits
      • Drafter: human-only checks belong in the design, never in tasks.md
      • Merge pull request #30 from mattpolicastro/fix/drafter-human-tasks
    • Merged PR
      Drafter: human-only checks belong in the design, never in tasks.md
    • Pushed
      Draft OpenSpec change nightshift-issue-25-factory-page-fold-finished-runs-away (specloop propose, round 2)
      3 commits
      • Draft OpenSpec change nightshift-issue-25-factory-page-fold-finished-runs-away (specloop propose, round 2)
      • Archive factory-context into openspec/specs
      • Merge pull request #20 from mattpolicastro/archive/factory-context
    • Merged PR
      Archive factory-context into openspec/specs
    • Merged PR
      Factory context: what each run is, where it lives, and Open in Paseo
    • Pushed
      Evidence gate: measure mutants for manifests with prepare steps; never pass on nothing
      2 commits
      • Evidence gate: measure mutants for manifests with prepare steps; never pass on nothing
      • Merge pull request #18 from mattpolicastro/fix/prepare-mutants
    • Merged PR
      Evidence gate: measure mutants for manifests with prepare steps; never pass on nothing
    • Pushed
      Sync with private development: specloop, the GitHub front door, the Paseo Factory section
      2 commits
      • Sync with private development: specloop, the GitHub front door, the Paseo Factory section
      • Merge pull request #2 from mattpolicastro/sync-specloop
    • Merged PR
      Sync with private development: specloop, the GitHub front door, the Paseo Factory section

September

    • Pushed
      Remove superseded container executor
      4 commits
      • Remove superseded container executor
      • Define native worker architecture boundary
      • Add protected native runtime loader
      • Add fail-closed native dispatch gate
    • Pushed
      Add dormant native task lane
      9 commits
      • Add dormant native task lane
      • Add dormant native task integration foundation
      • Document live native controller canary
      • Add durable private native controller
      • Document live native review canary
      • Add stable authenticated ChatGPT reviewer
      • Join stable worker to isolated verification
      • Qualify live managed ChatGPT canary
      • Compose private stable ChatGPT worker
    • Pushed
      feat(design): establish spruce typography and pixel glyph system
      12 commits
      • feat(design): establish spruce typography and pixel glyph system
      • feat(shell): refine navigation, theme controls, and living background
      • feat(feed): refine post cards and cap the homepage feed
      • feat(archive): connect content clusters and anchor post return links
      • feat(pages): refresh home and about layouts and copy
      • content: update The Funk excerpt and refresh activity archives
      • feat(nav): add pixel RSS link between search and theme controls
      • feat(search): refresh results and preserve post return context
      • feat(about): add scroll-responsive monochrome pixel portrait
      • Merge remote-tracking branch 'origin/main'
      • test: cover redesigned navigation, search, and archive returns
      • Add description to 'The Funk' post
    • Pushed
      Log the planner merge and the constant-covariate fix
      9 commits
      • Log the planner merge and the constant-covariate fix
      • Drop zero-variance covariates instead of failing on them
      • Add prospective power simulation for choosing test duration
      • Add a "Plan a test" mode that estimates required runtime
      • Make the planner's answer reproducible, and match the analysis model
      • Let the analyst exclude known events when planning
      • Read the event calendar from an exclude column in the CSV
      • Follow the calendar, not the array index, when resampling noise
      • Merge PR #1: Add a "Plan a test" mode (prospective power simulation)
    • Pushed
      Landing: one stylesheet, one theme script, shared bundles, favicons wired
      4 commits
      • Landing: one stylesheet, one theme script, shared bundles, favicons wired
      • Lab: sample-size and detectable-lift are one app; schema bumped to v2
      • Favicons: αβ from the real Commissioner 900 outlines, light/dark adaptive
      • graph-canvas: implement the settled brand spec; fix dark mode
    • Pushed
      Brand v0: settle the canvas weight/color rules; baseline-align the topbar
      12 commits
      • Brand v0: settle the canvas weight/color rules; baseline-align the topbar
      • CLAUDE.md: no duplicated CSS or JS — extract it
      • packages/analysis: results, bayes, sequential, and the special functions
      • Lab: /lab/results, /lab/bayes, /lab/sequential; srm attaches rather than locks
      • graph-canvas: /bet/attach — a lab result becomes evidence on an existing bet
      • CLAUDE.md: lab CTA rule (lock vs attach) and closed-form engine policy
      • Scrub alphabeta.run as the app's domain; hold it for a future agentic name
      • graph-canvas: docket is a due-list; the facilitator knows what you're looking at
      • WORKLOG: close out 2026-09-04
      • graph-canvas: prodbar back to places + two menus; one overlay shell
      • graph-canvas: phase 5 — the Diff, docket contentions, calibration + graveyard stubs, detectable-lift funnel
      • Lab: /lab/pre-post — causal-impact-wasm served under the lab path
    • Pushed
      CLAUDE.md: the static build ships the dock via BYO key now
      16 commits
      • CLAUDE.md: the static build ships the dock via BYO key now
      • CLAUDE.md: status, definition of done, registry rule, packages/analysis, funnel
      • graph-canvas: typecheck is clean and a script
      • graph-canvas: fix isFunnelLanding call in the tray initializer
      • graph-canvas: phase 4 — funnel landing, typed intake, BYO-key facilitator, resolve vs rung
      • Lab: /lab/detectable-lift and /lab/srm
      • WORKLOG: 2026-09-04 — roadmap, phases 1–2, first lab tool
      • Lab: /lab/sample-size — first calculator, R-parity core, sealed receipts
      • graph-canvas: phase 2 — cockpit, instrument ladder, compiled criteria, ledger filters, admission
      • graph-canvas: guard clear/reset with a confirm and one undo
      • Landing: capability registry, /capabilities page, /lab index
      • graph-canvas: phase 1 — registry chips, the loop tray, export/import, vertical default
      • Docs: openexperiment — build brief and one-page flows
      • graph-canvas: move layout controls out of the global nav onto the canvas
      • Docs: September roadmap — quarry apps/web into the live canvas
      • CLAUDE.md: pin the /lab/* route policy

August

    • Pushed
      WORKLOG: record the history rewrite
      9 commits
      • WORKLOG: record the history rewrite
      • Shape docs: event grammar v0–v0.3, stress tests, literature review, rubric, surfaces
      • Eval harness: local-model replay and rubric-gaming experiments
      • apps/web: allow LAN and tailnet dev origins
      • WORKLOG: 2026-08-16 → 08-25 — foundations pivot, prototype, grammar, brand v0
      • Landing site: publish αlphaβeta landing page at alphabeta.tools
      • graph-canvas: VITE_STATIC build mode for the public demo
      • Docs: alphabeta.tools is canonical; record live deployment
      • Untrack compiled rubric and eval grades; broaden ignore rules
    • Pushed
      Graph-canvas prototype: open-field relay, dossier faces, moments, ledger, docket
      6 commits
      • Graph-canvas prototype: open-field relay, dossier faces, moments, ledger, docket
      • Brand v0: αlphaβeta wordmark, Instrument system, landing page, design system
      • Shape docs: event grammar v0–v0.3, stress tests, literature review, rubric, surfaces
      • Eval harness: local-model replay and rubric-gaming experiments
      • apps/web: allow LAN and tailnet dev origins
      • WORKLOG: 2026-08-16 → 08-25 — foundations pivot, prototype, grammar, brand v0
  • As I opened up my editor to draft this post, I realized my first attempt at doing so was 5/4/26, three months ago. Oof.

July

June

April

  • Now that I'm thinking about it I've never even seen the movie.

March

  • The website rebuilds will continue until writing improves.

2025

June

May

April

2022

May

  • Rebuilding, reviewing, and other life updates.

2020

October

August

January

2018

April

2017

May

2016

October

July

  • Jul 12Snippets

    Microblogging rears its handsome head.

June

March

February

  • Attempting to eulogize something still very much alive.

January

  • Screwing around in virtual worlds.

2015

December

November

  • More errata and effluvia, but I smuggled in an announcement.

August

  • Aug 11Expertise

    Excerpting Ursula M. Franklin.

July

June

May

  • May 7Fun

    Making the tool is oftentimes more fun than using the tool itself.

April

  • Apr 14Oh.

    It's been a while, hasn't it?

2014

May

April