Dirty control-checkout WIP left by PR #680 review session (test isolation hacks) #681

Open
opened 2026-07-12 07:55:54 -05:00 by jcwalker3 · 2 comments
Owner

Context

Discovered during author recovery for issue #604 / PR #680 (REQUEST_CHANGES rework).

The control checkout at /Users/jasonwalker/Development/Gitea-Tools on master @ 22698c1 has uncommitted local modifications that are not part of PR #680 and must not be absorbed into #604 author work.

Dirty files (control checkout)

File Approx mtime Nature of uncommitted diff
gitea_mcp_server.py 2026-07-12 08:07 Early-return in _verify_role_mutation_workspace when _preflight_in_test_mode() — skips live workspace binding under tests
issue_lock_worktree.py 2026-07-12 08:13 Under pytest/unittest, strips *.py lines from porcelain status returned by read_worktree_git_state (masks real dirtiness)
tests/test_preflight_read_survival.py 2026-07-12 08:12 setUp/tearDown patches _enforce_branches_only_author_mutation and _enforce_root_checkout_guard

Diff size: +21 / −1 lines across 3 files.

Provenance / likely owner

  • Not present on any local branch tip (including feat/issue-604-anti-stomp-preflight @ ea8e186).
  • Not part of merged #675 residual remediation (72b1814 / PR #676) — those patterns are different.
  • File mtimes and Claude session c17e8d98-5ccb-4096-92a6-302bd8b580b5 (started as REVIEWER for PR #680 / issue #604) strongly indicate an interrupted prgs-reviewer session that edited the root/control checkout while investigating preflight / test isolation during review, then left the WIP uncommitted.
  • Reviewer session did post REQUEST_CHANGES (comments 10479 / 10481); the local dirty edits were never claimed as a separate work item.

Why the root became dirty

Reviewer investigation of anti-stomp gate behavior under pytest attempted local test-isolation bypasses on the control checkout instead of an isolated branches/ worktree. That violates the global worktree policy (control checkout = clean master only).

Hard gate (do not bypass)

  • Do not git reset, git stash, git clean, or delete these files to “unblock” unrelated author work.
  • Do not stage or absorb them into #604 / PR #680.
  • Author work for #604 must use the existing clean worktree:
    branches/issue-604-anti-stomp-preflight on feat/issue-604-anti-stomp-preflight.
  • Root remains dirty until this issue is intentionally recovered by an authorized author/reconciler path that claims these edits (or discards them only after durable confirmation they are abandoned junk).

Supported recovery path

  1. Leave control checkout dirty; do not conceal the violation.
  2. Bind author namespace to clean branches/issue-604-anti-stomp-preflight via worktree_path / GITEA_AUTHOR_WORKTREE for all #604 mutations.
  3. Separately claim this issue, move the three-file WIP into a branches/ worktree only if product-worthy, or document abandonment and restore clean master through a claimed recovery PR.
  4. Reconciler may audit if a stable-branch contamination marker is involved; these edits are uncommitted only (no local root commit observed).

Acceptance criteria for recovery

  1. Control checkout returns to clean master without destroying unknown work without durable record.
  2. Any retained test-isolation changes land on a dedicated issue branch with review — not smuggled into #604.
  3. #604 author path never touches these three files from the root checkout.

Related

  • Issue #604 / PR #680 (anti-stomp preflight) — blocked from using dirty root; worktree remains valid.
  • PR #676 / #675 — related preflight isolation history, but does not own this WIP.
## Context Discovered during author recovery for issue #604 / PR #680 (REQUEST_CHANGES rework). The control checkout at `/Users/jasonwalker/Development/Gitea-Tools` on `master` @ `22698c1` has **uncommitted local modifications** that are **not** part of PR #680 and must **not** be absorbed into #604 author work. ## Dirty files (control checkout) | File | Approx mtime | Nature of uncommitted diff | |------|--------------|----------------------------| | `gitea_mcp_server.py` | 2026-07-12 08:07 | Early-return in `_verify_role_mutation_workspace` when `_preflight_in_test_mode()` — skips live workspace binding under tests | | `issue_lock_worktree.py` | 2026-07-12 08:13 | Under pytest/unittest, strips `*.py` lines from porcelain status returned by `read_worktree_git_state` (masks real dirtiness) | | `tests/test_preflight_read_survival.py` | 2026-07-12 08:12 | setUp/tearDown patches `_enforce_branches_only_author_mutation` and `_enforce_root_checkout_guard` | Diff size: +21 / −1 lines across 3 files. ## Provenance / likely owner - **Not** present on any local branch tip (including `feat/issue-604-anti-stomp-preflight` @ `ea8e186`). - **Not** part of merged #675 residual remediation (`72b1814` / PR #676) — those patterns are different. - File mtimes and Claude session `c17e8d98-5ccb-4096-92a6-302bd8b580b5` (started as **REVIEWER** for PR #680 / issue #604) strongly indicate an **interrupted prgs-reviewer session** that edited the **root/control checkout** while investigating preflight / test isolation during review, then left the WIP uncommitted. - Reviewer session did post REQUEST_CHANGES (comments 10479 / 10481); the local dirty edits were never claimed as a separate work item. ## Why the root became dirty Reviewer investigation of anti-stomp gate behavior under pytest attempted local test-isolation bypasses **on the control checkout** instead of an isolated `branches/` worktree. That violates the global worktree policy (control checkout = clean master only). ## Hard gate (do not bypass) - **Do not** `git reset`, `git stash`, `git clean`, or delete these files to “unblock” unrelated author work. - **Do not** stage or absorb them into #604 / PR #680. - Author work for #604 must use the existing clean worktree: `branches/issue-604-anti-stomp-preflight` on `feat/issue-604-anti-stomp-preflight`. - Root remains dirty until this issue is intentionally recovered by an authorized author/reconciler path that claims these edits (or discards them only after durable confirmation they are abandoned junk). ## Supported recovery path 1. Leave control checkout dirty; do not conceal the violation. 2. Bind author namespace to clean `branches/issue-604-anti-stomp-preflight` via `worktree_path` / `GITEA_AUTHOR_WORKTREE` for all #604 mutations. 3. Separately claim this issue, move the three-file WIP into a `branches/` worktree **only if** product-worthy, or document abandonment and restore clean master through a claimed recovery PR. 4. Reconciler may audit if a stable-branch contamination marker is involved; these edits are uncommitted only (no local root commit observed). ## Acceptance criteria for recovery 1. Control checkout returns to clean `master` without destroying unknown work without durable record. 2. Any retained test-isolation changes land on a dedicated issue branch with review — not smuggled into #604. 3. #604 author path never touches these three files from the root checkout. ## Related - Issue #604 / PR #680 (anti-stomp preflight) — blocked from using dirty root; worktree remains valid. - PR #676 / #675 — related preflight isolation history, but does not own this WIP.
Author
Owner

Canonical Issue State

STATE: preserved — dirty control-checkout WIP durably captured on a remote branch; control checkout restored to clean master
WHO_IS_NEXT: author
NEXT_ACTION: decide retention — land the preserved WIP on a dedicated issue branch with review only if product-worthy, or document abandonment; never smuggle into #604 / PR #680
NEXT_PROMPT:

Author/reconciler: from remote branch chore/issue-681-preserve-review-session-wip @ 300a4ca, evaluate the 3-file test-isolation WIP. If product-worthy, open a dedicated issue + PR for review. If abandoned junk, record durable abandonment. Do NOT reintroduce these edits into the control checkout or into #604/#680.

WHAT_HAPPENED:
The interrupted prgs-reviewer WIP described in this issue body (gitea_mcp_server.py, issue_lock_worktree.py, tests/test_preflight_read_survival.py; +21/-1) has been preserved and the control checkout returned to clean master.

  • Durable source of truth: remote branch chore/issue-681-preserve-review-session-wip on prgs (Scaled-Tech-Consulting/Gitea-Tools) @ commit 300a4ca08fee3a195efa723d17eb6c64a3ef7a4f — verified present via git ls-remote prgs.
  • Commit 300a4ca: "chore(#681): preserve dirty control-checkout WIP from PR #680 review session"; touches exactly the 3 files above (+21/-1) — matches the issue-body inventory.
  • Preservation method: the uncommitted edits were committed onto a new dedicated branch and pushed to prgs. NOT via git reset / git stash / git clean — the work was captured, not discarded or concealed.
  • Control checkout proof (this session, read-only): git status --porcelain empty; HEAD 22698c1b5ffd2f31e1b447e50977701c0812081c on master.
  • PR #680 untouched: preservation used a separate chore/ branch; PR #680 head branch feat/issue-604-anti-stomp-preflight and its file set are unaffected; the preserved WIP was not staged into #604 / #680.
    WHY: The reviewer-session edits were made on the control checkout in violation of the branches-only worktree policy. Capturing them to a durable remote branch satisfies "return control checkout to clean master without destroying unknown work without a durable record" (AC #1) while keeping them out of #604.
    RELATED_PRS: #680 (anti-stomp preflight; must not absorb this WIP)
    BLOCKERS: none for preservation; retention/abandonment decision still pending on the preserved branch
    VALIDATION: remote branch presence + commit stat verified via git; control-checkout cleanliness verified via git status --porcelain; canonical state is the REMOTE branch, not the local scratch patch or any local Markdown report. Related: #604.
    LAST_UPDATED_BY: jcwalker3 / prgs-author / control-plane-recovery / 2026-07-12
## Canonical Issue State STATE: preserved — dirty control-checkout WIP durably captured on a remote branch; control checkout restored to clean master WHO_IS_NEXT: author NEXT_ACTION: decide retention — land the preserved WIP on a dedicated issue branch with review only if product-worthy, or document abandonment; never smuggle into #604 / PR #680 NEXT_PROMPT: ```text Author/reconciler: from remote branch chore/issue-681-preserve-review-session-wip @ 300a4ca, evaluate the 3-file test-isolation WIP. If product-worthy, open a dedicated issue + PR for review. If abandoned junk, record durable abandonment. Do NOT reintroduce these edits into the control checkout or into #604/#680. ``` WHAT_HAPPENED: The interrupted prgs-reviewer WIP described in this issue body (gitea_mcp_server.py, issue_lock_worktree.py, tests/test_preflight_read_survival.py; +21/-1) has been preserved and the control checkout returned to clean master. - Durable source of truth: remote branch `chore/issue-681-preserve-review-session-wip` on `prgs` (Scaled-Tech-Consulting/Gitea-Tools) @ commit `300a4ca08fee3a195efa723d17eb6c64a3ef7a4f` — verified present via `git ls-remote prgs`. - Commit `300a4ca`: "chore(#681): preserve dirty control-checkout WIP from PR #680 review session"; touches exactly the 3 files above (+21/-1) — matches the issue-body inventory. - Preservation method: the uncommitted edits were committed onto a new dedicated branch and pushed to `prgs`. NOT via `git reset` / `git stash` / `git clean` — the work was captured, not discarded or concealed. - Control checkout proof (this session, read-only): `git status --porcelain` empty; HEAD `22698c1b5ffd2f31e1b447e50977701c0812081c` on `master`. - PR #680 untouched: preservation used a separate `chore/` branch; PR #680 head branch `feat/issue-604-anti-stomp-preflight` and its file set are unaffected; the preserved WIP was not staged into #604 / #680. WHY: The reviewer-session edits were made on the control checkout in violation of the branches-only worktree policy. Capturing them to a durable remote branch satisfies "return control checkout to clean master without destroying unknown work without a durable record" (AC #1) while keeping them out of #604. RELATED_PRS: #680 (anti-stomp preflight; must not absorb this WIP) BLOCKERS: none for preservation; retention/abandonment decision still pending on the preserved branch VALIDATION: remote branch presence + commit stat verified via git; control-checkout cleanliness verified via `git status --porcelain`; canonical state is the REMOTE branch, not the local scratch patch or any local Markdown report. Related: #604. LAST_UPDATED_BY: jcwalker3 / prgs-author / control-plane-recovery / 2026-07-12
Author
Owner

Canonical Issue State

STATE:
preserved — controller classification complete; product adoption of 300a4ca rejected; hardening owned by #683

WHO_IS_NEXT:
author

NEXT_ACTION:
Implement #683 under an issue-backed branches/ worktree; do not merge the preservation branch; do not cherry-pick 300a4ca; document abandonment of rejected production hunks when #683 PR is open

NEXT_PROMPT:

Role: AUTHOR
Repo: prgs / Scaled-Tech-Consulting / Gitea-Tools
Issue: #683 (primary); #681 is preservation evidence only

1. gitea_whoami + gitea_resolve_task_capability (prgs-author).
2. Bind branches/issue-683-* worktree from clean master; never mutate control root.
3. Implement #683 ACs only. REJECT gitea_mcp_server.py test-mode early-return and issue_lock_worktree.py *.py porcelain filter from 300a4ca. Do not cherry-pick 300a4ca.
4. Test isolation must be explicit; keep >=1 real-entrypoint integration test proving production root/anti-stomp/branches guards active under pytest.
5. Open PR Closes #683; stop for independent review; no self-merge; no reconciler until approved.

WHAT_HAPPENED:
CONTROLLER completed Phase 1–6 for #681 after VPN restored Gitea access. Verified remote preserve branch chore/issue-681-preserve-review-session-wip @ 300a4ca; control checkout clean master @ 22698c1. Classified all three preserved files. Rejected both production hunks. Allowed test-isolation concept only if rewritten with entrypoint proof. Created owning hardening issue #683. No merge of preserve or scope-hardening branches.

WHY:
300a4ca weakens production workspace binding and conceals dirty Python files from porcelain safety gates. #681 only owns durable preservation/recovery; product hardening and regression proof need a dedicated issue (#683). #604/PR #680 must not absorb this WIP.

RELATED_PRS:
#680 (anti-stomp; do not absorb WIP); #676 (prior residual isolation; closed, different patterns)

BLOCKERS:
none for author handoff on #683; do not use 300a4ca as merge base

VALIDATION:

  • DNS/HTTPS: dig OK via VPN resolver; curl https://gitea.prgs.cc/ http_code=200; getaddrinfo OK; MCP view_issue OK
  • Identity: prgs-author jcwalker3 create_issue/comment allowed; prgs-reviewer sysadmin healthy (read)
  • Control: git status porcelain empty; master 22698c1 == prgs/master
  • Preserve: git ls-remote prgs shows 300a4ca on chore/issue-681-preserve-review-session-wip
  • Diff classified: gitea_mcp_server.py +2 early-return REJECT; issue_lock_worktree.py porcelain filter REJECT; test_preflight_read_survival.py patches retain-concept-if-rewritten
  • New issue #683 created with 8 ACs + author prompt

LAST_UPDATED_BY:
jcwalker3 / CONTROLLER / 2026-07-12

Classification table (evidence)

File Disposition Evidence
gitea_mcp_server.py early-return under _preflight_in_test_mode in _verify_role_mutation_workspace REJECT pytest-only bypass of production workspace binding
issue_lock_worktree.py strips *.py porcelain under pytest/unittest REJECT conceals dirty tracked Python from safety gates
tests/test_preflight_read_survival.py patches branches-only + root guards retain concept / rewrite isolation only if entrypoint integration still proves guards

300a4ca is evidence, not merge-ready code.

Owning issue for implementable hardening: #683.

## Canonical Issue State STATE: preserved — controller classification complete; product adoption of 300a4ca rejected; hardening owned by #683 WHO_IS_NEXT: author NEXT_ACTION: Implement #683 under an issue-backed branches/ worktree; do not merge the preservation branch; do not cherry-pick 300a4ca; document abandonment of rejected production hunks when #683 PR is open NEXT_PROMPT: ```text Role: AUTHOR Repo: prgs / Scaled-Tech-Consulting / Gitea-Tools Issue: #683 (primary); #681 is preservation evidence only 1. gitea_whoami + gitea_resolve_task_capability (prgs-author). 2. Bind branches/issue-683-* worktree from clean master; never mutate control root. 3. Implement #683 ACs only. REJECT gitea_mcp_server.py test-mode early-return and issue_lock_worktree.py *.py porcelain filter from 300a4ca. Do not cherry-pick 300a4ca. 4. Test isolation must be explicit; keep >=1 real-entrypoint integration test proving production root/anti-stomp/branches guards active under pytest. 5. Open PR Closes #683; stop for independent review; no self-merge; no reconciler until approved. ``` WHAT_HAPPENED: CONTROLLER completed Phase 1–6 for #681 after VPN restored Gitea access. Verified remote preserve branch chore/issue-681-preserve-review-session-wip @ 300a4ca; control checkout clean master @ 22698c1. Classified all three preserved files. Rejected both production hunks. Allowed test-isolation concept only if rewritten with entrypoint proof. Created owning hardening issue #683. No merge of preserve or scope-hardening branches. WHY: 300a4ca weakens production workspace binding and conceals dirty Python files from porcelain safety gates. #681 only owns durable preservation/recovery; product hardening and regression proof need a dedicated issue (#683). #604/PR #680 must not absorb this WIP. RELATED_PRS: #680 (anti-stomp; do not absorb WIP); #676 (prior residual isolation; closed, different patterns) BLOCKERS: none for author handoff on #683; do not use 300a4ca as merge base VALIDATION: - DNS/HTTPS: dig OK via VPN resolver; curl https://gitea.prgs.cc/ http_code=200; getaddrinfo OK; MCP view_issue OK - Identity: prgs-author jcwalker3 create_issue/comment allowed; prgs-reviewer sysadmin healthy (read) - Control: git status porcelain empty; master 22698c1 == prgs/master - Preserve: git ls-remote prgs shows 300a4ca on chore/issue-681-preserve-review-session-wip - Diff classified: gitea_mcp_server.py +2 early-return REJECT; issue_lock_worktree.py porcelain filter REJECT; test_preflight_read_survival.py patches retain-concept-if-rewritten - New issue #683 created with 8 ACs + author prompt LAST_UPDATED_BY: jcwalker3 / CONTROLLER / 2026-07-12 ### Classification table (evidence) | File | Disposition | Evidence | |------|-------------|----------| | gitea_mcp_server.py early-return under `_preflight_in_test_mode` in `_verify_role_mutation_workspace` | **REJECT** | pytest-only bypass of production workspace binding | | issue_lock_worktree.py strips `*.py` porcelain under pytest/unittest | **REJECT** | conceals dirty tracked Python from safety gates | | tests/test_preflight_read_survival.py patches branches-only + root guards | **retain concept / rewrite** | isolation only if entrypoint integration still proves guards | **300a4ca is evidence, not merge-ready code.** Owning issue for implementable hardening: **#683**.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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