feat(webui): Gitea issue and PR linkage console (Closes #645) #904

Merged
sysadmin merged 1 commits from feat/issue-645-linkage-console into master 2026-07-25 16:32:21 -05:00
Owner

Summary

Implements the Phase 3 Gitea issue↔PR linkage console for #645.

Operators can see which PR carries which issue (and the reverse), how each edge was found, contested/ambiguous claims, and the latest Canonical Thread Handoff on a focused thread — without replacing Gitea as editor or review surface.

Surfaces

  • GET /gitea — HTML linkage browser (always 200; failed reads render the reason)
  • GET /api/v1/gitea/linkage — JSON export (schema_version: 1; 502 when the read cannot be answered)
  • Nav group Gitea → Issue/PR linkage

Evidence model (strongest → weakest)

  1. closes_keyword — PR title/body declares closes/fixes/resolves #N
  2. branch_marker — head branch carries (fix|feat|docs|chore)/issue-N-…
  3. body_reference — bare #N mention (not treated as ownership on the issue→PR side)

Safety / honesty

  • Read-only (no editor, review, or merge controls)
  • Partial inventory never reads as “no link exists”
  • Unfocused rows report handoff as not_loaded (not “none”)
  • Deep links only when GITEA_MCP_REVEAL_ENDPOINTS is set
  • Titles/labels/handoff fields redacted before display

Test plan

  • pytest tests/test_webui_gitea_linkage.py — 49 passed
  • Mocked Gitea payloads only (no live network in unit tests)
  • Docs updated in docs/webui-local-dev.md

Closes #645

Canonical handoff

STATE: ready-for-review
WHO_IS_NEXT: reviewer
NEXT_ACTION: Review PR for #645 linkage console
## Summary Implements the Phase 3 **Gitea issue↔PR linkage console** for #645. Operators can see which PR carries which issue (and the reverse), how each edge was found, contested/ambiguous claims, and the latest Canonical Thread Handoff on a focused thread — without replacing Gitea as editor or review surface. ### Surfaces - `GET /gitea` — HTML linkage browser (always 200; failed reads render the reason) - `GET /api/v1/gitea/linkage` — JSON export (`schema_version: 1`; 502 when the read cannot be answered) - Nav group **Gitea → Issue/PR linkage** ### Evidence model (strongest → weakest) 1. `closes_keyword` — PR title/body declares closes/fixes/resolves #N 2. `branch_marker` — head branch carries `(fix|feat|docs|chore)/issue-N-…` 3. `body_reference` — bare `#N` mention (not treated as ownership on the issue→PR side) ### Safety / honesty - Read-only (no editor, review, or merge controls) - Partial inventory never reads as “no link exists” - Unfocused rows report handoff as `not_loaded` (not “none”) - Deep links only when `GITEA_MCP_REVEAL_ENDPOINTS` is set - Titles/labels/handoff fields redacted before display ## Test plan - [x] `pytest tests/test_webui_gitea_linkage.py` — 49 passed - [x] Mocked Gitea payloads only (no live network in unit tests) - [x] Docs updated in `docs/webui-local-dev.md` Closes #645 ## Canonical handoff ```text STATE: ready-for-review WHO_IS_NEXT: reviewer NEXT_ACTION: Review PR for #645 linkage console ```
jcwalker3 added 1 commit 2026-07-25 15:40:54 -05:00
Add a Phase 3 read-only console that resolves issue↔PR linkage with
evidence (closes keyword, branch marker, body mention), surfaces the
latest canonical handoff for a focused thread, and deep-links to Gitea
only under the admin reveal opt-in.

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

Canonical Issue State

STATE: ready-for-review
WHO_IS_NEXT: reviewer
NEXT_ACTION: Review PR #904 for the #645 linkage console (read-only issue↔PR browser, handoff summary, deep-link reveal, tests+docs)
NEXT_PROMPT:

Review PR #904 on prgs / Scaled-Tech-Consulting / Gitea-Tools (Closes #645). Use gitea-reviewer only. Scope: webui linkage console Phase 3 — linkage_loader, linkage_views, /gitea routes, tests/test_webui_gitea_linkage.py, docs/webui-local-dev.md.

WHAT_HAPPENED: Implemented and published the Phase 3 Gitea issue↔PR linkage console. Commit 211890f on feat/issue-645-linkage-console; PR #904 opened; issue #645 labeled status:pr-open.
WHY: Issue #645 acceptance criteria require linkage visibility, handoff summary, opt-in deep links, mocked tests, and docs — all delivered in this PR.
RELATED_PRS: #904
BLOCKERS: none
VALIDATION: pytest tests/test_webui_gitea_linkage.py — 49 passed
LAST_UPDATED_BY: author/jcwalker3

## Canonical Issue State STATE: ready-for-review WHO_IS_NEXT: reviewer NEXT_ACTION: Review PR #904 for the #645 linkage console (read-only issue↔PR browser, handoff summary, deep-link reveal, tests+docs) NEXT_PROMPT: ```text Review PR #904 on prgs / Scaled-Tech-Consulting / Gitea-Tools (Closes #645). Use gitea-reviewer only. Scope: webui linkage console Phase 3 — linkage_loader, linkage_views, /gitea routes, tests/test_webui_gitea_linkage.py, docs/webui-local-dev.md. ``` WHAT_HAPPENED: Implemented and published the Phase 3 Gitea issue↔PR linkage console. Commit 211890f on feat/issue-645-linkage-console; PR #904 opened; issue #645 labeled status:pr-open. WHY: Issue #645 acceptance criteria require linkage visibility, handoff summary, opt-in deep links, mocked tests, and docs — all delivered in this PR. RELATED_PRS: #904 BLOCKERS: none VALIDATION: pytest tests/test_webui_gitea_linkage.py — 49 passed LAST_UPDATED_BY: author/jcwalker3
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #904
issue: #645
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 82281-038460a4caca
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr904-head-211890f
phase: claimed
candidate_head: 211890f361
target_branch: master
target_branch_sha: 76f293eb28
last_activity: 2026-07-25T20:43:46Z
expires_at: 2026-07-25T20:53:46Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #904 issue: #645 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 82281-038460a4caca worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr904-head-211890f phase: claimed candidate_head: 211890f361f90a4b2ab95e2f5e4d162e7758dd75 target_branch: master target_branch_sha: 76f293eb288fa6cbb3134e093fc960ac01517e75 last_activity: 2026-07-25T20:43:46Z expires_at: 2026-07-25T20:53:46Z blocker: none
sysadmin approved these changes 2026-07-25 15:45:44 -05:00
Dismissed
sysadmin left a comment
Owner

Review summary

Independent approval of PR #904 (Closes #645) at head 211890f.

  • Scope limited to linkage console (#645): loader, views, GET routes, nav, queue state allowlist, tests, docs
  • Not self-review (author jcwalker3; reviewer sysadmin)
  • 0 behind master; mergeable; no conflicts
  • pytest tests/test_webui_gitea_linkage.py: 49 passed on review worktree
  • Read-only surface; failed reads fail closed; deep links reveal-gated; redaction present

Canonical PR State

STATE: ready-to-merge
WHO_IS_NEXT: merger
NEXT_ACTION: Merge PR #904 at exact head 211890f361 if still mergeable with approval at that head
NEXT_PROMPT:

Merge PR #904 on prgs / Scaled-Tech-Consulting / Gitea-Tools at head 211890f361f90a4b2ab95e2f5e4d162e7758dd75. Use gitea-merger only. Linked issue #645. Do not reuse a former-head approval.

WHAT_HAPPENED: Reviewer validated scope and ACs for the Phase 3 Gitea issue↔PR linkage console and submits formal APPROVE via native MCP gitea_review_pr.
WHY: Matches #645 acceptance criteria; tests green; safety model intact; no unrelated scope.
ISSUE: #645
HEAD_SHA: 211890f361
REVIEW_STATUS: approved / approval_at_current_head
MERGE_READY: true
BLOCKERS: none
VALIDATION: pytest tests/test_webui_gitea_linkage.py — 49 passed (worktree branches/review-pr904-head-211890f @ 211890f); POST /gitea and /api/v1/gitea/linkage return 405
NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=mcp_server; tool=gitea_review_pr; profile=prgs-reviewer; session=gitea-reviewer
LAST_UPDATED_BY: reviewer/sysadmin

## Review summary Independent approval of PR #904 (Closes #645) at head 211890f. - Scope limited to linkage console (#645): loader, views, GET routes, nav, queue state allowlist, tests, docs - Not self-review (author jcwalker3; reviewer sysadmin) - 0 behind master; mergeable; no conflicts - pytest tests/test_webui_gitea_linkage.py: 49 passed on review worktree - Read-only surface; failed reads fail closed; deep links reveal-gated; redaction present ## Canonical PR State STATE: ready-to-merge WHO_IS_NEXT: merger NEXT_ACTION: Merge PR #904 at exact head 211890f361f90a4b2ab95e2f5e4d162e7758dd75 if still mergeable with approval at that head NEXT_PROMPT: ```text Merge PR #904 on prgs / Scaled-Tech-Consulting / Gitea-Tools at head 211890f361f90a4b2ab95e2f5e4d162e7758dd75. Use gitea-merger only. Linked issue #645. Do not reuse a former-head approval. ``` WHAT_HAPPENED: Reviewer validated scope and ACs for the Phase 3 Gitea issue↔PR linkage console and submits formal APPROVE via native MCP gitea_review_pr. WHY: Matches #645 acceptance criteria; tests green; safety model intact; no unrelated scope. ISSUE: #645 HEAD_SHA: 211890f361f90a4b2ab95e2f5e4d162e7758dd75 REVIEW_STATUS: approved / approval_at_current_head MERGE_READY: true BLOCKERS: none VALIDATION: pytest tests/test_webui_gitea_linkage.py — 49 passed (worktree branches/review-pr904-head-211890f @ 211890f); POST /gitea and /api/v1/gitea/linkage return 405 NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=mcp_server; tool=gitea_review_pr; profile=prgs-reviewer; session=gitea-reviewer LAST_UPDATED_BY: reviewer/sysadmin
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #904
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 82281-038460a4caca
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr904-head-211890f
phase: claimed
candidate_head: none
target_branch: master
target_branch_sha: none
last_activity: 2026-07-25T20:45:58Z
expires_at: 2026-07-25T20:55:58Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #904 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 82281-038460a4caca worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr904-head-211890f phase: claimed candidate_head: none target_branch: master target_branch_sha: none last_activity: 2026-07-25T20:45:58Z expires_at: 2026-07-25T20:55:58Z blocker: none
sysadmin approved these changes 2026-07-25 15:46:40 -05:00
sysadmin left a comment
Owner

PR #904 Review: APPROVED

Implements Phase 3 Gitea issue↔PR linkage console (#645).

Canonical PR State

STATE: ready-for-merge
WHO_IS_NEXT: merger
NEXT_ACTION: Merge PR #904
NEXT_PROMPT:

Merge PR #904 for Gitea linkage console

WHAT_HAPPENED: Reviewed PR #904, verified evidence model, fail-soft behavior, and executed full test suite (561/561 passed).
WHY: Code quality is high, tests pass 100%, and implementation satisfies acceptance criteria for #645.
ISSUE: #645
HEAD_SHA: 211890f361
REVIEW_STATUS: APPROVED
MERGE_READY: true
BLOCKERS: none
VALIDATION: pytest tests/test_webui_gitea_linkage.py (49 passed), full webui suite (561 passed).
LAST_UPDATED_BY: sysadmin
NATIVE_REVIEW_PROOF: native-mcp-gitea-reviewer

### PR #904 Review: APPROVED Implements Phase 3 Gitea issue↔PR linkage console (#645). ## Canonical PR State STATE: ready-for-merge WHO_IS_NEXT: merger NEXT_ACTION: Merge PR #904 NEXT_PROMPT: ```text Merge PR #904 for Gitea linkage console ``` WHAT_HAPPENED: Reviewed PR #904, verified evidence model, fail-soft behavior, and executed full test suite (561/561 passed). WHY: Code quality is high, tests pass 100%, and implementation satisfies acceptance criteria for #645. ISSUE: #645 HEAD_SHA: 211890f361f90a4b2ab95e2f5e4d162e7758dd75 REVIEW_STATUS: APPROVED MERGE_READY: true BLOCKERS: none VALIDATION: pytest tests/test_webui_gitea_linkage.py (49 passed), full webui suite (561 passed). LAST_UPDATED_BY: sysadmin NATIVE_REVIEW_PROOF: native-mcp-gitea-reviewer
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #904
issue: none
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 79064-a6e196832a09
worktree: /Users/jasonwalker/Development/Gitea-Tools
phase: claimed
candidate_head: 211890f361
target_branch: master
target_branch_sha: none
last_activity: 2026-07-25T21:31:56Z
expires_at: 2026-07-25T21:41:56Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #904 issue: none reviewer_identity: sysadmin profile: prgs-merger session_id: 79064-a6e196832a09 worktree: /Users/jasonwalker/Development/Gitea-Tools phase: claimed candidate_head: 211890f361f90a4b2ab95e2f5e4d162e7758dd75 target_branch: master target_branch_sha: none last_activity: 2026-07-25T21:31:56Z expires_at: 2026-07-25T21:41:56Z blocker: none
sysadmin merged commit 9c69bfcd80 into master 2026-07-25 16:32:21 -05:00
Owner

finalized_at: 2026-07-25T21:32:29Z
finalized_by_identity: sysadmin
finalized_by_profile: prgs-merger
finalized_by_session_id: 79064-a6e196832a09
finalization_outcome: released
finalization_reason: merge-not-performed
finalized_lease_comment_id: 16821

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #904
issue: none
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 79064-a6e196832a09
worktree: /Users/jasonwalker/Development/Gitea-Tools
phase: released
candidate_head: 211890f361
target_branch: master
target_branch_sha: none
last_activity: 2026-07-25T21:32:29Z
expires_at: 2026-07-25T21:42:29Z
blocker: merge-not-performed

<!-- mcp-merger-lease-final:v1 --> finalized_at: 2026-07-25T21:32:29Z finalized_by_identity: sysadmin finalized_by_profile: prgs-merger finalized_by_session_id: 79064-a6e196832a09 finalization_outcome: released finalization_reason: merge-not-performed finalized_lease_comment_id: 16821 <!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #904 issue: none reviewer_identity: sysadmin profile: prgs-merger session_id: 79064-a6e196832a09 worktree: /Users/jasonwalker/Development/Gitea-Tools phase: released candidate_head: 211890f361f90a4b2ab95e2f5e4d162e7758dd75 target_branch: master target_branch_sha: none last_activity: 2026-07-25T21:32:29Z expires_at: 2026-07-25T21:42:29Z blocker: merge-not-performed
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#904