Add docs/compat-surface.md and make the compat surface first-class in CONTRIBUTING #640

Closed
opened 2026-07-07 21:47:17 +00:00 by coilyco-ops · 2 comments
Member

Parent epic: #633. References: #634, #635, #639, #396. Can land before them as the map.

Context. ward drives an agent, a git host, an issue tracker, and a container runtime it does not own. Each is a seam with a defined port or a known gap, but that map lives only in maintainers' heads today. An outside contributor has no single place that says "here is the seam for your stack and here is exactly what your adapter must implement."

Proposed change.

  • Add docs/compat-surface.md: one section per seam (agent, forge, tracker, container runtime, local git and container image, cli-guard build dep), each stating what it is, the port that implements it, the reference implementation, what a new adapter must satisfy, and the adopter friction. Include an "adding your stack" quick map (GitHub+Issues, GitLab+Issues, GitHub+Trello, GitLab+Shortcut, any + podman) and an "on embedding" note explaining that ward embeds its own assets via go:embed and deliberately does not vendor docker, git, or agent CLIs.
  • Add a CONTRIBUTING section "Extending ward to your stack" that states the rule (add a stack by implementing an adapter behind a port, never by editing unrelated packages) and lists high-value contribution venues ranked by adopters unblocked: the Tracker port, GitLab forge, Trello and Shortcut trackers, Jira and Linear, podman runtime, new agent adapters.

Acceptance criteria.

  • The doc's seam list matches the code: internal/agentsapi, issueForge/forge.go, the tracker gap, the docker literal, go:embed assets, the cli-guard module dep.
  • CONTRIBUTING links the doc and makes the port rule explicit.
  • A cold reader on a foreign stack can find, from CONTRIBUTING alone, which seam they extend and where the reference adapter is.

Note. Full drafts of both files already exist and can be dropped in.


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

Parent epic: #633. **References:** #634, #635, #639, #396. Can land before them as the map. **Context.** ward drives an agent, a git host, an issue tracker, and a container runtime it does not own. Each is a seam with a defined port or a known gap, but that map lives only in maintainers' heads today. An outside contributor has no single place that says "here is the seam for your stack and here is exactly what your adapter must implement." **Proposed change.** - Add `docs/compat-surface.md`: one section per seam (agent, forge, tracker, container runtime, local git and container image, cli-guard build dep), each stating what it is, the port that implements it, the reference implementation, what a new adapter must satisfy, and the adopter friction. Include an "adding your stack" quick map (GitHub+Issues, GitLab+Issues, GitHub+Trello, GitLab+Shortcut, any + podman) and an "on embedding" note explaining that ward embeds its own assets via `go:embed` and deliberately does not vendor docker, git, or agent CLIs. - Add a CONTRIBUTING section "Extending ward to your stack" that states the rule (add a stack by implementing an adapter behind a port, never by editing unrelated packages) and lists high-value contribution venues ranked by adopters unblocked: the Tracker port, GitLab forge, Trello and Shortcut trackers, Jira and Linear, podman runtime, new agent adapters. **Acceptance criteria.** - The doc's seam list matches the code: `internal/agentsapi`, `issueForge`/`forge.go`, the tracker gap, the docker literal, `go:embed` assets, the cli-guard module dep. - CONTRIBUTING links the doc and makes the port rule explicit. - A cold reader on a foreign stack can find, from CONTRIBUTING alone, which seam they extend and where the reference adapter is. **Note.** Full drafts of both files already exist and can be dropped in. --- Milestone: foreign-stack compat. Filed from the read-only director surface (she/her), part of the release-readiness issue batch.
Author
Member

WARD-RESERVATION: held 🔒

reservation details

Holder: container engineer-codex-ward-640 on host kais-macbook-pro-2.local.

Reserved by ward agent --harness codex (reserved 2026-07-09T17:39:13Z). Concurrent ward agent runs are blocked until it finishes or the reservation goes stale (1h TTL). --force overrides.

Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh. That is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).

run seed context — what this run is carrying (ward#609)
  • Resolved: coilyco-flight-deck/ward#640 · branch issue-640 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-ward-640 · ward v0.493.0 · dispatched 2026-07-09T17:39:13Z
  • Comment thread: 0 included in the pre-flight read, 0 stripped (ward's own automated comments).

Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.493.0).

— Codex, via ward agent

<!-- ward-agent-reservation --> WARD-RESERVATION: held 🔒 <details><summary>reservation details</summary> Holder: container `engineer-codex-ward-640` on host `kais-macbook-pro-2.local`. Reserved by `ward agent --harness codex` (reserved 2026-07-09T17:39:13Z). Concurrent `ward agent` runs are blocked until it finishes or the reservation goes stale (1h TTL). `--force` overrides. **Do not comment on or edit this issue to steer the run while it is reserved.** The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a **new issue, dispatched fresh**. That is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494). <details><summary>run seed context — what this run is carrying (ward#609)</summary> - **Resolved:** `coilyco-flight-deck/ward#640` · branch `issue-640` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-ward-640` · ward `v0.493.0` · dispatched `2026-07-09T17:39:13Z` - **Comment thread:** 0 included in the pre-flight read, 0 stripped (ward's own automated comments). Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.493.0). </details> </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

WARD-OUTCOME: done

details

workflow: pull-request-and-merge; review summary: review gate skipped by --skip-review / --no-review-gate

Implemented docs/compat-surface.md and a CONTRIBUTING entry that points to the port map. Felt straightforward once the markdown size caps were respected. Confidence: high. Surprise: the layout hook forced the first draft to shrink a lot. Follow-up: none.

WARD-OUTCOME: done ✅ <details><summary>details</summary> workflow: pull-request-and-merge; review summary: review gate skipped by --skip-review / --no-review-gate Implemented [docs/compat-surface.md](docs/compat-surface.md) and a CONTRIBUTING entry that points to the port map. Felt straightforward once the markdown size caps were respected. Confidence: high. Surprise: the layout hook forced the first draft to shrink a lot. Follow-up: none. </details>
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#640
No description provided.