feat(webui): unified session/lease/lock/worktree inventory API (Closes #636) #838

Merged
sysadmin merged 9 commits from feat/issue-636-inventory-api into master 2026-07-24 13:54:23 -05:00
Owner

Closes #636

Phase 1 child of the Web Console epic #631. Adds the unified read-only inventory API so traffic-control and recovery views share one machine-readable source for sessions, capabilities, leases, locks, namespaces, and worktrees.

What this adds

GET /api/v1/inventory — a versioned, read-only aggregation composed into an InventorySnapshot DTO from the existing loaders plus the control-plane DB when available. Sections: sessions (CP-DB when present), role/namespace, capability summary, issue/PR leases, durable locks, worktree bindings, and hygiene anomalies. Lease owner ↔ worktree ↔ namespace are joined when the evidence supports it.

Each section is fail-soft: an unavailable subsystem degrades to a status with a reason rather than raising, and a section that could not run is never rendered as empty-and-healthy. An active lease is never reported as unowned. Collision signals surface when detectable.

Files (4, all within #636 scope)

File Change
webui/inventory.py new (952) — InventorySnapshot, section loaders, join logic, redaction
webui/app.py +35 — /api/v1/inventory route registration
tests/test_webui_inventory.py new (468) — empty, populated, partial-failure, no-false-unowned
docs/webui-local-dev.md +47 — field authority (DB vs filesystem vs Gitea) and sample payload

Acceptance criteria

AC Where
1. Sessions/leases/locks/worktrees/namespaces sections InventorySnapshot / route /api/v1/inventory
2. Unavailable subsystems degrade with reasons fail-soft section loaders
3. Collision signals when detectable hygiene-anomaly join
4. Tests: empty, populated, partial failure tests/test_webui_inventory.py
5. Docs: field authority (DB vs filesystem vs Gitea) docs/webui-local-dev.md

Non-goals honored: no lease steal/release, no worktree delete, no Gitea-history replacement. Read-only throughout; sensitive paths redacted; stale/expired leases marked; no session tokens emitted.

Provenance

The implementation was committed on this worktree in an earlier author cycle whose owning MCP session then exited, leaving the commit unpublished. This cycle recovered the durable claim through the sanctioned dead-session unpublished-claim path (gitea_lock_issue, identity jcwalker3 / prgs-author, head strictly descends from recorded base 53c2c92), re-ran the full test matrix, then published the head with gitea_publish_unpublished_issue_branch. No file copy; the single commit b7a63a5 is the work as authored, on current master.

Test evidence

Verified from the allocated worktree against master 53c2c92:

  • Focused: pytest tests/test_webui_inventory.py20 passed.
  • Full suite — 4417 passed, 11 failed, 6 skipped, 559 subtests passed.

The 11 failures are the documented pre-existing master baseline — six in test_commit_payloads.py, two in test_issue_702_review_findings_f1_f6.py, and one each in test_mcp_server.py::TestPreflightVerification, test_post_merge_moot_lease.py, and test_reconciler_supersession_close.py. None touch webui/. This branch adds no new failures.

Canonical PR State

STATE: awaiting-review
WHO_IS_NEXT: reviewer
BLOCKED_ROLE: none
NEXT_ACTION: Review PR against issue #636 acceptance criteria 1-5 and the read-only/no-mutation non-goals
NEXT_PROMPT: Review this PR as prgs-reviewer; verify fail-soft section degradation, no-false-unowned on active leases, path redaction, and that the 11 full-suite failures match the 53c2c92 baseline; submit verdict; stop

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

Closes #636 Phase 1 child of the Web Console epic #631. Adds the unified read-only inventory API so traffic-control and recovery views share one machine-readable source for sessions, capabilities, leases, locks, namespaces, and worktrees. ## What this adds `GET /api/v1/inventory` — a versioned, read-only aggregation composed into an `InventorySnapshot` DTO from the existing loaders plus the control-plane DB when available. Sections: sessions (CP-DB when present), role/namespace, capability summary, issue/PR leases, durable locks, worktree bindings, and hygiene anomalies. Lease owner ↔ worktree ↔ namespace are joined when the evidence supports it. Each section is fail-soft: an unavailable subsystem degrades to a status with a reason rather than raising, and a section that could not run is never rendered as empty-and-healthy. An active lease is never reported as unowned. Collision signals surface when detectable. ## Files (4, all within #636 scope) | File | Change | |---|---| | `webui/inventory.py` | new (952) — `InventorySnapshot`, section loaders, join logic, redaction | | `webui/app.py` | +35 — `/api/v1/inventory` route registration | | `tests/test_webui_inventory.py` | new (468) — empty, populated, partial-failure, no-false-unowned | | `docs/webui-local-dev.md` | +47 — field authority (DB vs filesystem vs Gitea) and sample payload | ## Acceptance criteria | AC | Where | |---|---| | 1. Sessions/leases/locks/worktrees/namespaces sections | `InventorySnapshot` / route `/api/v1/inventory` | | 2. Unavailable subsystems degrade with reasons | fail-soft section loaders | | 3. Collision signals when detectable | hygiene-anomaly join | | 4. Tests: empty, populated, partial failure | `tests/test_webui_inventory.py` | | 5. Docs: field authority (DB vs filesystem vs Gitea) | `docs/webui-local-dev.md` | Non-goals honored: no lease steal/release, no worktree delete, no Gitea-history replacement. Read-only throughout; sensitive paths redacted; stale/expired leases marked; no session tokens emitted. ## Provenance The implementation was committed on this worktree in an earlier author cycle whose owning MCP session then exited, leaving the commit unpublished. This cycle recovered the durable claim through the sanctioned dead-session unpublished-claim path (`gitea_lock_issue`, identity `jcwalker3` / `prgs-author`, head strictly descends from recorded base `53c2c92`), re-ran the full test matrix, then published the head with `gitea_publish_unpublished_issue_branch`. No file copy; the single commit `b7a63a5` is the work as authored, on current master. ## Test evidence Verified from the allocated worktree against master `53c2c92`: - Focused: `pytest tests/test_webui_inventory.py` — **20 passed**. - Full suite — **4417 passed, 11 failed, 6 skipped, 559 subtests passed**. The 11 failures are the documented pre-existing master baseline — six in `test_commit_payloads.py`, two in `test_issue_702_review_findings_f1_f6.py`, and one each in `test_mcp_server.py::TestPreflightVerification`, `test_post_merge_moot_lease.py`, and `test_reconciler_supersession_close.py`. None touch `webui/`. This branch adds no new failures. ## Canonical PR State ```text STATE: awaiting-review WHO_IS_NEXT: reviewer BLOCKED_ROLE: none NEXT_ACTION: Review PR against issue #636 acceptance criteria 1-5 and the read-only/no-mutation non-goals NEXT_PROMPT: Review this PR as prgs-reviewer; verify fail-soft section degradation, no-false-unowned on active leases, path redaction, and that the 11 full-suite failures match the 53c2c92 baseline; submit verdict; stop ``` Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
jcwalker3 added 1 commit 2026-07-22 21:34:38 -05:00
Author
Owner

pr: #838
branch: feat/issue-636-inventory-api
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-636-inventory-api
profile: prgs-author
session_id: unknown
phase: claimed
head_before: b7a63a5579
expires_at: 2026-07-23T08:24:08Z
reviewer_active: no

<!-- mcp-conflict-fix-lease:v1 --> pr: #838 branch: feat/issue-636-inventory-api worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-636-inventory-api profile: prgs-author session_id: unknown phase: claimed head_before: b7a63a55794c977b8578f5a46eca5dd641bade68 expires_at: 2026-07-23T08:24:08Z reviewer_active: no
Author
Owner

Canonical Issue State

STATE: author-conflict-remediation-blocked
WHO_IS_NEXT: author
NEXT_ACTION: Repeat the conflict-fix merge for PR #838 from an author session that has local git-commit permission, then run the conflict-fix-gated push and require a fresh review at the new head.
NEXT_PROMPT:

Author cycle: remediate PR #838 (issue #636) conflicts. In worktree branches/issue-636-inventory-api (branch feat/issue-636-inventory-api, head b7a63a5): acquire the conflict-fix lease, `git merge --no-ff master`, resolve webui/app.py by keeping BOTH sides — #636 handlers api_inventory + api_inventory_section and routes /api/v1/inventory and /api/v1/inventory/{section}, AND master's #633 api_console_security_model handler and /api/console/security-model route — `git add webui/app.py`, `git commit --no-edit`, run assess_conflict_fix_push, push, re-run the webui + full suite, then hand to reviewer at the new exact head.

WHAT_HAPPENED: Followed the conflict-fix lease at comment 14746. Merged master (4f3a464a) into the branch in the allocated worktree; exactly one conflicted file, webui/app.py, every other path auto-merged. Both hunks are pure additive unions (this branch's #636 inventory API vs master's #633 console security-model surface). Resolution was applied and verified (ast.parse clean, all imports present), but landing a two-parent merge commit needs a local git commit + conflict-fix-gated git push (#399), both auto-denied under this cycle's headless permission mode. The in-progress merge was aborted; worktree is clean at b7a63a5. No remote mutation, no force-push, no rebase.
WHY: update_pr_branch_by_merge fail-closes on a real content conflict, and gitea_commit_files only creates single-parent API commits (cannot produce the two-parent merge that restores mergeability). The only sanctioned path is local merge + gated push, which requires git-commit permission this cycle lacks.
RELATED_PRS: #838 (this PR, blocked on author remediation); conflict originates from master #633 (merged) and #632 ADR lineage.
BLOCKERS: Headless auto-permission mode denies local git commit and git push, and no MCP tool can create a two-parent merge commit. UNBLOCK CONDITION: an author session running with local git-commit and git-push permission (interactive approval or a non-headless permission mode) re-runs the recipe in NEXT_PROMPT; the merge itself is a trivial additive union, so it completes in one pass once commit/push are permitted.
VALIDATION: Single conflict in webui/app.py; resolution ast.parse-clean with rbac_matrix/redaction_policy/console_audit and inventory imports all present; git merge --abort restored a clean worktree at b7a63a5 (git status --porcelain empty).
LAST_UPDATED_BY: prgs-author (jcwalker3)

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

## Canonical Issue State STATE: author-conflict-remediation-blocked WHO_IS_NEXT: author NEXT_ACTION: Repeat the conflict-fix merge for PR #838 from an author session that has local git-commit permission, then run the conflict-fix-gated push and require a fresh review at the new head. NEXT_PROMPT: ```text Author cycle: remediate PR #838 (issue #636) conflicts. In worktree branches/issue-636-inventory-api (branch feat/issue-636-inventory-api, head b7a63a5): acquire the conflict-fix lease, `git merge --no-ff master`, resolve webui/app.py by keeping BOTH sides — #636 handlers api_inventory + api_inventory_section and routes /api/v1/inventory and /api/v1/inventory/{section}, AND master's #633 api_console_security_model handler and /api/console/security-model route — `git add webui/app.py`, `git commit --no-edit`, run assess_conflict_fix_push, push, re-run the webui + full suite, then hand to reviewer at the new exact head. ``` WHAT_HAPPENED: Followed the conflict-fix lease at comment 14746. Merged master (4f3a464a) into the branch in the allocated worktree; exactly one conflicted file, webui/app.py, every other path auto-merged. Both hunks are pure additive unions (this branch's #636 inventory API vs master's #633 console security-model surface). Resolution was applied and verified (ast.parse clean, all imports present), but landing a two-parent merge commit needs a local git commit + conflict-fix-gated git push (#399), both auto-denied under this cycle's headless permission mode. The in-progress merge was aborted; worktree is clean at b7a63a5. No remote mutation, no force-push, no rebase. WHY: update_pr_branch_by_merge fail-closes on a real content conflict, and gitea_commit_files only creates single-parent API commits (cannot produce the two-parent merge that restores mergeability). The only sanctioned path is local merge + gated push, which requires git-commit permission this cycle lacks. RELATED_PRS: #838 (this PR, blocked on author remediation); conflict originates from master #633 (merged) and #632 ADR lineage. BLOCKERS: Headless auto-permission mode denies local `git commit` and `git push`, and no MCP tool can create a two-parent merge commit. UNBLOCK CONDITION: an author session running with local git-commit and git-push permission (interactive approval or a non-headless permission mode) re-runs the recipe in NEXT_PROMPT; the merge itself is a trivial additive union, so it completes in one pass once commit/push are permitted. VALIDATION: Single conflict in webui/app.py; resolution `ast.parse`-clean with rbac_matrix/redaction_policy/console_audit and inventory imports all present; `git merge --abort` restored a clean worktree at b7a63a5 (git status --porcelain empty). LAST_UPDATED_BY: prgs-author (jcwalker3) Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
jcwalker3 added 1 commit 2026-07-24 06:01:41 -05:00
jcwalker3 added 1 commit 2026-07-24 06:01:57 -05:00
jcwalker3 added 1 commit 2026-07-24 06:07:41 -05:00
No content conflicts. Master advanced with the #658 restart coordinator;
inventory API surfaces auto-merge cleanly.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
jcwalker3 added 1 commit 2026-07-24 06:16:45 -05:00
jcwalker3 added 1 commit 2026-07-24 06:55:56 -05:00
jcwalker3 added 1 commit 2026-07-24 07:08:23 -05:00
jcwalker3 added 1 commit 2026-07-24 07:36:56 -05:00
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #838
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 94347-c0e9763dbbb7
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-202607241040
phase: claimed
candidate_head: none
target_branch: master
target_branch_sha: none
last_activity: 2026-07-24T14:40:31Z
expires_at: 2026-07-24T14:50:31Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #838 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 94347-c0e9763dbbb7 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-202607241040 phase: claimed candidate_head: none target_branch: master target_branch_sha: none last_activity: 2026-07-24T14:40:31Z expires_at: 2026-07-24T14:50:31Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #838
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 94347-2967ae33070a
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-202607241040
phase: claimed
candidate_head: none
target_branch: master
target_branch_sha: none
last_activity: 2026-07-24T14:51:30Z
expires_at: 2026-07-24T15:01:30Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #838 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 94347-2967ae33070a worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-202607241040 phase: claimed candidate_head: none target_branch: master target_branch_sha: none last_activity: 2026-07-24T14:51:30Z expires_at: 2026-07-24T15:01:30Z blocker: none
sysadmin approved these changes 2026-07-24 09:52:34 -05:00
Dismissed
sysadmin left a comment
Owner

PR #838 (Closes #636) cleanly implements the unified read-only session/lease/lock/worktree inventory API (GET /api/v1/inventory and GET /api/v1/inventory/{section}).

Review Summary

  1. Capabilities & Scope: Read-only additions (webui/inventory.py, webui/app.py, tests/test_webui_inventory.py, docs/webui-local-dev.md). All routes are GETs. No mutation routes added.
  2. Safety & Redaction: Strict path and URL redaction enforced; sensitive credential shapes scrubbed at the emit boundary; SQLite opened via file:...mode=ro.
  3. Fail-Soft Invariants: Ownership sections degrade gracefully without asserting false unowned items or empty lists during subsystem unavailability.
  4. Validation Evidence: Focused unit tests pass 20/20. Full test suite results (5002 passed, 17 failed) matched the clean baseline master worktree (36fe4785, 23 failed, 5060 passed) with zero new failures. Worktree clean post-validation.

Canonical PR State

STATE: ready-to-merge
WHO_IS_NEXT: merger
NEXT_ACTION: Merge PR #838 into master as prgs-merger
NEXT_PROMPT:

Merge PR #838 into master as prgs-merger after validating approval at head f7ef719bd63bd164dba0b23ba0f236fcaed97022.

WHAT_HAPPENED: Reviewer validated PR #838 and approved at head f7ef719bd6
WHY: Focused tests pass 20/20. Full test suite (5002 passed, 17 failed) matches baseline master (36fe4785, 23 failed). All gates passed.
ISSUE: #636
HEAD_SHA: f7ef719bd6
REVIEW_STATUS: approved / approval_at_current_head
MERGE_READY: true
BLOCKERS: none
VALIDATION: Executable /Users/jasonwalker/Development/Gitea-Tools/venv/bin/python; working directory: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-202607241040; Focused test run 20 passed; Full suite run 5002 passed, 17 failed; Baseline comparison working directory: /Users/jasonwalker/Development/Gitea-Tools/branches/baseline-master-pr838; Baseline full suite run 5060 passed, 23 failed; All 17 PR failures matched master baseline 36fe4785
NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=gitea_submit_pr_review; token_fingerprint=prgs-reviewer
LAST_UPDATED_BY: prgs-reviewer

Controller Handoff

  • Task: review_pr
  • Repo: Scaled-Tech-Consulting/Gitea-Tools
  • Role: reviewer
  • Identity: sysadmin / prgs-reviewer
  • Active profile: prgs-reviewer
  • Runtime context: stable-control on branch master at 36fe4785ec
  • Selected PR: feat(webui): unified session/lease/lock/worktree inventory API (Closes #636) (#838)
  • Linked issue: Web Console: Session, lease, lock, and worktree inventory API (Phase 1) (#636)
  • Eligibility class: Next review/merge eligible PR
  • Queue ordering policy: Oldest open PR requiring action
  • Inventory pagination proof: gitea_list_prs returned returned_count: 3, total_count: 3, has_more: false, is_final_page: true, inventory_complete: true
  • Earlier PRs skipped: none
  • Candidate head SHA: f7ef719bd6
  • Reviewed head SHA: f7ef719bd6
  • Target branch: master
  • Target branch SHA: 36fe4785ec
  • Target branch ancestry: not ancestor
  • Author-safety result: passed
  • Prior request-changes state: none
  • Review worktree used: true
  • Review worktree path: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-202607241040
  • Review worktree inside branches: true
  • Review worktree HEAD state: f7ef719bd6
  • Review worktree dirty before validation: false
  • Review worktree dirty after validation: false
  • Baseline worktree used: true
  • Baseline worktree path: /Users/jasonwalker/Development/Gitea-Tools/branches/baseline-master-pr838
  • Files reviewed: webui/inventory.py, webui/app.py, tests/test_webui_inventory.py, docs/webui-local-dev.md
  • Validation: Executable /Users/jasonwalker/Development/Gitea-Tools/venv/bin/python; working directory: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-202607241040; Focused test run 20 passed; Full suite run 5002 passed, 17 failed; Baseline comparison working directory: /Users/jasonwalker/Development/Gitea-Tools/branches/baseline-master-pr838; Baseline full suite run 5060 passed, 23 failed; All 17 PR failures matched master baseline 36fe4785
  • Official validation integrity status: passed
  • Terminal review mutation: approve
  • Review decision: approve
  • Final live head SHA before approval: f7ef719bd6
  • Push during validation: false
  • Whether push occurred during validation: false
  • Merge preflight: not run
  • Merge result: none
  • Linked issue status: open (#636)
  • Main checkout branch: master
  • Main checkout dirty state: false
  • Main checkout updated: false
  • File edits by reviewer: none
  • Worktree/index mutations: git worktree add branches/review-pr838-202607241040, git worktree add branches/baseline-master-pr838
  • Git ref mutations: git fetch prgs master feat/issue-636-inventory-api
  • MCP/Gitea mutations: gitea_acquire_reviewer_pr_lease (comment 16024), gitea_mark_final_review_decision (pr 838 approve)
  • Review mutations: gitea_mark_final_review_decision (approve)
  • Merge mutations: none
  • Cleanup mutations: none
  • External-state mutations: none
  • Read-only diagnostics: git rev-parse HEAD, git status --short --branch, git diff --stat prgs/master...HEAD
  • Blockers: none
  • Current status: ready-to-merge
  • Next actor: merger
  • Next action: Merge PR #838 into master as prgs-merger
  • Next prompt: Merge PR #838 into master as prgs-merger after validating approval at head f7ef719bd6.
  • Safe next action: Merge PR #838 into master as prgs-merger
  • Safety statement: All gates passed. Review validated against PR head f7ef719bd6.
  • Workflow-load helper result: {"workflow_load_proof_present": true, "workflow_source": "skills/llm-project-workflow/workflows/review-merge-pr.md", "workflow_hash": "263d0a6cb8a6", "final_report_schema_path": "skills/llm-project-workflow/schemas/review-merge-final-report.md", "final_report_schema_hash": "b6c65affc336", "boundary_status": "clean"}
PR #838 (Closes #636) cleanly implements the unified read-only session/lease/lock/worktree inventory API (`GET /api/v1/inventory` and `GET /api/v1/inventory/{section}`). ### Review Summary 1. **Capabilities & Scope**: Read-only additions (`webui/inventory.py`, `webui/app.py`, `tests/test_webui_inventory.py`, `docs/webui-local-dev.md`). All routes are GETs. No mutation routes added. 2. **Safety & Redaction**: Strict path and URL redaction enforced; sensitive credential shapes scrubbed at the emit boundary; SQLite opened via `file:...mode=ro`. 3. **Fail-Soft Invariants**: Ownership sections degrade gracefully without asserting false unowned items or empty lists during subsystem unavailability. 4. **Validation Evidence**: Focused unit tests pass 20/20. Full test suite results (5002 passed, 17 failed) matched the clean baseline master worktree (`36fe4785`, 23 failed, 5060 passed) with zero new failures. Worktree clean post-validation. ## Canonical PR State STATE: ready-to-merge WHO_IS_NEXT: merger NEXT_ACTION: Merge PR #838 into master as prgs-merger NEXT_PROMPT: ```text Merge PR #838 into master as prgs-merger after validating approval at head f7ef719bd63bd164dba0b23ba0f236fcaed97022. ``` WHAT_HAPPENED: Reviewer validated PR #838 and approved at head f7ef719bd63bd164dba0b23ba0f236fcaed97022 WHY: Focused tests pass 20/20. Full test suite (5002 passed, 17 failed) matches baseline master (36fe4785, 23 failed). All gates passed. ISSUE: #636 HEAD_SHA: f7ef719bd63bd164dba0b23ba0f236fcaed97022 REVIEW_STATUS: approved / approval_at_current_head MERGE_READY: true BLOCKERS: none VALIDATION: Executable /Users/jasonwalker/Development/Gitea-Tools/venv/bin/python; working directory: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-202607241040; Focused test run 20 passed; Full suite run 5002 passed, 17 failed; Baseline comparison working directory: /Users/jasonwalker/Development/Gitea-Tools/branches/baseline-master-pr838; Baseline full suite run 5060 passed, 23 failed; All 17 PR failures matched master baseline 36fe4785 NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=gitea_submit_pr_review; token_fingerprint=prgs-reviewer LAST_UPDATED_BY: prgs-reviewer ## Controller Handoff - Task: review_pr - Repo: Scaled-Tech-Consulting/Gitea-Tools - Role: reviewer - Identity: sysadmin / prgs-reviewer - Active profile: prgs-reviewer - Runtime context: stable-control on branch master at 36fe4785eccf712b3bc0dec8583c798e8cf1f218 - Selected PR: #838 - Linked issue: #636 - Eligibility class: Next review/merge eligible PR - Queue ordering policy: Oldest open PR requiring action - Inventory pagination proof: gitea_list_prs returned returned_count: 3, total_count: 3, has_more: false, is_final_page: true, inventory_complete: true - Earlier PRs skipped: none - Candidate head SHA: f7ef719bd63bd164dba0b23ba0f236fcaed97022 - Reviewed head SHA: f7ef719bd63bd164dba0b23ba0f236fcaed97022 - Target branch: master - Target branch SHA: 36fe4785eccf712b3bc0dec8583c798e8cf1f218 - Target branch ancestry: not ancestor - Author-safety result: passed - Prior request-changes state: none - Review worktree used: true - Review worktree path: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-202607241040 - Review worktree inside branches: true - Review worktree HEAD state: f7ef719bd63bd164dba0b23ba0f236fcaed97022 - Review worktree dirty before validation: false - Review worktree dirty after validation: false - Baseline worktree used: true - Baseline worktree path: /Users/jasonwalker/Development/Gitea-Tools/branches/baseline-master-pr838 - Files reviewed: webui/inventory.py, webui/app.py, tests/test_webui_inventory.py, docs/webui-local-dev.md - Validation: Executable /Users/jasonwalker/Development/Gitea-Tools/venv/bin/python; working directory: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-202607241040; Focused test run 20 passed; Full suite run 5002 passed, 17 failed; Baseline comparison working directory: /Users/jasonwalker/Development/Gitea-Tools/branches/baseline-master-pr838; Baseline full suite run 5060 passed, 23 failed; All 17 PR failures matched master baseline 36fe4785 - Official validation integrity status: passed - Terminal review mutation: approve - Review decision: approve - Final live head SHA before approval: f7ef719bd63bd164dba0b23ba0f236fcaed97022 - Push during validation: false - Whether push occurred during validation: false - Merge preflight: not run - Merge result: none - Linked issue status: open (#636) - Main checkout branch: master - Main checkout dirty state: false - Main checkout updated: false - File edits by reviewer: none - Worktree/index mutations: git worktree add branches/review-pr838-202607241040, git worktree add branches/baseline-master-pr838 - Git ref mutations: git fetch prgs master feat/issue-636-inventory-api - MCP/Gitea mutations: gitea_acquire_reviewer_pr_lease (comment 16024), gitea_mark_final_review_decision (pr 838 approve) - Review mutations: gitea_mark_final_review_decision (approve) - Merge mutations: none - Cleanup mutations: none - External-state mutations: none - Read-only diagnostics: git rev-parse HEAD, git status --short --branch, git diff --stat prgs/master...HEAD - Blockers: none - Current status: ready-to-merge - Next actor: merger - Next action: Merge PR #838 into master as prgs-merger - Next prompt: Merge PR #838 into master as prgs-merger after validating approval at head f7ef719bd63bd164dba0b23ba0f236fcaed97022. - Safe next action: Merge PR #838 into master as prgs-merger - Safety statement: All gates passed. Review validated against PR head f7ef719bd63bd164dba0b23ba0f236fcaed97022. - Workflow-load helper result: {"workflow_load_proof_present": true, "workflow_source": "skills/llm-project-workflow/workflows/review-merge-pr.md", "workflow_hash": "263d0a6cb8a6", "final_report_schema_path": "skills/llm-project-workflow/schemas/review-merge-final-report.md", "final_report_schema_hash": "b6c65affc336", "boundary_status": "clean"}
jcwalker3 added 1 commit 2026-07-24 13:51:15 -05:00
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #838
issue: #636
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 66928-4fc43a898aae
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-20260724145219
phase: claimed
candidate_head: 4e269f3a7a
target_branch: master
target_branch_sha: 36fe4785ec
last_activity: 2026-07-24T18:52:43Z
expires_at: 2026-07-24T19:02:43Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #838 issue: #636 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 66928-4fc43a898aae worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-20260724145219 phase: claimed candidate_head: 4e269f3a7a51fa7da8abe5087349b656e279be07 target_branch: master target_branch_sha: 36fe4785eccf712b3bc0dec8583c798e8cf1f218 last_activity: 2026-07-24T18:52:43Z expires_at: 2026-07-24T19:02:43Z blocker: none
sysadmin approved these changes 2026-07-24 13:53:12 -05:00
sysadmin left a comment
Owner

Review: PR #838 — inventory API (#636) — post-base-sync re-approval

Verdict: APPROVE

Re-reviewed at head 4e269f3a7a51fa7da8abe5087349b656e279be07 after author base-sync from previously approved f7ef719. Delta is a single merge commit of master into the PR branch; no new inventory feature code.

Reviewer sysadmin / prgs-reviewer (author is jcwalker3).

Checks

  1. Scope vs master: still exactly 4 files — webui/inventory.py, webui/app.py (+route), tests/test_webui_inventory.py, docs/webui-local-dev.md (+1502 lines). No out-of-scope drift.
  2. Safety: read-only GETs; SQLite mode=ro; path/URL redaction; fail-soft sections; no false-unowned while incomplete.
  3. Tests: focused tests/test_webui_inventory.py20 passed from clean review worktree at head. Worktree clean after validation.
  4. Base: commits_behind=0; head contains master 36fe4785.

NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=gitea_submit_pr_review; token_fingerprint=prgs-reviewer; workflow_hash=263d0a6cb8a6; schema_hash=b6c65affc336

Canonical PR State

STATE: ready-to-merge
WHO_IS_NEXT: merger
BLOCKED_ROLE: none
NEXT_ACTION: Merge PR #838 into master as prgs-merger at head 4e269f3a7a51fa7da8abe5087349b656e279be07
NEXT_PROMPT: As prgs-merger on PR #838: assess_pr_sync_status; if merge_now with approval_at_current_head, acquire merger lease and merge; stop
WHAT_HAPPENED: Reviewer re-approved PR #838 after base-sync at head 4e269f3
WHY: Merge-only delta from prior APPROVE; scope clean; 20/20 focused tests; at current base
ISSUE: #636
HEAD_SHA: 4e269f3a7a51fa7da8abe5087349b656e279be07
REVIEW_STATUS: approved / approval_at_current_head
MERGE_READY: true
BLOCKERS: none
VALIDATION: focused tests/test_webui_inventory.py — 20 passed; worktree /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-20260724145219 clean; prior APPROVE@f7ef719 revalidated after merge of master 36fe4785
LAST_UPDATED_BY: prgs-reviewer (sysadmin)
## Review: PR #838 — inventory API (#636) — post-base-sync re-approval **Verdict: APPROVE** Re-reviewed at head `4e269f3a7a51fa7da8abe5087349b656e279be07` after author base-sync from previously approved `f7ef719`. Delta is a single merge commit of master into the PR branch; no new inventory feature code. Reviewer `sysadmin` / `prgs-reviewer` (author is `jcwalker3`). ### Checks 1. **Scope vs master**: still exactly 4 files — `webui/inventory.py`, `webui/app.py` (+route), `tests/test_webui_inventory.py`, `docs/webui-local-dev.md` (+1502 lines). No out-of-scope drift. 2. **Safety**: read-only GETs; SQLite `mode=ro`; path/URL redaction; fail-soft sections; no false-unowned while incomplete. 3. **Tests**: focused `tests/test_webui_inventory.py` — **20 passed** from clean review worktree at head. Worktree clean after validation. 4. **Base**: commits_behind=0; head contains master `36fe4785`. NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=gitea_submit_pr_review; token_fingerprint=prgs-reviewer; workflow_hash=263d0a6cb8a6; schema_hash=b6c65affc336 ## Canonical PR State ```text STATE: ready-to-merge WHO_IS_NEXT: merger BLOCKED_ROLE: none NEXT_ACTION: Merge PR #838 into master as prgs-merger at head 4e269f3a7a51fa7da8abe5087349b656e279be07 NEXT_PROMPT: As prgs-merger on PR #838: assess_pr_sync_status; if merge_now with approval_at_current_head, acquire merger lease and merge; stop WHAT_HAPPENED: Reviewer re-approved PR #838 after base-sync at head 4e269f3 WHY: Merge-only delta from prior APPROVE; scope clean; 20/20 focused tests; at current base ISSUE: #636 HEAD_SHA: 4e269f3a7a51fa7da8abe5087349b656e279be07 REVIEW_STATUS: approved / approval_at_current_head MERGE_READY: true BLOCKERS: none VALIDATION: focused tests/test_webui_inventory.py — 20 passed; worktree /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-20260724145219 clean; prior APPROVE@f7ef719 revalidated after merge of master 36fe4785 LAST_UPDATED_BY: prgs-reviewer (sysadmin) ```
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #838
issue: #636
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 66928-4fc43a898aae
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-20260724145219
phase: released
candidate_head: 4e269f3a7a
target_branch: master
target_branch_sha: 36fe4785ec
last_activity: 2026-07-24T18:53:41Z
expires_at: 2026-07-24T19:03:41Z
blocker: manual-release

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #838 issue: #636 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 66928-4fc43a898aae worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr838-20260724145219 phase: released candidate_head: 4e269f3a7a51fa7da8abe5087349b656e279be07 target_branch: master target_branch_sha: 36fe4785eccf712b3bc0dec8583c798e8cf1f218 last_activity: 2026-07-24T18:53:41Z expires_at: 2026-07-24T19:03:41Z blocker: manual-release
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #838
issue: #636
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 66925-0d3af49e41df
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-pr838-20260724145345
phase: claimed
candidate_head: 4e269f3a7a
target_branch: master
target_branch_sha: 36fe4785ec
last_activity: 2026-07-24T18:54:10Z
expires_at: 2026-07-24T19:04:10Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #838 issue: #636 reviewer_identity: sysadmin profile: prgs-merger session_id: 66925-0d3af49e41df worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-pr838-20260724145345 phase: claimed candidate_head: 4e269f3a7a51fa7da8abe5087349b656e279be07 target_branch: master target_branch_sha: 36fe4785eccf712b3bc0dec8583c798e8cf1f218 last_activity: 2026-07-24T18:54:10Z expires_at: 2026-07-24T19:04:10Z blocker: none
sysadmin merged commit 35714258f0 into master 2026-07-24 13:54:23 -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-24T18:54:25.437553+00:00` - last terminal: `approve` on PR #838 - PR state: `closed` (merged=True) - merge_commit_sha: `35714258f0560dddc96c4ceb8b36179322c48a78` - prior live_mutations_count: `2` - 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.
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#838