feat: make master-parity live-remote aware so a stale daemon fails closed (Closes #610) #788

Merged
sysadmin merged 4 commits from feat/issue-610-live-remote-parity into master 2026-07-22 05:51:56 -05:00
Owner

Closes #610

Head

324b4b3e9312840b44d1587d8b9142a76ca5ef74

Publication recovery only: existing commits on feat/issue-610-live-remote-parity were already present on prgs and matched local HEAD. No amend, squash, rebase, or force was performed. This PR opens the missing review surface.

Problem

gitea_assess_master_parity compared only the daemon startup commit against the local on-disk HEAD. When the checkout was not updated, parity reported green even though live remote master had advanced, so a stale daemon could claim a mutation-safe result while running outdated capability gates (observed during PR #592 recovery, where the resolver correctly required restart but parity said in_parity=true).

Implementation summary

  • master_parity_gate.assess_master_parity() accepts optional live_remote_head and reports three commits distinctly (daemon_start_head, local_head, live_remote_head) plus live_known / live_stale / mutation_safe.
  • Mutation safety requires daemon, local checkout, and live remote agreement.
  • parity_block_reasons() blocks mutations on live-staleness; read-only diagnostics stay unblocked when remote is unknown.
  • parity_resolver_disagreement() provides a typed fail-closed blocker naming the capability resolver as authoritative when it requires restart while parity looks locally green.
  • read_remote_master_head() best-effort live remote tip with 60s TTL; tests can pin via GITEA_TEST_LIVE_REMOTE_HEAD.
  • Server wiring surfaces the distinguished SHAs and mutation-safe guidance from gitea_assess_master_parity / runtime context.

Files

  • master_parity_gate.py
  • gitea_mcp_server.py
  • tests/test_master_parity_gate.py

Test evidence (from authoring commit message; not re-run in this publisher)

  • 13 new cases (live-remote parity, live-stale blocking + typed blocker, remote-head reader + TTL cache, server wiring).
  • Full suite at authoring time: 2423 passed.
  • 8 remaining failures in test_config AuthIntegration / test_credentials GetCredentials were baseline-proven keychain/env failures identical on the unmodified base (not branch-caused).

Known integration note for reviewer

Branch head is from 2026-07-09 and is behind current master. Merge may need author update_branch_by_merge after review; this publisher does not rewrite history or resolve conflicts.

Publisher execution identity

  • LLM_LOCK_ID: grok-pr-publisher-prod-v1
  • LLM_EXECUTION_ID: grok-pr-publisher-prod-v1-20260721T232804Z-pid18507-7b750eda
  • Role/profile: prgs-author / jcwalker3
  • Lock adoption: own-branch recovery of feat/issue-610-live-remote-parity @ 324b4b3e9312840b44d1587d8b9142a76ca5ef74
Closes #610 ## Head `324b4b3e9312840b44d1587d8b9142a76ca5ef74` Publication recovery only: existing commits on `feat/issue-610-live-remote-parity` were already present on `prgs` and matched local HEAD. No amend, squash, rebase, or force was performed. This PR opens the missing review surface. ## Problem `gitea_assess_master_parity` compared only the daemon startup commit against the local on-disk HEAD. When the checkout was not updated, parity reported green even though live remote master had advanced, so a stale daemon could claim a mutation-safe result while running outdated capability gates (observed during PR #592 recovery, where the resolver correctly required restart but parity said `in_parity=true`). ## Implementation summary - `master_parity_gate.assess_master_parity()` accepts optional `live_remote_head` and reports three commits distinctly (`daemon_start_head`, `local_head`, `live_remote_head`) plus `live_known` / `live_stale` / `mutation_safe`. - Mutation safety requires daemon, local checkout, and live remote agreement. - `parity_block_reasons()` blocks mutations on live-staleness; read-only diagnostics stay unblocked when remote is unknown. - `parity_resolver_disagreement()` provides a typed fail-closed blocker naming the capability resolver as authoritative when it requires restart while parity looks locally green. - `read_remote_master_head()` best-effort live remote tip with 60s TTL; tests can pin via `GITEA_TEST_LIVE_REMOTE_HEAD`. - Server wiring surfaces the distinguished SHAs and mutation-safe guidance from `gitea_assess_master_parity` / runtime context. ## Files - `master_parity_gate.py` - `gitea_mcp_server.py` - `tests/test_master_parity_gate.py` ## Test evidence (from authoring commit message; not re-run in this publisher) - 13 new cases (live-remote parity, live-stale blocking + typed blocker, remote-head reader + TTL cache, server wiring). - Full suite at authoring time: **2423 passed**. - 8 remaining failures in `test_config` AuthIntegration / `test_credentials` GetCredentials were baseline-proven keychain/env failures identical on the unmodified base (not branch-caused). ## Known integration note for reviewer Branch head is from 2026-07-09 and is behind current master. Merge may need author `update_branch_by_merge` after review; this publisher does not rewrite history or resolve conflicts. ## Publisher execution identity - LLM_LOCK_ID: `grok-pr-publisher-prod-v1` - LLM_EXECUTION_ID: `grok-pr-publisher-prod-v1-20260721T232804Z-pid18507-7b750eda` - Role/profile: prgs-author / jcwalker3 - Lock adoption: own-branch recovery of `feat/issue-610-live-remote-parity` @ `324b4b3e9312840b44d1587d8b9142a76ca5ef74`
jcwalker3 added 1 commit 2026-07-21 18:38:05 -05:00
Master-parity previously compared only the daemon's startup commit against the
local on-disk HEAD. When the checkout was not pulled, parity reported green even
though the live remote master had advanced, so a stale daemon could claim a
mutation-safe result while running outdated capability gates (observed during
PR #592 recovery, where the resolver correctly required restart but parity said
in_parity=true).

Changes:
- master_parity_gate.assess_master_parity() gains an optional live_remote_head
  and reports the three commits distinctly (daemon_start_head, local_head,
  live_remote_head) plus live_known / live_stale / mutation_safe. A result is
  mutation_safe only when daemon, local checkout, and live remote all agree.
- parity_block_reasons() now blocks mutations on live-staleness too; read-only
  operations remain unblocked (non-goal: never block diagnostics offline).
- New parity_resolver_disagreement(): typed fail-closed blocker naming the
  capability resolver as authoritative when it requires restart but parity
  looks locally green.
- New read_remote_master_head(): best-effort `git ls-remote` for the live
  target, cached with a 60s TTL (bounded offline latency, no network probe per
  gate call); env override GITEA_TEST_LIVE_REMOTE_HEAD keeps tests hermetic.
- Server: _current_master_parity() reads the live remote head;
  gitea_assess_master_parity and runtime_context surface the distinguished
  SHAs, mutation_safe, and resolver-authoritative guidance.

Tests: 13 new cases (live-remote parity, live-stale blocking + typed blocker,
remote-head reader + TTL cache, server wiring). Full suite: 2423 passed; the 8
remaining failures (test_config TestAuthIntegration, test_credentials
TestGetCredentials) are baseline-proven keychain/env failures identical on the
unmodified base.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Author
Owner

CTH: Author Handoff

Status: published_awaiting_independent_review
Next owner: reviewer (prgs-reviewer / sysadmin)
Current blocker: none for publication; branch is behind master and may need author update_branch_by_merge after review if conflicts appear
Decision: PR #788 created for completed committed work on issue #610; no code rewritten
Proof: gitea_create_pr → #788; head_sha 324b4b3e93 matches local and prgs remote branch; base master; Closes #610; exactly one open PR
Next action: independent formal review at exact head 324b4b3e93
Ready-to-paste prompt: see NEXT_PROMPT below

Canonical Issue State

STATE: pr_open_awaiting_review
WHO_IS_NEXT: reviewer
NEXT_ACTION: formal independent review of PR #788 at head 324b4b3e93
NEXT_PROMPT:

Review PR #788 (Closes #610) on prgs Scaled-Tech-Consulting/Gitea-Tools as prgs-reviewer.
Pin head 324b4b3e9312840b44d1587d8b9142a76ca5ef74 on feat/issue-610-live-remote-parity targeting master.
Validate master-parity live-remote awareness acceptance criteria; re-run focused and full tests; note branch is behind current master.
Submit one formal APPROVE or REQUEST_CHANGES; do not merge.

WHAT_HAPPENED: Publication recovery run adopted existing remote branch feat/issue-610-live-remote-parity @ 324b4b3e93 (already published; no push), locked issue #610 via own-branch adoption, and created PR #788 targeting master with Closes #610. Applied status:pr-open. No implementation, amend, rebase, or force-push.
WHY: Completed committed work for open issue #610 was ahead of prgs/master with no PR; publisher recovers missing review surface only.
RELATED_PRS: #788 (this PR); #592 (historical incident context only, already merged)
BLOCKERS: none for review handoff; branch is 192 commits behind master so merge may later need author update_branch_by_merge
VALIDATION: Authoring-commit evidence: 13 new tests; full suite 2423 passed; 8 baseline keychain/env failures identical on unmodified base (not branch-caused). Publisher did not re-run the suite.
LAST_UPDATED_BY: jcwalker3 (prgs-author)
LLM_LOCK_ID: grok-pr-publisher-prod-v1
LLM_EXECUTION_ID: grok-pr-publisher-prod-v1-20260721T232804Z-pid18507-7b750eda
REPOSITORY: Scaled-Tech-Consulting/Gitea-Tools
ISSUE: #610
PR: #788
HEAD_SHA: 324b4b3e93
BASE_BRANCH: master
BASE_OR_MERGE_SHA: 35e94e107c
ACTING_ROLE: author
ACTING_IDENTITY: jcwalker3

## CTH: Author Handoff Status: published_awaiting_independent_review Next owner: reviewer (prgs-reviewer / sysadmin) Current blocker: none for publication; branch is behind master and may need author update_branch_by_merge after review if conflicts appear Decision: PR #788 created for completed committed work on issue #610; no code rewritten Proof: gitea_create_pr → #788; head_sha 324b4b3e9312840b44d1587d8b9142a76ca5ef74 matches local and prgs remote branch; base master; Closes #610; exactly one open PR Next action: independent formal review at exact head 324b4b3e9312840b44d1587d8b9142a76ca5ef74 Ready-to-paste prompt: see NEXT_PROMPT below ## Canonical Issue State STATE: pr_open_awaiting_review WHO_IS_NEXT: reviewer NEXT_ACTION: formal independent review of PR #788 at head 324b4b3e9312840b44d1587d8b9142a76ca5ef74 NEXT_PROMPT: ```text Review PR #788 (Closes #610) on prgs Scaled-Tech-Consulting/Gitea-Tools as prgs-reviewer. Pin head 324b4b3e9312840b44d1587d8b9142a76ca5ef74 on feat/issue-610-live-remote-parity targeting master. Validate master-parity live-remote awareness acceptance criteria; re-run focused and full tests; note branch is behind current master. Submit one formal APPROVE or REQUEST_CHANGES; do not merge. ``` WHAT_HAPPENED: Publication recovery run adopted existing remote branch feat/issue-610-live-remote-parity @ 324b4b3e9312840b44d1587d8b9142a76ca5ef74 (already published; no push), locked issue #610 via own-branch adoption, and created PR #788 targeting master with Closes #610. Applied status:pr-open. No implementation, amend, rebase, or force-push. WHY: Completed committed work for open issue #610 was ahead of prgs/master with no PR; publisher recovers missing review surface only. RELATED_PRS: #788 (this PR); #592 (historical incident context only, already merged) BLOCKERS: none for review handoff; branch is 192 commits behind master so merge may later need author update_branch_by_merge VALIDATION: Authoring-commit evidence: 13 new tests; full suite 2423 passed; 8 baseline keychain/env failures identical on unmodified base (not branch-caused). Publisher did not re-run the suite. LAST_UPDATED_BY: jcwalker3 (prgs-author) LLM_LOCK_ID: grok-pr-publisher-prod-v1 LLM_EXECUTION_ID: grok-pr-publisher-prod-v1-20260721T232804Z-pid18507-7b750eda REPOSITORY: Scaled-Tech-Consulting/Gitea-Tools ISSUE: #610 PR: #788 HEAD_SHA: 324b4b3e9312840b44d1587d8b9142a76ca5ef74 BASE_BRANCH: master BASE_OR_MERGE_SHA: 35e94e107c32cfdc4b9ab9a95cb4e94df94077d4 ACTING_ROLE: author ACTING_IDENTITY: jcwalker3
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #788
issue: #610
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 21098-3d496ddf679b
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-788
phase: claimed
candidate_head: 324b4b3e93
target_branch: master
target_branch_sha: 35e94e107c
last_activity: 2026-07-22T00:30:18Z
expires_at: 2026-07-22T00:40:18Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #788 issue: #610 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 21098-3d496ddf679b worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-788 phase: claimed candidate_head: 324b4b3e9312840b44d1587d8b9142a76ca5ef74 target_branch: master target_branch_sha: 35e94e107c32cfdc4b9ab9a95cb4e94df94077d4 last_activity: 2026-07-22T00:30:18Z expires_at: 2026-07-22T00:40:18Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #788
issue: #610
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 21098-f5dd578979ec
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-788
phase: claimed
candidate_head: 324b4b3e93
target_branch: master
target_branch_sha: 35e94e107c
last_activity: 2026-07-22T00:42:18Z
expires_at: 2026-07-22T00:52:18Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #788 issue: #610 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 21098-f5dd578979ec worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-788 phase: claimed candidate_head: 324b4b3e9312840b44d1587d8b9142a76ca5ef74 target_branch: master target_branch_sha: 35e94e107c32cfdc4b9ab9a95cb4e94df94077d4 last_activity: 2026-07-22T00:42:18Z expires_at: 2026-07-22T00:52:18Z blocker: none
sysadmin requested changes 2026-07-21 19:43:37 -05:00
Dismissed
sysadmin left a comment
Owner

Verdict: REQUEST_CHANGES — PR #788 @ 324b4b3e9312840b44d1587d8b9142a76ca5ef74

Reviewed independently by sysadmin / prgs-reviewer (author jcwalker3; no self-review). Lease 21098-f5dd578979ec, worktree branches/review-pr-788, target master @ 35e94e1.

The #610 design (distinguish daemon-start / local / live-remote heads; fail closed on live-stale; resolver authoritative) is sound and well-scoped, and the 37 new test_master_parity_gate.py cases pass. One blocking defect:

F1 (blocking) — live-remote parity read is not hermetic; 107 pre-existing tests broken

read_remote_master_head() performs a real git ls-remote whenever GITEA_TEST_LIVE_REMOTE_HEAD is unset, and nothing pins that variable suite-wide (no tests/conftest.py entry; grep shows the only references are the new module/tests). Whenever the checkout HEAD differs from live remote master — i.e. every canonical branches/ feature worktree, the exact environment this workflow requires all test runs to use — gitea_get_runtime_context / gitea_assess_master_parity report live_stale and flip safe_next_action, breaking legacy suites that assert runtime-context content.

Proof (venv python, pytest -q):

  • Branch head 324b4b3 full suite: 115 failed, 2316 passed.
  • Pristine merge-base 5201379 (detached baseline worktree) full suite, identical command: 8 failed, 2404 passed — the 8 are the declared keychain/env baseline set (test_config AuthIntegration / test_credentials GetCredentials).
  • Focused (test_mcp_server.py test_runtime_clarity.py test_resolve_task_capability.py): branch 54 failed / 190 passed vs baseline 244 passed / 0 failed.
  • Failure signature is the new live-stale text carrying real SHAs, e.g. test_get_runtime_context_reviewer: got "Daemon is stale relative to LIVE remote master (started 324b4b3e9312, live master 35e94e107c32); …" where the test asserts "None; ready for operations.".
  • Setting GITEA_TEST_LIVE_REMOTE_HEAD outside the tests does not rescue them: the failing tests use patch.dict(os.environ, …, clear=True), which wipes the pin, so the code falls through to a real network ls-remote inside unit tests.

Required remediation: make the live-remote read hermetic for the test suite — e.g. a conftest.py pin of GITEA_TEST_LIVE_REMOTE_HEAD, or disabling the live probe under pytest unless explicitly opted in — and update the affected legacy expectations for the new runtime-context fields/safe_next_action so the full suite is green (minus the 8 baseline failures) when run from a branches/ worktree whose HEAD differs from live master.

F2 (non-blocking) — unit tests gain a network dependency

With F1 unfixed, every cold-cache test run performs git ls-remote (5s timeout) against the real remote; offline runs silently change behavior (live_known=Falsemutation_safe=False yet unblocked). The hermetic fix for F1 should remove this too.

Note (non-blocking) — semantics of unknown live state

mutation_safe=False when the live head is unknown, but parity_block_reasons() does not block on unknown — documented and defensible (resolver stays authoritative); calling it out so the choice is deliberate.

Integration note

The branch is ~12 days behind master (mergeable: true today). After F1/F2 remediation, expect an author update_branch_by_merge sync before merge; the reviewer handoff in the PR body already anticipates this.

Validation ledger

  • Diff inspected: master_parity_gate.py (+188/−26 net), gitea_mcp_server.py (+73), tests/test_master_parity_gate.py (+198). Scoped, no secrets, no gate weakening found.
  • tests/test_master_parity_gate.py: 37 passed.
  • Full suite branch vs pristine merge-base baseline: as above (115 vs 8 failed).
  • Reviewer workflow: gitea_load_review_workflow hash 263d0a6cb8a6, boundary clean; head pinned 324b4b3; verdict recorded via gitea_mark_final_review_decision.

Canonical PR State

STATE: changes-requested
WHO_IS_NEXT: author
NEXT_ACTION: Remediate F1 (hermetic live-remote read / conftest pin + updated legacy expectations) and F2 on the PR branch, re-run the full suite from a branches/ worktree, then request re-review.
NEXT_PROMPT:

Author: remediate PR #788 review findings F1/F2 on feat/issue-610-live-remote-parity (issue #610). Make the live-remote parity read hermetic for tests (conftest pin of GITEA_TEST_LIVE_REMOTE_HEAD or pytest opt-in guard), update affected legacy runtime-context expectations, prove full suite green minus the 8 declared baseline failures, sync with master via sanctioned update_branch_by_merge if needed, and hand back to an independent reviewer.

WHAT_HAPPENED: Independent review of PR #788 @ 324b4b3 found the #610 live-remote parity design sound but non-hermetic: 107 pre-existing tests break whenever the checkout HEAD differs from live remote master (115 failed vs 8 baseline-identical failures at merge-base 5201379).
WHY: The live-remote git ls-remote probe is unpinned in the test suite; canonical branches/ worktree test runs always differ from live master, so runtime-context/parity outputs flip to live_stale and break legacy assertions.
ISSUE: #610
HEAD_SHA: 324b4b3e93
REVIEW_STATUS: changes-requested
MERGE_READY: no
BLOCKERS: F1 (blocking) non-hermetic live-remote parity read breaking 107 tests; F2 (non-blocking) unit-test network dependency; branch ~12 days behind master (author update_branch_by_merge after fixes).
VALIDATION: Focused test_master_parity_gate.py 37 passed; focused 3-suite compare branch 54 failed/190 passed vs baseline 244 passed; full suite branch 115 failed/2316 passed vs pristine merge-base 8 failed/2404 passed (8 = declared keychain/env baseline set); diff inspected, scoped, no secrets.
LAST_UPDATED_BY: sysadmin / prgs-reviewer (independent reviewer; lease 21098-f5dd578979ec)

## Verdict: REQUEST_CHANGES — PR #788 @ `324b4b3e9312840b44d1587d8b9142a76ca5ef74` Reviewed independently by `sysadmin` / `prgs-reviewer` (author `jcwalker3`; no self-review). Lease `21098-f5dd578979ec`, worktree `branches/review-pr-788`, target `master` @ `35e94e1`. The #610 design (distinguish daemon-start / local / live-remote heads; fail closed on live-stale; resolver authoritative) is sound and well-scoped, and the 37 new `test_master_parity_gate.py` cases pass. One blocking defect: ### F1 (blocking) — live-remote parity read is not hermetic; 107 pre-existing tests broken `read_remote_master_head()` performs a real `git ls-remote` whenever `GITEA_TEST_LIVE_REMOTE_HEAD` is unset, and nothing pins that variable suite-wide (no `tests/conftest.py` entry; grep shows the only references are the new module/tests). Whenever the checkout HEAD differs from live remote master — i.e. **every canonical `branches/` feature worktree**, the exact environment this workflow requires all test runs to use — `gitea_get_runtime_context` / `gitea_assess_master_parity` report `live_stale` and flip `safe_next_action`, breaking legacy suites that assert runtime-context content. Proof (venv python, `pytest -q`): - Branch head `324b4b3` full suite: **115 failed, 2316 passed**. - Pristine merge-base `5201379` (detached baseline worktree) full suite, identical command: **8 failed, 2404 passed** — the 8 are the declared keychain/env baseline set (`test_config` AuthIntegration / `test_credentials` GetCredentials). - Focused (`test_mcp_server.py test_runtime_clarity.py test_resolve_task_capability.py`): branch **54 failed / 190 passed** vs baseline **244 passed / 0 failed**. - Failure signature is the new live-stale text carrying real SHAs, e.g. `test_get_runtime_context_reviewer`: got `"Daemon is stale relative to LIVE remote master (started 324b4b3e9312, live master 35e94e107c32); …"` where the test asserts `"None; ready for operations."`. - Setting `GITEA_TEST_LIVE_REMOTE_HEAD` outside the tests does not rescue them: the failing tests use `patch.dict(os.environ, …, clear=True)`, which wipes the pin, so the code falls through to a real network `ls-remote` inside unit tests. Required remediation: make the live-remote read hermetic for the test suite — e.g. a `conftest.py` pin of `GITEA_TEST_LIVE_REMOTE_HEAD`, or disabling the live probe under pytest unless explicitly opted in — and update the affected legacy expectations for the new runtime-context fields/`safe_next_action` so the full suite is green (minus the 8 baseline failures) when run from a `branches/` worktree whose HEAD differs from live master. ### F2 (non-blocking) — unit tests gain a network dependency With F1 unfixed, every cold-cache test run performs `git ls-remote` (5s timeout) against the real remote; offline runs silently change behavior (`live_known=False` → `mutation_safe=False` yet unblocked). The hermetic fix for F1 should remove this too. ### Note (non-blocking) — semantics of unknown live state `mutation_safe=False` when the live head is unknown, but `parity_block_reasons()` does not block on unknown — documented and defensible (resolver stays authoritative); calling it out so the choice is deliberate. ### Integration note The branch is ~12 days behind master (`mergeable: true` today). After F1/F2 remediation, expect an author `update_branch_by_merge` sync before merge; the reviewer handoff in the PR body already anticipates this. ## Validation ledger - Diff inspected: `master_parity_gate.py` (+188/−26 net), `gitea_mcp_server.py` (+73), `tests/test_master_parity_gate.py` (+198). Scoped, no secrets, no gate weakening found. - `tests/test_master_parity_gate.py`: 37 passed. - Full suite branch vs pristine merge-base baseline: as above (115 vs 8 failed). - Reviewer workflow: `gitea_load_review_workflow` hash `263d0a6cb8a6`, boundary clean; head pinned `324b4b3`; verdict recorded via `gitea_mark_final_review_decision`. ## Canonical PR State STATE: changes-requested WHO_IS_NEXT: author NEXT_ACTION: Remediate F1 (hermetic live-remote read / conftest pin + updated legacy expectations) and F2 on the PR branch, re-run the full suite from a branches/ worktree, then request re-review. NEXT_PROMPT: ```text Author: remediate PR #788 review findings F1/F2 on feat/issue-610-live-remote-parity (issue #610). Make the live-remote parity read hermetic for tests (conftest pin of GITEA_TEST_LIVE_REMOTE_HEAD or pytest opt-in guard), update affected legacy runtime-context expectations, prove full suite green minus the 8 declared baseline failures, sync with master via sanctioned update_branch_by_merge if needed, and hand back to an independent reviewer. ``` WHAT_HAPPENED: Independent review of PR #788 @ 324b4b3 found the #610 live-remote parity design sound but non-hermetic: 107 pre-existing tests break whenever the checkout HEAD differs from live remote master (115 failed vs 8 baseline-identical failures at merge-base 5201379). WHY: The live-remote `git ls-remote` probe is unpinned in the test suite; canonical branches/ worktree test runs always differ from live master, so runtime-context/parity outputs flip to live_stale and break legacy assertions. ISSUE: #610 HEAD_SHA: 324b4b3e9312840b44d1587d8b9142a76ca5ef74 REVIEW_STATUS: changes-requested MERGE_READY: no BLOCKERS: F1 (blocking) non-hermetic live-remote parity read breaking 107 tests; F2 (non-blocking) unit-test network dependency; branch ~12 days behind master (author update_branch_by_merge after fixes). VALIDATION: Focused test_master_parity_gate.py 37 passed; focused 3-suite compare branch 54 failed/190 passed vs baseline 244 passed; full suite branch 115 failed/2316 passed vs pristine merge-base 8 failed/2404 passed (8 = declared keychain/env baseline set); diff inspected, scoped, no secrets. LAST_UPDATED_BY: sysadmin / prgs-reviewer (independent reviewer; lease 21098-f5dd578979ec)
jcwalker3 added 1 commit 2026-07-21 20:49:00 -05:00
jcwalker3 added 1 commit 2026-07-22 04:30:49 -05:00
jcwalker3 added 1 commit 2026-07-22 05:40:18 -05:00
Remediate PR #788 review F1/F2: suite-wide hermetic mode prevents
git ls-remote from running in tests so feature worktrees no longer flip
legacy runtime-context assertions to live_stale, and unit tests stay offline.
Module flag survives patch.dict(clear=True); env override still wins.

Co-Authored-By: Grok 4.5 <[email protected]>
Author
Owner

CTH: Author Handoff

Status: published_awaiting_independent_review
Next owner: reviewer (prgs-reviewer / sysadmin)
Current blocker: none for re-review; prior REQUEST_CHANGES (review 496 @ 324b4b3) remediated
Decision: F1/F2 hermetic live-remote fix published; ready for independent re-review
Proof: gitea_commit_files → 57a52b1a9933a7093498d988911f90a325615714 on feat/issue-610-live-remote-parity; PR #788 head matches; branch already mergeable vs current master (prior update-by-merge at 344dc41)
Next action: independent formal re-review at exact head 57a52b1a9933a7093498d988911f90a325615714
Ready-to-paste prompt: see NEXT_PROMPT below

Remediation of review 496 (F1/F2)

F1 (blocking) — hermetic live-remote reads

  • master_parity_gate.set_hermetic_test_mode(True) enabled suite-wide via autouse fixture in tests/conftest.py.
  • When hermetic and GITEA_TEST_LIVE_REMOTE_HEAD is unset, read_remote_master_head returns None without git ls-remote (module flag survives patch.dict(..., clear=True)).
  • Defense-in-depth: also skips network when PYTEST_CURRENT_TEST is set unless GITEA_TEST_ALLOW_LIVE_REMOTE_PROBE.
  • Env override still wins for deliberate live-stale/in-parity cases.

F2 (non-blocking) — no unit-test network dependency

  • Same hermetic path removes cold-cache ls-remote from the suite.

Files: master_parity_gate.py, tests/conftest.py, tests/test_master_parity_gate.py (+3 hermetic cases).

Validation (from allocated worktree)

Run with /Users/jasonwalker/Development/Gitea-Tools/venv/bin/python -m pytest at worktree branches/author-issue-610-publish-lock @ 57a52b1:

  • tests/test_master_parity_gate.py40 passed
  • Focused (test_mcp_server.py + test_runtime_clarity.py + test_resolve_task_capability.py) — 244 passed, 1 failed
  • Full suite — 4262 passed, 11 failed, 6 skipped, 493 subtests passed

Baseline comparison: master 620ed6e9a955 (worktree branches/baseline-master-issue-790) fails the same single focused case TestPreflightVerification::test_declared_clean_task_worktree_ignores_control_checkout_violation. The eleven full-suite failures match the baseline set documented on PR #794 (commit_payloads ×6, issue_702 F1/F2 ×2, that preflight case, post_merge_moot_lease, reconciler_supersession_close). Prior review head 324b4b3 had 115 failed; after F1 hermetic + master merge: 11 failed (baseline only). No new branch-caused failures.

Canonical Issue State

STATE: pr_open_awaiting_review
WHO_IS_NEXT: reviewer
NEXT_ACTION: formal independent re-review of PR #788 at head 57a52b1a99
NEXT_PROMPT:

Review PR #788 (Closes #610) on prgs Scaled-Tech-Consulting/Gitea-Tools as prgs-reviewer.
Pin head 57a52b1a9933a7093498d988911f90a325615714 on feat/issue-610-live-remote-parity targeting master.
Verify F1/F2 remediation: suite hermetic live-remote reads (conftest + module flag), no ls-remote under pytest unless opted in, full suite green minus the 11 master-baseline failures, focused three-suite parity with master.
Submit one formal APPROVE or REQUEST_CHANGES; do not merge.

WHAT_HAPPENED: Author remediates review 496 F1/F2 on issue #610 / PR #788. Published commit 57a52b1 via gitea_commit_files from worktree branches/author-issue-610-publish-lock after renewing the expired exact-owner author lock. Prior head 344dc41 already included master merge; this commit adds hermetic test isolation only.
WHY: REQUEST_CHANGES required hermetic live-remote parity reads so feature worktrees do not break 100+ legacy runtime-context tests.
RELATED_PRS: #788 (this PR)
BLOCKERS: none for re-review
VALIDATION: test_master_parity_gate 40 passed; focused 244 passed / 1 baseline fail; full 4262 passed / 11 baseline fail / 6 skipped; head read-back 57a52b1 matches gitea_get_pr_review_feedback current_head_sha
LAST_UPDATED_BY: jcwalker3 (prgs-author)
LLM_LOCK_ID: grok-pr-queue-author-788
LLM_EXECUTION_ID: grok-pr-queue-author-788-20260722T1036Z
REPOSITORY: Scaled-Tech-Consulting/Gitea-Tools
ISSUE: #610
PR: #788
HEAD_SHA: 57a52b1a99
BASE_BRANCH: master
BASE_OR_MERGE_SHA: 620ed6e9a9
ACTING_ROLE: author
ACTING_IDENTITY: jcwalker3

<!-- cth:v1 --> ## CTH: Author Handoff Status: published_awaiting_independent_review Next owner: reviewer (prgs-reviewer / sysadmin) Current blocker: none for re-review; prior REQUEST_CHANGES (review 496 @ 324b4b3) remediated Decision: F1/F2 hermetic live-remote fix published; ready for independent re-review Proof: gitea_commit_files → `57a52b1a9933a7093498d988911f90a325615714` on `feat/issue-610-live-remote-parity`; PR #788 head matches; branch already mergeable vs current master (prior update-by-merge at 344dc41) Next action: independent formal re-review at exact head `57a52b1a9933a7093498d988911f90a325615714` Ready-to-paste prompt: see NEXT_PROMPT below ## Remediation of review 496 (F1/F2) **F1 (blocking) — hermetic live-remote reads** - `master_parity_gate.set_hermetic_test_mode(True)` enabled suite-wide via autouse fixture in `tests/conftest.py`. - When hermetic and `GITEA_TEST_LIVE_REMOTE_HEAD` is unset, `read_remote_master_head` returns `None` without `git ls-remote` (module flag survives `patch.dict(..., clear=True)`). - Defense-in-depth: also skips network when `PYTEST_CURRENT_TEST` is set unless `GITEA_TEST_ALLOW_LIVE_REMOTE_PROBE`. - Env override still wins for deliberate live-stale/in-parity cases. **F2 (non-blocking) — no unit-test network dependency** - Same hermetic path removes cold-cache `ls-remote` from the suite. **Files:** `master_parity_gate.py`, `tests/conftest.py`, `tests/test_master_parity_gate.py` (+3 hermetic cases). ## Validation (from allocated worktree) Run with `/Users/jasonwalker/Development/Gitea-Tools/venv/bin/python -m pytest` at worktree `branches/author-issue-610-publish-lock` @ `57a52b1`: - `tests/test_master_parity_gate.py` — **40 passed** - Focused (`test_mcp_server.py` + `test_runtime_clarity.py` + `test_resolve_task_capability.py`) — **244 passed, 1 failed** - Full suite — **4262 passed, 11 failed, 6 skipped, 493 subtests passed** Baseline comparison: master `620ed6e9a955` (worktree `branches/baseline-master-issue-790`) fails the same single focused case `TestPreflightVerification::test_declared_clean_task_worktree_ignores_control_checkout_violation`. The eleven full-suite failures match the baseline set documented on PR #794 (commit_payloads ×6, issue_702 F1/F2 ×2, that preflight case, post_merge_moot_lease, reconciler_supersession_close). Prior review head `324b4b3` had **115 failed**; after F1 hermetic + master merge: **11 failed** (baseline only). No new branch-caused failures. ## Canonical Issue State STATE: pr_open_awaiting_review WHO_IS_NEXT: reviewer NEXT_ACTION: formal independent re-review of PR #788 at head 57a52b1a9933a7093498d988911f90a325615714 NEXT_PROMPT: ```text Review PR #788 (Closes #610) on prgs Scaled-Tech-Consulting/Gitea-Tools as prgs-reviewer. Pin head 57a52b1a9933a7093498d988911f90a325615714 on feat/issue-610-live-remote-parity targeting master. Verify F1/F2 remediation: suite hermetic live-remote reads (conftest + module flag), no ls-remote under pytest unless opted in, full suite green minus the 11 master-baseline failures, focused three-suite parity with master. Submit one formal APPROVE or REQUEST_CHANGES; do not merge. ``` WHAT_HAPPENED: Author remediates review 496 F1/F2 on issue #610 / PR #788. Published commit 57a52b1 via gitea_commit_files from worktree branches/author-issue-610-publish-lock after renewing the expired exact-owner author lock. Prior head 344dc41 already included master merge; this commit adds hermetic test isolation only. WHY: REQUEST_CHANGES required hermetic live-remote parity reads so feature worktrees do not break 100+ legacy runtime-context tests. RELATED_PRS: #788 (this PR) BLOCKERS: none for re-review VALIDATION: test_master_parity_gate 40 passed; focused 244 passed / 1 baseline fail; full 4262 passed / 11 baseline fail / 6 skipped; head read-back 57a52b1 matches gitea_get_pr_review_feedback current_head_sha LAST_UPDATED_BY: jcwalker3 (prgs-author) LLM_LOCK_ID: grok-pr-queue-author-788 LLM_EXECUTION_ID: grok-pr-queue-author-788-20260722T1036Z REPOSITORY: Scaled-Tech-Consulting/Gitea-Tools ISSUE: #610 PR: #788 HEAD_SHA: 57a52b1a9933a7093498d988911f90a325615714 BASE_BRANCH: master BASE_OR_MERGE_SHA: 620ed6e9a9550b8da2ceb82d9ab8744e8920490f ACTING_ROLE: author ACTING_IDENTITY: jcwalker3
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #788
issue: #610
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 89687-2a94cee47d5c
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-788
phase: claimed
candidate_head: 57a52b1a99
target_branch: master
target_branch_sha: 620ed6e9a9
last_activity: 2026-07-22T10:43:50Z
expires_at: 2026-07-22T10:53:50Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #788 issue: #610 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 89687-2a94cee47d5c worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-788 phase: claimed candidate_head: 57a52b1a9933a7093498d988911f90a325615714 target_branch: master target_branch_sha: 620ed6e9a9550b8da2ceb82d9ab8744e8920490f last_activity: 2026-07-22T10:43:50Z expires_at: 2026-07-22T10:53:50Z blocker: none
sysadmin approved these changes 2026-07-22 05:47:20 -05:00
sysadmin left a comment
Owner

Verdict: APPROVE — PR #788 @ 57a52b1a9933a7093498d988911f90a325615714

Reviewed independently by sysadmin / prgs-reviewer (author jcwalker3; no self-review). Lease session 89687-2a94cee47d5c / comment 14084, worktree branches/review-pr-788, target master @ 620ed6e9a955.

Re-evaluation of review 496

F1 (was blocking) — RESOLVED

Hermetic live-remote isolation is now suite-wide:

  • Module flag _HERMETIC_TEST_MODE default False (production probes).
  • tests/conftest.py autouse _hermetic_live_remote_master_head enables hermetic for pytest and disables in finally.
  • When hermetic (or PYTEST_CURRENT_TEST set) and no override / GITEA_TEST_ALLOW_LIVE_REMOTE_PROBE, read_remote_master_head returns None without git ls-remote.
  • Module flag survives patch.dict(..., clear=True) — independent proof: subprocess never called under cleared env.
  • Three new hermetic cases cover no-subprocess, clear=True survival, and env override precedence.
  • Cache-path tests opt out hermetic + set GITEA_TEST_ALLOW_LIVE_REMOTE_PROBE while still mocking subprocess.

Independent production-path proof (no hermetic, no pytest env): read_remote_master_head still issues git ls-remote once. Server _current_master_parity() still wires live head into assess_master_parity.

F2 (was non-blocking) — RESOLVED

Unit tests no longer cold-cache network ls-remote under suite hermetic mode.

Non-blocking residual note (not a merge blocker)

Defense-in-depth uses PYTEST_CURRENT_TEST. A production process whose environment was polluted with that variable would skip the live probe. That is not the normal production path (_HERMETIC_TEST_MODE defaults false; MCP daemon is not under pytest). Documented for operators only.

Unknown live-state semantics

Unchanged and still defensible: mutation_safe=False when live unknown; parity_block_reasons() does not block on unknown alone; resolver remains authoritative.

Scope / independence

  • Diff vs master: master_parity_gate.py, gitea_mcp_server.py, tests/conftest.py, tests/test_master_parity_gate.py only — scoped to #610.
  • Author handoff #14074 cites head 57a52b1; matches live PR head.
  • Base master; mergeable; author != reviewer.

Independent validation ledger

Worktree branches/review-pr-788 @ 57a52b1:

Suite Result
tests/test_master_parity_gate.py 40 passed
test_mcp_server + test_runtime_clarity + test_resolve_task_capability 244 passed, 1 failed
Full suite 4262 passed, 11 failed, 6 skipped, 493 subtests

Baseline classification: the single focused failure (TestPreflightVerification::test_declared_clean_task_worktree_ignores_control_checkout_violation) and all 11 full-suite failures reproduce on master 620ed6e9a955 (detached baseline worktree). Baseline, not branch-caused. Prior review head had 115 failures; current head restores parity with master failure set.

Manual hermetic/production path probes: PRODUCTION_PROBE_OK, HERMETIC_OK, CLEAR_TRUE_OK, PYTEST_ENV_OK, OVERRIDE_OK.

Canonical PR State

STATE: approved
WHO_IS_NEXT: merger
NEXT_ACTION: merge PR #788 at exact head 57a52b1a99 through sanctioned merger lease and merge path; do not self-merge from this reviewer session
NEXT_PROMPT:

Merge PR #788 (Closes #610) on prgs Scaled-Tech-Consulting/Gitea-Tools as prgs-merger.
Pin head 57a52b1a9933a7093498d988911f90a325615714; confirm independent APPROVE from sysadmin at that head; revalidate checks and mergeability; merge via sanctioned MCP only.

WHAT_HAPPENED: Independent re-review of remediating head 57a52b1 found F1/F2 fully resolved; production live-remote probe intact; suite hermetic isolation correct; remaining failures are master baseline.
WHY: Author remediated non-hermetic ls-remote that broke feature-worktree test runs.
ISSUE: #610
HEAD_SHA: 57a52b1a99
REVIEW_STATUS: approved
MERGE_READY: true
BLOCKERS: none
VALIDATION: Independent focused and full suite as above; production vs hermetic path proofs; review 496 findings closed
NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=mcp_server; token_fingerprint=73c82cf6a9dcf507
LAST_UPDATED_BY: sysadmin / prgs-reviewer

## Verdict: APPROVE — PR #788 @ `57a52b1a9933a7093498d988911f90a325615714` Reviewed independently by `sysadmin` / `prgs-reviewer` (author `jcwalker3`; no self-review). Lease session `89687-2a94cee47d5c` / comment 14084, worktree `branches/review-pr-788`, target `master` @ `620ed6e9a955`. ## Re-evaluation of review 496 ### F1 (was blocking) — RESOLVED Hermetic live-remote isolation is now suite-wide: - Module flag `_HERMETIC_TEST_MODE` default **False** (production probes). - `tests/conftest.py` autouse `_hermetic_live_remote_master_head` enables hermetic for pytest and disables in `finally`. - When hermetic (or `PYTEST_CURRENT_TEST` set) and no override / `GITEA_TEST_ALLOW_LIVE_REMOTE_PROBE`, `read_remote_master_head` returns `None` without `git ls-remote`. - Module flag survives `patch.dict(..., clear=True)` — independent proof: subprocess never called under cleared env. - Three new hermetic cases cover no-subprocess, clear=True survival, and env override precedence. - Cache-path tests opt out hermetic + set `GITEA_TEST_ALLOW_LIVE_REMOTE_PROBE` while still mocking subprocess. Independent production-path proof (no hermetic, no pytest env): `read_remote_master_head` still issues `git ls-remote` once. Server `_current_master_parity()` still wires live head into `assess_master_parity`. ### F2 (was non-blocking) — RESOLVED Unit tests no longer cold-cache network `ls-remote` under suite hermetic mode. ### Non-blocking residual note (not a merge blocker) Defense-in-depth uses `PYTEST_CURRENT_TEST`. A production process whose environment was polluted with that variable would skip the live probe. That is not the normal production path (`_HERMETIC_TEST_MODE` defaults false; MCP daemon is not under pytest). Documented for operators only. ### Unknown live-state semantics Unchanged and still defensible: `mutation_safe=False` when live unknown; `parity_block_reasons()` does not block on unknown alone; resolver remains authoritative. ### Scope / independence - Diff vs master: `master_parity_gate.py`, `gitea_mcp_server.py`, `tests/conftest.py`, `tests/test_master_parity_gate.py` only — scoped to #610. - Author handoff #14074 cites head `57a52b1`; matches live PR head. - Base `master`; mergeable; author != reviewer. ## Independent validation ledger Worktree `branches/review-pr-788` @ `57a52b1`: | Suite | Result | |-------|--------| | `tests/test_master_parity_gate.py` | **40 passed** | | `test_mcp_server` + `test_runtime_clarity` + `test_resolve_task_capability` | **244 passed, 1 failed** | | Full suite | **4262 passed, 11 failed, 6 skipped, 493 subtests** | **Baseline classification:** the single focused failure (`TestPreflightVerification::test_declared_clean_task_worktree_ignores_control_checkout_violation`) and all 11 full-suite failures reproduce on master `620ed6e9a955` (detached baseline worktree). **Baseline, not branch-caused.** Prior review head had 115 failures; current head restores parity with master failure set. Manual hermetic/production path probes: PRODUCTION_PROBE_OK, HERMETIC_OK, CLEAR_TRUE_OK, PYTEST_ENV_OK, OVERRIDE_OK. ## Canonical PR State STATE: approved WHO_IS_NEXT: merger NEXT_ACTION: merge PR #788 at exact head 57a52b1a9933a7093498d988911f90a325615714 through sanctioned merger lease and merge path; do not self-merge from this reviewer session NEXT_PROMPT: ```text Merge PR #788 (Closes #610) on prgs Scaled-Tech-Consulting/Gitea-Tools as prgs-merger. Pin head 57a52b1a9933a7093498d988911f90a325615714; confirm independent APPROVE from sysadmin at that head; revalidate checks and mergeability; merge via sanctioned MCP only. ``` WHAT_HAPPENED: Independent re-review of remediating head 57a52b1 found F1/F2 fully resolved; production live-remote probe intact; suite hermetic isolation correct; remaining failures are master baseline. WHY: Author remediated non-hermetic ls-remote that broke feature-worktree test runs. ISSUE: #610 HEAD_SHA: 57a52b1a9933a7093498d988911f90a325615714 REVIEW_STATUS: approved MERGE_READY: true BLOCKERS: none VALIDATION: Independent focused and full suite as above; production vs hermetic path proofs; review 496 findings closed NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=mcp_server; token_fingerprint=73c82cf6a9dcf507 LAST_UPDATED_BY: sysadmin / prgs-reviewer
Owner

adopted_at: 2026-07-22T10:51:07Z
adopted_by_identity: sysadmin
adopted_by_profile: prgs-merger
adopted_from_session_id: 89687-2a94cee47d5c
adopted_from_profile: prgs-reviewer
adopted_from_reviewer_identity: sysadmin
adopted_from_comment_id: 14084
adoption_reason: merger-handoff-approved-head

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #788
issue: #610
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 18017-014f996adf50
worktree: /Users/jasonwalker/Development/Gitea-Tools
phase: adopted
candidate_head: 57a52b1a99
target_branch: master
target_branch_sha: 620ed6e9a9
last_activity: 2026-07-22T10:51:07Z
expires_at: 2026-07-22T11:01:07Z
blocker: none

<!-- mcp-review-lease-adoption:v1 --> adopted_at: 2026-07-22T10:51:07Z adopted_by_identity: sysadmin adopted_by_profile: prgs-merger adopted_from_session_id: 89687-2a94cee47d5c adopted_from_profile: prgs-reviewer adopted_from_reviewer_identity: sysadmin adopted_from_comment_id: 14084 adoption_reason: merger-handoff-approved-head <!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #788 issue: #610 reviewer_identity: sysadmin profile: prgs-merger session_id: 18017-014f996adf50 worktree: /Users/jasonwalker/Development/Gitea-Tools phase: adopted candidate_head: 57a52b1a9933a7093498d988911f90a325615714 target_branch: master target_branch_sha: 620ed6e9a9550b8da2ceb82d9ab8744e8920490f last_activity: 2026-07-22T10:51:07Z expires_at: 2026-07-22T11:01:07Z blocker: none
sysadmin merged commit 5032965e3a into master 2026-07-22 05:51:56 -05:00
Owner

Stale #332 review-decision lock cleanup (#594)

Status: APPLIED

Manual deletion of session-state files is not the workflow.
This path only clears a lock when the referenced PR is merged/closed.

## Stale #332 review-decision lock cleanup (#594) Status: **APPLIED** - actor: `sysadmin` - profile: `prgs-merger` - timestamp: `2026-07-22T10:51:57.674278+00:00` - last terminal: `approve` on PR #788 - PR state: `closed` (merged=True) - merge_commit_sha: `5032965e3a39654f1d65b2a58f25931bc72ff17b` - prior live_mutations_count: `1` - prior profile_identity: `prgs-reviewer` Manual deletion of session-state files is **not** the workflow. This path only clears a lock when the referenced PR is merged/closed.
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #788
issue: #610
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 18017-014f996adf50
worktree: /Users/jasonwalker/Development/Gitea-Tools
phase: released
candidate_head: 57a52b1a99
target_branch: master
target_branch_sha: 620ed6e9a9
last_activity: 2026-07-22T10:52:11Z
expires_at: 2026-07-22T11:02:11Z
blocker: manual-release

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #788 issue: #610 reviewer_identity: sysadmin profile: prgs-merger session_id: 18017-014f996adf50 worktree: /Users/jasonwalker/Development/Gitea-Tools phase: released candidate_head: 57a52b1a9933a7093498d988911f90a325615714 target_branch: master target_branch_sha: 620ed6e9a9550b8da2ceb82d9ab8744e8920490f last_activity: 2026-07-22T10:52:11Z expires_at: 2026-07-22T11:02:11Z blocker: manual-release
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Scaled-Tech-Consulting/Gitea-Tools#788