[epic] Release readiness = running ward on foreign stacks (split-stack: git host + tracker) #633

Open
opened 2026-07-07 21:46:43 +00:00 by coilyco-ops · 0 comments
Member

What "release" means for ward. Not a version bump and not just the public mirror going live. Release means an engineer on a stack that is not this one - GitHub repo with a Trello board, GitLab Enterprise with Shortcut - can adopt ward against their own systems without editing Go source. The work is finding those people, getting them interested, and filling the compat gap each one hits.

Current state (grounded in the tree).

  • The agent seam is already a clean port: internal/agentsapi with adapters under internal/agents/{claude,codex,goose,opencode}. Adding an agent means implementing one interface.
  • The forge seam (git host plus its own issues) already has a real port: issueForge in cmd/ward/forge.go, a forge dimension selected by WARD_FORGE, and hostForgeClient as the factory. Forgejo (forgejo_ops.go) and GitHub (the github path in forge.go, resolveGitHubToken, docs/agent-github.md) both implement it. Landed under #489.
  • The tracker as a separate system (Trello, Shortcut, Jira, Linear) has no port. Issues are still sourced through issueForge, which assumes the tracker and the git host are one system. This is the gap that blocks every split-stack user.
  • The container runtime is docker-only, resolved by literal name.

The one distinction. ward was born on Forgejo, where git host and tracker are the same system. On the target stacks they are two. Splitting "where code lives" from "where issues live" is the change that turns split-stack support from a fork into an adapter. Everything under this epic is downstream of it.

Children (sub-issues):

  • #634 - Split issueForge into a git-host port and a Tracker port (the enabling refactor).
  • #635 - GitLab forge adapter.
  • #636 - Trello tracker adapter.
  • #637 - Shortcut tracker adapter.
  • #638 - Jira and Linear tracker adapters (backlog).
  • #639 - Container-runtime seam for podman/nerdctl.
  • #396 - Promote the runner.go org allowlist (and sibling inventory lists) to config. Already tracked as audit bucket D; the release-readiness / foreign-org angle is noted in a comment there rather than duplicated here.
  • #640 - docs/compat-surface.md plus a CONTRIBUTING compat section.
  • #641 - Document the cli-guard build-time dependency for external self-builders.

Done when. A documented, tested path exists for at least one split stack (GitHub + Trello) with no Go edits required by the adopter.


Milestone: foreign-stack compat. Filed from the read-only director surface (she/her), part of the release-readiness issue batch.

**What "release" means for ward.** Not a version bump and not just the public mirror going live. Release means an engineer on a stack that is not this one - GitHub repo with a Trello board, GitLab Enterprise with Shortcut - can adopt ward against their own systems without editing Go source. The work is finding those people, getting them interested, and filling the compat gap each one hits. **Current state (grounded in the tree).** - The **agent** seam is already a clean port: `internal/agentsapi` with adapters under `internal/agents/{claude,codex,goose,opencode}`. Adding an agent means implementing one interface. - The **forge** seam (git host plus its own issues) already has a real port: `issueForge` in `cmd/ward/forge.go`, a `forge` dimension selected by `WARD_FORGE`, and `hostForgeClient` as the factory. Forgejo (`forgejo_ops.go`) and GitHub (the github path in `forge.go`, `resolveGitHubToken`, `docs/agent-github.md`) both implement it. Landed under #489. - The **tracker as a separate system** (Trello, Shortcut, Jira, Linear) has no port. Issues are still sourced through `issueForge`, which assumes the tracker and the git host are one system. This is the gap that blocks every split-stack user. - The **container runtime** is docker-only, resolved by literal name. **The one distinction.** ward was born on Forgejo, where git host and tracker are the same system. On the target stacks they are two. Splitting "where code lives" from "where issues live" is the change that turns split-stack support from a fork into an adapter. Everything under this epic is downstream of it. **Children (sub-issues):** - #634 - Split `issueForge` into a git-host port and a Tracker port (the enabling refactor). - #635 - GitLab forge adapter. - #636 - Trello tracker adapter. - #637 - Shortcut tracker adapter. - #638 - Jira and Linear tracker adapters (backlog). - #639 - Container-runtime seam for podman/nerdctl. - #396 - Promote the `runner.go` org allowlist (and sibling inventory lists) to config. Already tracked as audit bucket D; the release-readiness / foreign-org angle is noted in a comment there rather than duplicated here. - #640 - `docs/compat-surface.md` plus a CONTRIBUTING compat section. - #641 - Document the cli-guard build-time dependency for external self-builders. **Done when.** A documented, tested path exists for at least one split stack (GitHub + Trello) with no Go edits required by the adopter. --- Milestone: foreign-stack compat. Filed from the read-only director surface (she/her), part of the release-readiness issue batch.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
coilyco-flight-deck/ward#633
No description provided.