Author worktree binding can disappear mid-session and mutation guards enforce it inconsistently #618

Closed
opened 2026-07-09 21:21:12 -05:00 by jcwalker3 · 3 comments
Owner

Problem

The author MCP runtime can remain bound to a role worktree path that no longer exists on disk.

Observed case:

  • GITEA_AUTHOR_WORKTREE pointed to branches/mcp-author-clean-ns
  • that path did not exist on disk
  • it was not present in git worktree list
  • runtime context showed preflight_workspace.inspected_git_root: null

create_issue correctly failed closed under the branches-only / worktree-existence guard.

However, an earlier create_issue_comment mutation succeeded from the same broader author environment. This suggests mutation guard behavior is inconsistent between issue creation and issue comment paths.

Impact

This creates confusing and unsafe behavior:

  • one mutation path blocks because the bound worktree is missing
  • another mutation path may still mutate
  • the runtime may appear partially healthy
  • author sessions cannot reliably know whether the namespace is safe for mutation
  • missing worktree binding becomes an environment/tooling blocker instead of a clear early runtime failure

Required behavior

If a role-bound worktree path is configured but missing, the MCP runtime must fail early and consistently before any mutation.

All author mutation tools should agree on workspace safety.

At minimum, these paths must not disagree:

  • create_issue
  • create_issue_comment
  • label mutations
  • issue status mutations
  • PR/review/merge/reconcile mutations where applicable

Acceptance criteria

  1. Runtime context fails or clearly reports an unhealthy state when a configured role-bound worktree path does not exist.

  2. The error must identify:

    • role/profile
    • configured worktree path
    • whether the path exists
    • whether it appears in git worktree list
    • whether inspected_git_root is null
    • operator recovery instructions
  3. create_issue and create_issue_comment must enforce the same worktree-existence rule.

  4. If GITEA_AUTHOR_WORKTREE points to a missing path, all author mutation tools must fail closed before API mutation.

  5. The runtime should return a clear blocker message:
    bound worktree missing; operator must recreate or repoint the worktree and reconnect

  6. Add tests for:

    • missing GITEA_AUTHOR_WORKTREE
    • deleted role-bound author worktree
    • create_issue blocked
    • create_issue_comment blocked consistently
    • runtime context reports inspected_git_root=null
    • operator recovery by recreating/repointing the worktree
  7. Add or update canonical [THREAD STATE LEDGER] example for this blocker class.

Related issues

Related but not duplicates:

  • #450 — create_issue worktree_path fail-closed
  • #560 — create_issue_comment worktree binding
  • #460 — branches-only guard vs runtime_context agreement
  • #510 — workspace binding isolation
  • #610 — resolver vs parity disagreement on stale runtime
  • #617 — auto-mode classifier mutation-budget issue

Desired outcome

A missing role-bound worktree should be a clear environment/tooling blocker.

The MCP runtime must not allow one author mutation path to proceed while another blocks on the same missing worktree binding.

