Everything-ish.
A loose chronological archive of writing, code, or anything else that felt good to note.
2026
November
- specs: pass openspec 1.16.1 --strict (48/48)
- 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
- Spec: spec-kit: front door (feature naming, spec PR, readiness checks, revision rounds)
- 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
- 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
- Spec: spec-kit: drafter, feasibility and critic
- 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
- Spec: spec-kit: adapter on the build path (admit, run, gates, publish, finish)
- 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
- Spec: OpenSpec: pinned, checksummed standalone binary replaces npx; bump to 1.16.1
- 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
- Spec: spec-kit: house-rules doc and the nightshift-speckit preset
- 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
- Spec: spec-kit: parser, validator and scenario IDs (specloop/speckit.py)
- 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
- 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
- Spec: Engine: a format seam with the OpenSpec adapter behind it (behaviour-preserving)
- 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)
- tests: add verbatim spec-kit v1.3.2 templates for offline fixtures
- 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
- Spec: Readiness: evidence-disabled manifests are always merge:blocked
- specloop: archive mattpolicastro__nightshift-issue-190-spec-kit-front-door-feature-naming-spec into openspec/specs
- Nov 6mity/md4c
- 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
- Spec: Admission: a validator timeout is transient infra, not a spec refusal
- 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
- Spec: Runs: use the source clone's repo-local credential helpers for base fetch and publish push
- 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
- Spec: Verify: mark truncated output and name the full log
- 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
- Spec: Seal: always freeze agent-steering files (AGENTS.md, CLAUDE.md, .claude, .mcp.json)
- 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
- 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
- Spec: Agents: classify usage limits from rate_limit_event, not the agent's own words
- 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
- CI: plugin canary on schedule/dispatch only; print SDK version instead of npm ls
- 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
- Draft OpenSpec change mattpolicastro__nightshift-issue-179-admission-a-validator-timeout-is-transie (specloop propose, round 1)
October
- plugin: search and sort Factory runs
2 commits
- plugin: search and sort Factory runs
- Merge pull request #173 from mattpolicastro/plugin/factory-search-sort
- plugin: search and sort Factory runs
- Spec: Forge: enable Gitea dispatch (atomic-safe labels, bot-only markers, allowlist trust)
- 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
- CI: live Gitea contract job against a digest-pinned gitea/gitea:28.2.0
- 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
- Spec: Gitea: timeline and combined-status pages as 28.2.0 returns them (null terminal pages, per-page totals, status field)
- 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
- Spec: Gitea: read label actions and unpaginated comment listings the way 28.2.0 returns them
- 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
- 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
- Spec: Land: accept schedule and bare workflow_dispatch triggers in the CI exclusion parser (main CI red since #159)
- 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
- Spec: Status JSON: forge-neutral run link
- 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
- Spec: Forge: nightshift arm on Gitea
- 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
- plugin: drop the Paseo upper bound and add an SDK canary
- 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
- forge: Gitea issue-label reads are a single unpaginated GET
- 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
- Spec: land: merge Markdown-only PRs that CI never runs on
- 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
- Spec: Forge: land on Gitea with the human token
- 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
- plugin: open forge links in the system browser
- 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
- Spec: Forge: specloop publish, finish and critic on the forge
- 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
- Spec: Manifest: per-step env table
- specloop: archive mattpolicastro__nightshift-issue-135-manifest-per-step-env-table into openspec/specs
- plugin: search and sort Factory runs
- 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
- Spec: Forge: [[forges]] config, forge selection, seal and preflight per forge
- specloop: archive mattpolicastro__nightshift-issue-128-forge-forges-config-forge-selection-seal into openspec/specs
- 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.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
- 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
- Spec: Publication: carry design-level human checks into the publish receipt
- 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
- Spec: Forge: GiteaForge for front-door operations, FakeGitea, contract suite
- 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
- Spec: Factory page: accept PR links on configured forges
- 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
- Spec: Verify: trusted dependency snapshots keyed by lockfile
- 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
- Spec: Revision rounds: a re-run round must post its new result
- 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
- Spec: Forge seam: Forge Protocol + GitHubForge (byte-identical argv) for intake and readiness
- 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
- Spec: Evidence: mutation testing for compiled languages
- 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
- land: ignore other forge hosts during run discovery
- 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
- Spec: Forge: Gitea HTTP transport (stdlib urllib, origin-locked, no redirects)
- 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
- 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
- plugin: support Paseo 0.13
2 commits
- plugin: support Paseo 0.13
- Merge pull request #121 from mattpolicastro/plugin/paseo-0.13
- plugin: support Paseo 0.13
- 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
- Delete dead worker-era GitHub code (vcs.py, worker queue APIs)
- 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
- Spec: Factory page: a Land action for runs at human checks
- specloop: archive mattpolicastro__nightshift-issue-79-factory-page-a-land-action-for-runs-at-h into openspec/specs
- 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)
- migrate: a completed migration needs no writer exclusion
- 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
- Spec: Agent sessions: remove the private TMPDIR when the session ends
- 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
- CLAUDE.md: describe the unified CLI and state root after #40
- 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
- Spec: Rename specloop into Nightshift: one CLI, state under ~/.nightshift
- 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
- 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
- CLAUDE.md: describe the specloop-only project after the worker retirement
- 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
- Spec: Retire the worker engine
- 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
- readiness: reassess a CI-blocked assessment each poll until CI clears
- 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
- Spec: nightshift jobs: show active work by default; compact delivered history
- 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
- 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
- readiness: front-door PRs take human checks from the publication
- 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
- Spec: Make revise rounds idempotent
- 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
- Spec: Merge readiness: flag front-door PRs that are safe to merge
- 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
- tests: narrowing phase fixtures get 3 s, not 0.5 s (load flake)
- 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
- propose: specify rich-text structure by line rules, never semantic parsing
- 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
- arm: attribute owner-qualified run names to their issue
- 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
- Spec: Proposal JSON: report the real ref, and let the daemon accept it
- 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
- propose: draft from the newest base, resolved in the source checkout
- 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
- codex profiles can name their own login (API credits); seal scans every codex login
- 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
- Spec: Background jobs: deadlines, a status line, cleanup, and process-group timeouts
- 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
- 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
- Spec: Background jobs: release a stopped job's hold
- 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
- prompts: existing tests predate the change; test docs by structure, not wording
- 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
- Spec: Portability: make host paths configurable
- 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
- Spec: Providers: fall back to the next profile when one is unavailable
- 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
- Spec: land: run specloop via its interpreter; reconcile branch updates with unparseable responses
- 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
- Spec: Config resilience: a bad specloop manifest must not stop worker repositories
- 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
- Spec: land: treat 'no checks reported yet' after a push as pending
- 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
- propose: in-flight map ignores other runs' hands-off clauses
- 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
- Spec: nightshift.arm: lint an issue and check file overlap before arming
- 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
- Spec: Build timing report: where build time goes, per phase, change and profile
- 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
- Spec: Evidence gates: route mutants to their own suite, narrow, and confirm survivors
- 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
- tests: fix flaky deploy no-write snapshot (main is red)
- 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
- Spec: nightshift.deploy: detect and fix post-merge drift
- 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
- Spec: nightshift.land: land a reviewed PR safely
- 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
- Spec: Drafting: size tasks by risk, not by section
- 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)
- Spec: Docs: bring the specloop guide and known limitations up to date
- 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
- Spec: Factory page: show how long each run has waited on a human
- 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
- CI: fail on new mypy errors against a committed baseline
- 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
- Spec: Revision feedback: include comments posted during a revision, never re-queue the last round
- 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
- Spec: Mutation operators: negate bare conditions and drop early returns
- specloop: archive nightshift-issue-33-mutation-operators-negate-bare-condition into openspec/specs
- plugin: support Paseo 0.13
- Worklog: pin the project
2 commits
- Worklog: pin the project
- Worklog: the test bench PR to lylepmills/eurorack
- Worklog: pin the project
- 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
- Spec: De-flake test_parallel_mutants_respect_time_box under load
- 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
- Spec: Before publishing, merge the current base and verify again
- 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)
- Fix main: drop a prose annotation inside a touchpoints docstring
- Spec: Mutation testing: skip cosmetic literals in UI code
- 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
- Spec: Touchpoint report: count human interventions per change
- 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
- Spec critic: block on unplanned migrations, retry gaps and stale operator docs
- 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
- Spec: In-flight file map: parse file.py:function and root-level files
- 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
- Spec: Check who applied a front-door label
- Spec: Spec critic: a pre-PR review pass using the reviewer's checklist
- 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
- Draft OpenSpec change nightshift-issue-21-mutation-testing-skip-cosmetic-literals (specloop propose, round 1)
- 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
- Plaits Lab SDK: link live-audition wasm with em++
- 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
- Spec: Evidence: track mutant timeouts separately from kills
- Spec: Factory page: a styled UI pass
- 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
- 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
- Spec: One unreadable run must not break `specloop status --json` for every repository
- 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
- Drafter: the implementer never sees the in-flight list, so name files to avoid
- 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
- Spec: Run evidence-gate mutants in parallel
- 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
- Spec: Pass drafting ideas through a file, not argv
- 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
- Implementer: run results go in the summary, never in a repository file
- 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
- Spec: Factory page: fold finished runs away
- 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
- Spec stage: hands-off paths are not overlaps; four drafting rounds
- 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
- Spec stage: catch human-only tasks, work in flight, and broken spec guarantees
- 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
- Spec: Front door: honour `blocked-by:` before drafting
- 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
- Spec: Attention: list infra pauses past their automatic resumes, and `requested` pauses
- 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
- Drafter: human-only checks belong in the design, never in tasks.md
- 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
- Archive factory-context into openspec/specs
- Factory context: what each run is, where it lives, and Open in Paseo
- 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
- Evidence gate: measure mutants for manifests with prepare steps; never pass on nothing
- 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
- Sync with private development: specloop, the GitHub front door, the Paseo Factory section
- Implementer: a sandbox-only check failure is not a block
September
- 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
- 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
- Remove superseded container executor
- Add stable credential lease and native recovery marker
6 commits
- Add stable credential lease and native recovery marker
- Bind managed ChatGPT qualification
- Add ChatGPT-managed worker admission
- Bind native review context and provider policy
- Add immutable native reviewer boundary
- Join owned native execution with candidate verification fixtures
- Add stable credential lease and native recovery marker
- Add owned container sessions and isolated exact-candidate verification
- Characterize registered skills across the remote executor boundary
9 commits
- Characterize registered skills across the remote executor boundary
- Fix PR review findings and verify the isolated candidate roundtrip
- Add isolated executor, safe snapshots, and host-owned candidate commits
- Add dedicated-key no-tools OpenAI connection smoke test
- Normalize Claude results and make isolation qualification reproducible
- Specify native OpenAI worker integration and release gates
- Clarify validated multi-provider worker support
- Record successful Ollama implementation and Opus review pilot
- Document worker provider support and validation evidence
- Quick spelling/copy fixes
- post: Claude'ld
2 commits
- post: Claude'ld
- feat: add local draft previews and chat transcripts
- Sep 5Claude'ld
Actually, no, it is you.
- 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
- feat(design): establish spruce typography and pixel glyph system
- 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)
- Log the planner merge and the constant-covariate fix
- 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
- 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
- Landing: one stylesheet, one theme script, shared bundles, favicons wired
- 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
- CLAUDE.md: the static build ships the dock via BYO key now
August
- Aug 27mattpolicastro/alphabeta
- 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
- WORKLOG: record the history rewrite
- Aug 26mattpolicastro/alphabeta
- 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
- Graph-canvas prototype: open-field relay, dossier faces, moments, ledger, docket
- docs: worklog for feed + GrowthBook removal
5 commits
- docs: worklog for feed + GrowthBook removal
- feat: surface pushes, new repos, and upstream issues/PRs in GitHub feed
- chore: remove unused GrowthBook A/A stub
- docs: worklog for Mida integration
- feat: add Mida.so A/B testing script
- docs: worklog for feed + GrowthBook removal
- Group chart colors and the three panels into one visualization sub-pane
4 commits
- Group chart colors and the three panels into one visualization sub-pane
- Move chart colors panel below the stat tiles
- Split page theme from chart styling; per-panel PNG/SVG exports
- Add theme/palette selection and SVG chart export
- Group chart colors and the three panels into one visualization sub-pane
- Add validation suite: R parity on known datasets, stress harness, recalibrated guards
2 commits
- Add validation suite: R parity on known datasets, stress harness, recalibrated guards
- Add Bayesian spike-and-slab engine (default) and automated sanity checks
- Add WORKLOG
- Add validation suite: R parity on known datasets, stress harness, recalibrated guards
- Aug 16mattpolicastro/alphabeta
- Tests: LLM provider negotiation and null provider
4 commits
- Tests: LLM provider negotiation and null provider
- Tests: KM resolved-bet query mapping
- Tests: strategy template registry accessors and column invariants
- Tests: integrity fallback digest, mechanism classifier, extraction accumulator
- Tests: LLM provider negotiation and null provider
- Aug 4The Funk
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
May
April
March
- Mar 30Hipster PDA
Somehow, an even busier week.
- Mar 19Claudin' Around Pt. 3
F'ing A, F'ing O.
- Mar 11Claudin' Around Pt. 2
Well that was fast.
- Mar 11Claudin' Around
The website rebuilds will continue until writing improves.
- Mar 7Scales and surprises
Taking stock after a few long years.
February
January
2025
December
November
October
September
July
June
May
April
2022
May
- May 5Resurfacing
Rebuilding, reviewing, and other life updates.
2020
October
- Oct 13SoundBlasterBlaster
Well I left the team at Clearhead, so I made a silly toy.
August
Working out my feelings in a difficult period.
January
Fleshing out some ideas around data, organizations, and roles.
Definitely not burying the lede.
2018
April
Switching to Ghost, finishing grad school, and settling into Chicago.
2017
May
- May 2Marginalia VII
Trying to show some signs of life.
2016
October
- Oct 3Marginalia VI
More updates. Site tweaks (again).
July
Trying to write an essay to a less-than-satisfying result.
- Jul 12Snippets
Microblogging rears its handsome head.
June
- Jun 17Marginalia V
I'm in grad school. Time passes.
March
- Mar 31Marginalia IV
Errata, etc.
February
- Feb 18Twitter in 2016
Attempting to eulogize something still very much alive.
I finally got on the HTTPS bandwagon, thanks to Let's Encrypt.
January
- Jan 5GA-frame
Screwing around in virtual worlds.
2015
December
- Dec 9Skilful Grammar I
Experiments in iOS and Swift.
November
- Nov 5Marginalia III
More errata and effluvia, but I smuggled in an announcement.
August
- Aug 25On Writing
An apology. (Sorry again.)
- Aug 11Expertise
Excerpting Ursula M. Franklin.
July
Poorly-considered experiments in the quantified self.
- Jul 1Marginalia II
Cool Dad Syndrome and acquisitions.
June
- Jun 26If this, then...
Kludges and digital super glue.
- Jun 17Second Thoughts III
An attempt at microblogging.
- Jun 12Second Thoughts II
Completing my second thoughts.
May
- May 28Second Thoughts
Wrestling with the features of the modern web.
- May 15Marginalia I
The first of many.
- May 12Adventures in Pi
Blinded by science (and hacking in the real-er world).
- 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
- May 22Ch-ch-changes
Making site updates and design changes.
April
- Apr 8Hello, world.
Humble beginnings.