Merge pull request #102 from mattpolicastro/spec/mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent
Pushed 190 commits to mattpolicastro/nightshift
• 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
• Merge current PR base 07a446be6f5c5a7e0ecc2f7fa36956debd8369a0
• Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5
• specloop: complete task 1.8
• 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.7
• 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.6
• 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.5
• 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: scope provenance validation to dispatch and replay decisions (descope tamper-defense after review loop)
• specloop: complete task 1.4
• 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.3
• 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.2
• 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.1
• 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
• Draft OpenSpec change mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent (specloop propose, round 2)
• Draft OpenSpec change mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent (specloop propose, round 1)
• Merge branch 'main' into spec/mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent
• 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-52-merge-readiness-flag-front-door-prs-that
• specloop: archive mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that into openspec/specs
• Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5
• specloop: complete task 1.8
• specloop: task 1.8 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
• specloop: complete task 1.7
• 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: strengthen section 1 after its evidence check
• specloop: complete task 1.6
• 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.5
• 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.4
• 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.3
• 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.2
• 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: checklist and scenario detection by line rules, not Markdown parsing (descope after four review rounds)
• specloop: complete task 1.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
• Draft OpenSpec change mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that (specloop propose, round 1)
• specloop: archive mattpolicastro__nightshift-issue-7-make-revise-rounds-idempotent into openspec/specs
• 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-52-merge-readiness-flag-front-door-prs-that
• specloop: archive mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that into openspec/specs
• Merge current PR base e32ed470166103a8e7362edc2737b6cc219e4ba5
• specloop: complete task 1.8
• specloop: task 1.8 Strengthen the tests so each of these single-line mutations of code added in section 1 makes a test fail; where a mutation genuinely cannot change behaviour, say why in a comment on
• specloop: complete task 1.7
• 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: strengthen section 1 after its evidence check
• specloop: complete task 1.6
• 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.5
• 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.4
• 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.3
• 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.2
• 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: checklist and scenario detection by line rules, not Markdown parsing (descope after four review rounds)
• specloop: complete task 1.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
• Draft OpenSpec change mattpolicastro__nightshift-issue-52-merge-readiness-flag-front-door-prs-that (specloop propose, round 1)
• Merge pull request #107 from mattpolicastro/fix/narrowing-test-timeout
• tests: give narrowing phase fixtures 3 s, not 0.5 s
• Merge pull request #106 from mattpolicastro/fix/drafter-line-rules
• propose: specify rich-text structure by line rules, never semantic parsing
• Merge pull request #104 from mattpolicastro/fix/arm-owner-qualified
• arm: attribute owner-qualified run names to their issue
• Merge pull request #100 from mattpolicastro/spec/mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le
• specloop: archive mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le into openspec/specs
• Merge current PR base aa8cfb89724328b5f8c95d3d50041e2a3ee8f9b9
• specloop: complete task 2.1
• 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: add a task adapting the background fixture to #9's job identity (base drift)
• Merge current PR base fda70c4ef0a1cb9b8ba120b72c835d374fcf7701
• specloop: complete task 1.2
• 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.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
• Draft OpenSpec change mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le (specloop propose, round 1)
• specloop: archive mattpolicastro__nightshift-issue-47-proposal-json-report-the-real-ref-and-le into openspec/specs
• Merge current PR base aa8cfb89724328b5f8c95d3d50041e2a3ee8f9b9
• specloop: complete task 2.1
• 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
• Merge pull request #101 from mattpolicastro/fix/draft-base
• specloop: add a task adapting the background fixture to #9's job identity (base drift)
• Merge current PR base fda70c4ef0a1cb9b8ba120b72c835d374fcf7701
• tests: tolerate EPERM when tearing down an already-reaped process group
• specloop: complete task 1.2
• 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
• propose: draft from the newest base, resolved in the source
• specloop: complete task 1.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
• Merge pull request #99 from mattpolicastro/feat/codex-profile-auth
• Merge branch 'main' into feat/codex-profile-auth
• Merge pull request #98 from mattpolicastro/spec/mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line
• specloop: archive mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line into openspec/specs
• codex profiles can name their own login (API credits); seal scans every codex login
• specloop: complete task 1.8
• 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.7
• 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.6
• 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.5
• 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.4
• 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.3
• 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.2
• 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.1
• 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
• Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 2)
• Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 1)
• Merge pull request #101 from mattpolicastro/fix/draft-base
• tests: tolerate EPERM when tearing down an already-reaped process group
• propose: draft from the newest base, resolved in the source
• tests: tolerate EPERM when tearing down an already-reaped process group
• Merge pull request #99 from mattpolicastro/feat/codex-profile-auth
• Merge branch 'main' into feat/codex-profile-auth
• 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 #98 from mattpolicastro/spec/mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line
• specloop: archive mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line into openspec/specs
• specloop: complete task 1.8
• 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.7
• 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.6
• 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.5
• 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.4
• 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.3
• 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.2
• 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.1
• 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
• Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 2)
• Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 1)
• Merge pull request #98 from mattpolicastro/spec/mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line
• specloop: archive mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line into openspec/specs
• specloop: complete task 1.8
• 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.7
• 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.6
• 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.5
• 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.4
• 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.3
• 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.2
• 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.1
• 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
• Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 2)
• Draft OpenSpec change mattpolicastro__nightshift-issue-9-background-jobs-deadlines-a-status-line (specloop propose, round 1)
• specloop: complete task 1.8
• 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.7
• 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.6
• 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.5
• 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.4
• 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.3
• 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.2
• 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.1
• 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