## Problem The author MCP runtime can remain bound to a role worktree path that no longer exists on disk. Observed case: - `GITEA_AUTHOR_WORKTREE` pointed to `branches/mcp-author-clean-ns` - that path did not exist on disk - it was not present in `git worktree list` - runtime context showed `preflight_workspace.inspected_git_root: null` `create_issue` correctly failed closed under the branches-only / worktree-existence guard. However, an earlier `create_issue_comment` mutation succeeded from the same broader author environment. This suggests mutation guard behavior is inconsistent between issue creation and issue comment paths. ## Impact This creates confusing and unsafe behavior: - one mutation path blocks because the bound worktree is missing - another mutation path may still mutate - the runtime may appear partially healthy - author sessions cannot reliably know whether the namespace is safe for mutation - missing worktree binding becomes an environment/tooling blocker instead of a clear early runtime failure ## Required behavior If a role-bound worktree path is configured but missing, the MCP runtime must fail early and consistently before any mutation. All author mutation tools should agree on workspace safety. At minimum, these paths must not disagree: - `create_issue` - `create_issue_comment` - label mutations - issue status mutations - PR/review/merge/reconcile mutations where applicable ## Acceptance criteria 1. Runtime context fails or clearly reports an unhealthy state when a configured role-bound worktree path does not exist. 2. The error must identify: - role/profile - configured worktree path - whether the path exists - whether it appears in `git worktree list` - whether `inspected_git_root` is null - operator recovery instructions 3. `create_issue` and `create_issue_comment` must enforce the same worktree-existence rule. 4. If `GITEA_AUTHOR_WORKTREE` points to a missing path, all author mutation tools must fail closed before API mutation. 5. The runtime should return a clear blocker message: `bound worktree missing; operator must recreate or repoint the worktree and reconnect` 6. Add tests for: - missing `GITEA_AUTHOR_WORKTREE` - deleted role-bound author worktree - `create_issue` blocked - `create_issue_comment` blocked consistently - runtime context reports `inspected_git_root=null` - operator recovery by recreating/repointing the worktree 7. Add or update canonical `[THREAD STATE LEDGER]` example for this blocker class. ## Related issues Related but not duplicates: - #450 — create_issue worktree_path fail-closed - #560 — create_issue_comment worktree binding - #460 — branches-only guard vs runtime_context agreement - #510 — workspace binding isolation - #610 — resolver vs parity disagreement on stale runtime - #617 — auto-mode classifier mutation-budget issue ## Desired outcome A missing role-bound worktree should be a clear environment/tooling blocker. The MCP runtime must not allow one author mutation path to proceed while another blocks on the same missing worktree binding.
jcwalker3 added the bugtype:guardrailstatus:readymcp-health labels 2026-07-09 21:21:12 -05:00
jcwalker3 added status:in-progress and removed status:ready labels 2026-07-19 22:26:52 -05:00
Author
Owner

Issue claim heartbeat

<!-- gitea-issue-claim-heartbeat:v1 --> **Issue claim heartbeat** - kind: claim - issue: #618 - branch: fix/issue-618-author-worktree-resolution - phase: claimed - profile: prgs-author - pr: none - blocker: none - next_action: create worktree and begin implementation
Author
Owner

Canonical Issue State

STATE: in-progress; local implementation complete; remote publication fails closed on pre-fix author MCP control-checkout binding
WHO_IS_NEXT: user
NEXT_ACTION: reconnect author MCP bound to the #618 worktree, then publish local commit via gitea_commit_files + gitea_create_pr
NEXT_PROMPT:

