Spec: Gitea: timeline and combined-status pages as 28.2.0 returns them (null terminal pages, per-page totals, status field)
Merged PR in mattpolicastro/nightshift: "Spec: Gitea: timeline and combined-status pages as 28.2.0 returns them (null terminal pages, per-page totals, status field)"
Spec: Land: accept schedule and bare workflow_dispatch triggers in the CI exclusion parser (main CI red since #159)
Merged PR in mattpolicastro/nightshift: "Spec: Land: accept schedule and bare workflow_dispatch triggers in the CI exclusion parser (main CI red since #159)"
specloop: archive mattpolicastro__nightshift-issue-136-land-merge-markdown-only-prs-that-ci-nev into openspec/specs
Pushed 107 commits to mattpolicastro/nightshift
• specloop: complete task 1.2
• 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.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
• Merge current PR base 89c6898a5a1cb8bb48ad2494a07ce01ff7b9ce68
• specloop: complete task 1.6
• 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.5
• 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.4
• 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.3
• 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.2
• 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.
• Merge pull request #148 from mattpolicastro/plugin/open-external-links
• specloop: complete task 1.1
• 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
• plugin: open forge links in the system browser
• specloop: complete task 2.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: append review round 1
• Merge current PR base 89c6898a5a1cb8bb48ad2494a07ce01ff7b9ce68
• specloop: complete task 1.3
• 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.2
• Merge pull request #148 from mattpolicastro/plugin/open-external-links
• 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.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
• plugin: open forge links in the system browser
• Merge current PR base 89c6898a5a1cb8bb48ad2494a07ce01ff7b9ce68
• Merge pull request #148 from mattpolicastro/plugin/open-external-links
• specloop: complete task 1.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
• plugin: open forge links in the system browser
• Merge pull request #148 from mattpolicastro/plugin/open-external-links
• plugin: open forge links in the system browser
• Merge pull request #154 from mattpolicastro/spec/mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic
• specloop: archive mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic into openspec/specs
• specloop: complete task 1.6
• 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.5
• 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.4
• 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.3
• 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.2
• 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.1
• 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
• Draft OpenSpec change mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic (specloop propose, round 2)
• Draft OpenSpec change mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic (specloop propose, round 1)
• specloop: archive mattpolicastro__nightshift-issue-129-forge-specloop-publish-finish-and-critic into openspec/specs
• specloop: complete task 1.6
• 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.5
• 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.4
• 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.3
• 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.2
• 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.1
• 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
• Draft OpenSpec change mattpolicastro__nightshift-issue-151-verify-per-step-loopback-for-flutter-tes (specloop propose, round 2)
• Merge pull request #152 from mattpolicastro/spec/mattpolicastro__nightshift-issue-135-manifest-per-step-env-table
• specloop: archive mattpolicastro__nightshift-issue-135-manifest-per-step-env-table into openspec/specs
• specloop: complete task 1.2
• 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.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
• Draft OpenSpec change mattpolicastro__nightshift-issue-135-manifest-per-step-env-table (specloop propose, round 1)
• specloop: archive mattpolicastro__nightshift-issue-135-manifest-per-step-env-table into openspec/specs
• specloop: complete task 1.2
• 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.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
• Merge pull request #149 from mattpolicastro/spec/mattpolicastro__nightshift-issue-128-forge-forges-config-forge-selection-seal
• specloop: archive mattpolicastro__nightshift-issue-128-forge-forges-config-forge-selection-seal into openspec/specs
• specloop: complete task 1.5
• 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.4
• 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.3
• 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.2
• 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.1
• 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
• Draft OpenSpec change mattpolicastro__nightshift-issue-128-forge-forges-config-forge-selection-seal (specloop propose, round 3)
• 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 1)
• specloop: archive mattpolicastro__nightshift-issue-128-forge-forges-config-forge-selection-seal into openspec/specs
• specloop: complete task 1.5
• 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.4
• 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.3
• 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.2
• 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.1
• 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