Reconnect author MCP with GITEA_AUTHOR_WORKTREE=/Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution (launch from that worktree). Then gitea_whoami + gitea_resolve_task_capability(commit_files) + gitea_commit_files / gitea_create_pr for branch fix/issue-618-author-worktree-resolution (Closes #618). Local commit cbf56ccd84d81f509e9595fedac82848f8dd5de6 is already tested.

WHAT_HAPPENED: Durable author worktree resolution implemented and tested locally on branch fix/issue-618-author-worktree-resolution. MCP gitea_commit_files from the live control-checkout-bound author session fails closed (the defect under repair). No shell push or direct API used.
WHY: Author mutations must never silently fall back to control/master; missing role-bound worktrees must fail closed consistently before any mutation.
RELATED_PRS: none yet (publication pending user reconnect)
BLOCKERS: environment/tooling — live author MCP process bound to control checkout; gitea_commit_files has no worktree_path parameter to rebind in-session
VALIDATION: 48 related unit tests passed (tests/test_issue_618_author_worktree_resolution.py + workspace guards)
LAST_UPDATED_BY: author session (jcwalker3)

[THREAD STATE LEDGER] Issue #618 — durable author worktree fix present locally; publication path fails closed on pre-fix MCP binding

What is true now:

  • Issue state: open, claimed status:in-progress, lock live on branch fix/issue-618-author-worktree-resolution
  • Server-side decision state: no server-side code mutation posted yet
  • Local verdict/state: implementation complete and tested in worktree; local commit cbf56ccd84d81f509e9595fedac82848f8dd5de6
  • Latest known validation: 48 related unit tests passed
  • Worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution

What changed:

  • Durable author worktree resolution: explicit worktree_path, env, or active author issue lock; never silent control/master fallback
  • Missing configured bindings fail closed: bound worktree missing; operator must recreate or repoint the worktree and reconnect
  • Runtime/preflight health fields and THREAD STATE LEDGER example bound_worktree_missing_blocker

What is blocked:

  • Blocker classification: environment/tooling blocker
  • Detail: live author MCP still runs pre-fix control-checkout binding; gitea_commit_files cannot rebind via worktree_path

Who/what acts next:

  • Next actor: user
  • Required action: reconnect author MCP with GITEA_AUTHOR_WORKTREE set to /Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution, then gitea_commit_files + gitea_create_pr
  • Do not do: git push, direct Gitea API, or credential shell fallback; do not retry commit_files from control-checkout-bound MCP without reconnect
  • Resume from: healthy author MCP binding to the #618 worktree, then publish local commit cbf56cc
## Canonical Issue State STATE: in-progress; local implementation complete; remote publication fails closed on pre-fix author MCP control-checkout binding WHO_IS_NEXT: user NEXT_ACTION: reconnect author MCP bound to the #618 worktree, then publish local commit via gitea_commit_files + gitea_create_pr NEXT_PROMPT: ```text Reconnect author MCP with GITEA_AUTHOR_WORKTREE=/Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution (launch from that worktree). Then gitea_whoami + gitea_resolve_task_capability(commit_files) + gitea_commit_files / gitea_create_pr for branch fix/issue-618-author-worktree-resolution (Closes #618). Local commit cbf56ccd84d81f509e9595fedac82848f8dd5de6 is already tested. ``` WHAT_HAPPENED: Durable author worktree resolution implemented and tested locally on branch fix/issue-618-author-worktree-resolution. MCP gitea_commit_files from the live control-checkout-bound author session fails closed (the defect under repair). No shell push or direct API used. WHY: Author mutations must never silently fall back to control/master; missing role-bound worktrees must fail closed consistently before any mutation. RELATED_PRS: none yet (publication pending user reconnect) BLOCKERS: environment/tooling — live author MCP process bound to control checkout; gitea_commit_files has no worktree_path parameter to rebind in-session VALIDATION: 48 related unit tests passed (tests/test_issue_618_author_worktree_resolution.py + workspace guards) LAST_UPDATED_BY: author session (jcwalker3) [THREAD STATE LEDGER] Issue #618 — durable author worktree fix present locally; publication path fails closed on pre-fix MCP binding What is true now: - Issue state: open, claimed status:in-progress, lock live on branch fix/issue-618-author-worktree-resolution - Server-side decision state: no server-side code mutation posted yet - Local verdict/state: implementation complete and tested in worktree; local commit cbf56ccd84d81f509e9595fedac82848f8dd5de6 - Latest known validation: 48 related unit tests passed - Worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution What changed: - Durable author worktree resolution: explicit worktree_path, env, or active author issue lock; never silent control/master fallback - Missing configured bindings fail closed: bound worktree missing; operator must recreate or repoint the worktree and reconnect - Runtime/preflight health fields and THREAD STATE LEDGER example bound_worktree_missing_blocker What is blocked: - Blocker classification: environment/tooling blocker - Detail: live author MCP still runs pre-fix control-checkout binding; gitea_commit_files cannot rebind via worktree_path Who/what acts next: - Next actor: user - Required action: reconnect author MCP with GITEA_AUTHOR_WORKTREE set to /Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution, then gitea_commit_files + gitea_create_pr - Do not do: git push, direct Gitea API, or credential shell fallback; do not retry commit_files from control-checkout-bound MCP without reconnect - Resume from: healthy author MCP binding to the #618 worktree, then publish local commit cbf56cc
Owner

Canonical Issue State

STATE: open; AUTHOR_RECOVERY_REQUIRED; local implementation complete at cbf56ccd; not on master; not pushed; no PR
WHO_IS_NEXT: author
NEXT_ACTION: after PR #767 releases author WIP slot — recover lock on fix/issue-618-author-worktree-resolution, rebase onto current prgs/master, re-run #618 tests, publish and open PR (Closes #618); do not open PR from reconciler
NEXT_PROMPT:

After PR #767 releases the exclusive author WIP slot: reconnect prgs-author with GITEA_AUTHOR_WORKTREE=/Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution. gitea_whoami + gitea_lock_issue adoption/recovery for #618 on branch fix/issue-618-author-worktree-resolution (clean HEAD cbf56ccd84d81f509e9595fedac82848f8dd5de6; prior pid 68230 dead). Rebase onto prgs/master, re-run tests/test_issue_618_author_worktree_resolution.py and related workspace guards, then sanctioned publish + gitea_create_pr (Closes #618). Do not redesign; do not delete preserve/issue-618-cbf56cc.

WHAT_HAPPENED: Supervised reconciler disposition for #618 only. Candidate cbf56ccd84d81f509e9595fedac82848f8dd5de6 is unique vs master edaeede, clean worktree, never pushed, no PR. Master lacks bound_worktree_missing / resolve_durable_author_worktree / #618 tests. Classified AUTHOR_RECOVERY_REQUIRED; artifacts preserved; no PR created this session.
WHY: #618 required durable author worktree resolution remains absent from master; local commit is the complete intended fix and must be recovered by author after WIP slot free.
RELATED_PRS: none for #618; open author WIP is PR #767 (Closes #607) — do not open #618 PR until that slot releases
BLOCKERS: environment/tooling blocker — local-only unpublished candidate; master missing ACs; exclusive author WIP held by open PR #767; prior publication waited on worktree-bound author MCP
VALIDATION: ancestry/patch-id/blob compare vs prgs/master; ls-remote empty for 618; PR inventory open_count=1 (#767 only); file lock pid 68230 dead; CP leases have no work_number 618; worktree porcelain empty at cbf56ccd; comment 13065 documents same SHA
LAST_UPDATED_BY: reconciler session (sysadmin / prgs-reconciler)

Supervised branch disposition — AUTHOR_RECOVERY_REQUIRED

Profile: prgs-reconciler · Identity: sysadmin · Role: reconciler
Disposition iteration: one supervised pass for Issue #618 only
Date: 2026-07-20

Candidate (preserve)

Field Value
Branch fix/issue-618-author-worktree-resolution
Exact candidate SHA cbf56ccd84d81f509e9595fedac82848f8dd5de6
Parent fcf6981b1ba4d8d5072357ba13be0fdb6baa07ff
Worktree /Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution
Cleanliness clean; HEAD equals candidate SHA
Preserve ref preserve/issue-618-cbf56cc → same SHA
Remote branch on prgs not present
Open PR using branch none

Comparison vs master edaeede250f46f361784061f025ab0e867172d2c

  • Unique commit: 1 (cbf56cc)
  • Stable patch-id: 5a96f15392e16c38777396b5604e97a59f259633 (no master match)
  • All 9 touched blobs DIFF vs master
  • Master lacks: bound_worktree_missing, resolve_durable_author_worktree, tests/test_issue_618_author_worktree_resolution.py, canonical missing-worktree message
  • Diff: 9 files, +1335/−68
  • Later master work (#723/#766, #768/#769) does not supersede #618

Missing on master / AC status

All seven #618 acceptance criteria are present on candidate and missing on master (durable resolve, structured missing-binding errors, create_issue ≡ create_issue_comment, fail-closed mutations, canonical message, 16 focused tests, ledger example).

Ownership

  • File lock exists; pid 68230 dead; work lease time-expired; no CP lease for 618
  • Comment 13065 proves prior session produced exactly this SHA
  • No dirty residue outside the candidate commit

Classification

AUTHOR_RECOVERY_REQUIRED (not LANDED_EQUIVALENT / INCOMPLETE_OR_CONTAMINATED / PRESERVE_AMBIGUOUS).

Preserve branch, worktree, and preserve ref. Do not create PR from reconciler.

[THREAD STATE LEDGER] Issue #618 — AUTHOR_RECOVERY_REQUIRED; local complete at cbf56ccd; master lacks behavior; no remote branch/PR

What is true now:

  • Issue state: open; labels include status:in-progress; no open PR for #618
  • Server-side decision state: AUTHOR_RECOVERY_REQUIRED disposition recorded by prgs-reconciler; no PR create/close/merge performed this session
  • Local verdict/state: candidate commit cbf56ccd84d81f509e9595fedac82848f8dd5de6 is complete, clean, and preserved; master edaeede lacks #618 behavior
  • Latest known validation: comment 13065 reported 48 related unit tests passed at implementation time; master lacks the suite
  • Worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution at cbf56ccd (clean)
  • File lock: present, pid 68230 dead, work lease time-expired; no control-plane lease for 618
  • Open author WIP occupying slot: PR #767 (Closes #607)

What changed:

  • Supervised reconciler disposition completed for #618 only
  • Proven: unique unpublished commit vs master; not patch-equivalent; no superseding landed fix
  • Durable classification set to AUTHOR_RECOVERY_REQUIRED with preserve-all artifacts

What is blocked:

  • Blocker classification: environment/tooling blocker
  • Detail: #618 behavior is not on master; candidate is local-only (never pushed); exclusive author WIP is currently held by open PR #767 / issue #607; prior author publication path waited on healthy worktree-bound author MCP

Who/what acts next:

  • Next actor: author
  • Required action: after #767 releases author WIP slot — adopt/recover #618 lock on fix/issue-618-author-worktree-resolution, rebase onto current prgs/master, re-run #618 tests, publish and open/update the #618 PR from candidate behavior at cbf56ccd…
  • Do not do: delete the branch/worktree/preserve ref; open a PR from reconciler; redesign from scratch; allocate unrelated work; touch #607/#767, #681, #695, #723, or other worktrees; force-push discard of cbf56ccd without preserve proof
  • Resume from: author MCP rebound to the #618 worktree after #767 WIP release
## Canonical Issue State STATE: open; AUTHOR_RECOVERY_REQUIRED; local implementation complete at cbf56ccd; not on master; not pushed; no PR WHO_IS_NEXT: author NEXT_ACTION: after PR #767 releases author WIP slot — recover lock on fix/issue-618-author-worktree-resolution, rebase onto current prgs/master, re-run #618 tests, publish and open PR (Closes #618); do not open PR from reconciler NEXT_PROMPT: ```text After PR #767 releases the exclusive author WIP slot: reconnect prgs-author with GITEA_AUTHOR_WORKTREE=/Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution. gitea_whoami + gitea_lock_issue adoption/recovery for #618 on branch fix/issue-618-author-worktree-resolution (clean HEAD cbf56ccd84d81f509e9595fedac82848f8dd5de6; prior pid 68230 dead). Rebase onto prgs/master, re-run tests/test_issue_618_author_worktree_resolution.py and related workspace guards, then sanctioned publish + gitea_create_pr (Closes #618). Do not redesign; do not delete preserve/issue-618-cbf56cc. ``` WHAT_HAPPENED: Supervised reconciler disposition for #618 only. Candidate cbf56ccd84d81f509e9595fedac82848f8dd5de6 is unique vs master edaeede, clean worktree, never pushed, no PR. Master lacks bound_worktree_missing / resolve_durable_author_worktree / #618 tests. Classified AUTHOR_RECOVERY_REQUIRED; artifacts preserved; no PR created this session. WHY: #618 required durable author worktree resolution remains absent from master; local commit is the complete intended fix and must be recovered by author after WIP slot free. RELATED_PRS: none for #618; open author WIP is PR #767 (Closes #607) — do not open #618 PR until that slot releases BLOCKERS: environment/tooling blocker — local-only unpublished candidate; master missing ACs; exclusive author WIP held by open PR #767; prior publication waited on worktree-bound author MCP VALIDATION: ancestry/patch-id/blob compare vs prgs/master; ls-remote empty for *618*; PR inventory open_count=1 (#767 only); file lock pid 68230 dead; CP leases have no work_number 618; worktree porcelain empty at cbf56ccd; comment 13065 documents same SHA LAST_UPDATED_BY: reconciler session (sysadmin / prgs-reconciler) ## Supervised branch disposition — AUTHOR_RECOVERY_REQUIRED **Profile:** prgs-reconciler · **Identity:** sysadmin · **Role:** reconciler **Disposition iteration:** one supervised pass for Issue #618 only **Date:** 2026-07-20 ### Candidate (preserve) | Field | Value | |---|---| | Branch | `fix/issue-618-author-worktree-resolution` | | Exact candidate SHA | `cbf56ccd84d81f509e9595fedac82848f8dd5de6` | | Parent | `fcf6981b1ba4d8d5072357ba13be0fdb6baa07ff` | | Worktree | `/Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution` | | Cleanliness | clean; HEAD equals candidate SHA | | Preserve ref | `preserve/issue-618-cbf56cc` → same SHA | | Remote branch on prgs | not present | | Open PR using branch | none | ### Comparison vs master `edaeede250f46f361784061f025ab0e867172d2c` - Unique commit: 1 (`cbf56cc`) - Stable patch-id: `5a96f15392e16c38777396b5604e97a59f259633` (no master match) - All 9 touched blobs DIFF vs master - Master lacks: `bound_worktree_missing`, `resolve_durable_author_worktree`, `tests/test_issue_618_author_worktree_resolution.py`, canonical missing-worktree message - Diff: 9 files, +1335/−68 - Later master work (#723/#766, #768/#769) does not supersede #618 ### Missing on master / AC status All seven #618 acceptance criteria are **present on candidate** and **missing on master** (durable resolve, structured missing-binding errors, create_issue ≡ create_issue_comment, fail-closed mutations, canonical message, 16 focused tests, ledger example). ### Ownership - File lock exists; pid **68230 dead**; work lease **time-expired**; no CP lease for 618 - Comment 13065 proves prior session produced **exactly** this SHA - No dirty residue outside the candidate commit ### Classification **AUTHOR_RECOVERY_REQUIRED** (not LANDED_EQUIVALENT / INCOMPLETE_OR_CONTAMINATED / PRESERVE_AMBIGUOUS). Preserve branch, worktree, and preserve ref. Do not create PR from reconciler. [THREAD STATE LEDGER] Issue #618 — AUTHOR_RECOVERY_REQUIRED; local complete at cbf56ccd; master lacks behavior; no remote branch/PR What is true now: - Issue state: open; labels include status:in-progress; no open PR for #618 - Server-side decision state: AUTHOR_RECOVERY_REQUIRED disposition recorded by prgs-reconciler; no PR create/close/merge performed this session - Local verdict/state: candidate commit cbf56ccd84d81f509e9595fedac82848f8dd5de6 is complete, clean, and preserved; master edaeede lacks #618 behavior - Latest known validation: comment 13065 reported 48 related unit tests passed at implementation time; master lacks the suite - Worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-618-author-worktree-resolution at cbf56ccd (clean) - File lock: present, pid 68230 dead, work lease time-expired; no control-plane lease for 618 - Open author WIP occupying slot: PR #767 (Closes #607) What changed: - Supervised reconciler disposition completed for #618 only - Proven: unique unpublished commit vs master; not patch-equivalent; no superseding landed fix - Durable classification set to AUTHOR_RECOVERY_REQUIRED with preserve-all artifacts What is blocked: - Blocker classification: environment/tooling blocker - Detail: #618 behavior is not on master; candidate is local-only (never pushed); exclusive author WIP is currently held by open PR #767 / issue #607; prior author publication path waited on healthy worktree-bound author MCP Who/what acts next: - Next actor: author - Required action: after #767 releases author WIP slot — adopt/recover #618 lock on fix/issue-618-author-worktree-resolution, rebase onto current prgs/master, re-run #618 tests, publish and open/update the #618 PR from candidate behavior at cbf56ccd… - Do not do: delete the branch/worktree/preserve ref; open a PR from reconciler; redesign from scratch; allocate unrelated work; touch #607/#767, #681, #695, #723, or other worktrees; force-push discard of cbf56ccd without preserve proof - Resume from: author MCP rebound to the #618 worktree after #767 WIP release
jcwalker3 added status:pr-open and removed status:in-progress labels 2026-07-20 12:56:31 -05:00
sysadmin removed the status:pr-open label 2026-07-20 13:31:17 -05:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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