Stop emitting bare issue refs in Ward-authored text #1501

Closed
opened 2026-07-22 08:50:14 +00:00 by coilyco-ops · 5 comments
Member

Ward-authored issue bodies, comments, logs, and docs still emit bare issue references such as #1497, #1498, ward#222, or aos#490. That is a footgun for a product that operates across multiple forges and multiple authoritative trackers, because a bare ref changes meaning depending on which forge/repo rendered it.

This surfaced again while filing #1499: the generated body and related-context lines contain many bare refs even though the failure spans Forgejo, GitHub-mirrored repos, AOS bundle state, and Ward runtime behavior. Kai notes there is an inbox/AOS thread for removing these issue refs broadly; this is the Ward-side implementation slice.

Scope:

  • Audit Ward-authored text that can land in durable artifacts: generated issue bodies, reservation/final comments, dispatch artifacts, reaper output, docs, issue templates, release notes, and agent seed prompts.
  • Replace bare #N and ambiguous short forms with host-qualified links or at least fully qualified owner/repo#N where links are not practical.
  • For cross-forge refs, prefer full URLs so the authority is unambiguous.
  • Update tests/snapshots that currently pin bare refs.
  • Leave local prose examples only when the surrounding context explicitly states the repo and forge.
  • Coordinate with the AOS/inbox issue if found; do not rely on it to fix Ward-generated text.

Acceptance:

  • New Ward-generated durable text does not contain ambiguous bare issue refs for cross-repo/cross-forge references.
  • Tests cover at least generated issue bodies/comments for a multi-forge context.
  • Existing docs explain the cross-reference convention using full URLs or fully qualified refs.

Related examples from this session: #1499, #1500, and the ward#222 / ward#273 smoke-test diagnostic.

Ward-authored issue bodies, comments, logs, and docs still emit bare issue references such as `#1497`, `#1498`, `ward#222`, or `aos#490`. That is a footgun for a product that operates across multiple forges and multiple authoritative trackers, because a bare ref changes meaning depending on which forge/repo rendered it. This surfaced again while filing #1499: the generated body and related-context lines contain many bare refs even though the failure spans Forgejo, GitHub-mirrored repos, AOS bundle state, and Ward runtime behavior. Kai notes there is an inbox/AOS thread for removing these issue refs broadly; this is the Ward-side implementation slice. Scope: - Audit Ward-authored text that can land in durable artifacts: generated issue bodies, reservation/final comments, dispatch artifacts, reaper output, docs, issue templates, release notes, and agent seed prompts. - Replace bare `#N` and ambiguous short forms with host-qualified links or at least fully qualified `owner/repo#N` where links are not practical. - For cross-forge refs, prefer full URLs so the authority is unambiguous. - Update tests/snapshots that currently pin bare refs. - Leave local prose examples only when the surrounding context explicitly states the repo and forge. - Coordinate with the AOS/inbox issue if found; do not rely on it to fix Ward-generated text. Acceptance: - New Ward-generated durable text does not contain ambiguous bare issue refs for cross-repo/cross-forge references. - Tests cover at least generated issue bodies/comments for a multi-forge context. - Existing docs explain the cross-reference convention using full URLs or fully qualified refs. Related examples from this session: #1499, #1500, and the `ward#222` / `ward#273` smoke-test diagnostic.
Author
Member

Existing AOS reference implementation to reuse or mirror:\n\n- Hook registration: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/src/branch/main/.pre-commit-config.yaml#L160\n- Exported hook metadata: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/src/branch/main/.pre-commit-hooks.yaml#L234\n- Console script entry point: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/src/branch/main/pyproject.toml#L65\n- Opt-in config shape: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/src/branch/main/pyproject.toml#L150\n- Implementation: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/src/branch/main/agentic_os/pre_commit/check_issue_references.py\n\nThe relevant hook id is issue-reference-guard; it rejects bare issue refs, scoped owner/repo issue refs, and closing-keyword forms in tracked prose, while skipping fenced code, inline code, blockquotes, fixtures, and configured excludes. Ward should either consume this policy directly where applicable or keep its generated user-facing text aligned with the same rules.

Existing AOS reference implementation to reuse or mirror:\n\n- Hook registration: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/src/branch/main/.pre-commit-config.yaml#L160\n- Exported hook metadata: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/src/branch/main/.pre-commit-hooks.yaml#L234\n- Console script entry point: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/src/branch/main/pyproject.toml#L65\n- Opt-in config shape: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/src/branch/main/pyproject.toml#L150\n- Implementation: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/src/branch/main/agentic_os/pre_commit/check_issue_references.py\n\nThe relevant hook id is `issue-reference-guard`; it rejects bare issue refs, scoped owner/repo issue refs, and closing-keyword forms in tracked prose, while skipping fenced code, inline code, blockquotes, fixtures, and configured excludes. Ward should either consume this policy directly where applicable or keep its generated user-facing text aligned with the same rules.
Author
Member

WARD-WORKFLOW: done

details

review: skipped - in-container review gate intentionally skipped because the temporary ward default pending brokered QA.
workflow: merge-remote-main; review summary: skipped - in-container review gate intentionally skipped because the temporary ward default pending brokered QA.

felt: direct after the generator paths were mapped; the noisy part was separating durable output from historical tests and comments.
confidence: high.
surprises: close-ref parsers needed qualified same-repo compatibility so new PR bodies still land.
follow-ups: Forgejo Actions post-push verification was attempted, but aosguard could not resolve its SSM-backed token in this container.

WARD-WORKFLOW: done ✅ <details><summary>details</summary> review: skipped - in-container review gate intentionally skipped because the temporary ward default pending brokered QA. workflow: merge-remote-main; review summary: skipped - in-container review gate intentionally skipped because the temporary ward default pending brokered QA. felt: direct after the generator paths were mapped; the noisy part was separating durable output from historical tests and comments. confidence: high. surprises: close-ref parsers needed qualified same-repo compatibility so new PR bodies still land. follow-ups: Forgejo Actions post-push verification was attempted, but `aosguard` could not resolve its SSM-backed token in this container. </details>
Author
Member

WARD-WORKFLOW: blocked 🛑

salvage details

An ephemeral ward container (codex mode) dispatched for this issue finished but its work was not merged to main, so cleanup preserved it on a branch before teardown and reopened the issue (a closing reference for #1501 never reached main). Recover from the salvage branch below.

  • Repo: coilyco-flight-deck/ward
  • Salvage branch: ward-salvage/ward-12486bc7
  • Pull request: not opened - salvage branch has no diff against main
  • Reason: merge conflict integrating onto main
  • Container uptime at reap: 24m (age of the baked Forgejo PAT snapshot; a long-lived container is likelier to carry a rotated token)

Cleanup diagnostics

--- reap diagnostics ---
ward version:      v0.823.0
version source:    pinned via WARD_VERSION/--ward-version (v0.823.0)
HEAD:              f00cd5011bcf
origin/main:       f00cd5011bcf
ancestry:          HEAD is ALREADY on origin/main - a salvage here is a FALSE salvage (ward#504 signature)
decision gate:     provenance missing or unreadable on already-landed merge-remote-main run
reason:            merge conflict integrating onto main
provenance:        missing or unreadable
run-owned landed:  no
working tree:      clean
container uptime:  24m (baked Forgejo PAT age proxy)
--- end reap diagnostics ---

Recover

git fetch https://forgejo.coilysiren.me/coilyco-flight-deck/ward.git ward-salvage/ward-12486bc7
git checkout -b ward-salvage/ward-12486bc7 FETCH_HEAD

— Codex, via ward agent

WARD-WORKFLOW: blocked 🛑 <details><summary>salvage details</summary> An ephemeral `ward container` (codex mode) dispatched for this issue finished but its work was **not merged to `main`**, so cleanup preserved it on a branch before teardown and reopened the issue (a closing reference for #1501 never reached `main`). Recover from the salvage branch below. - **Repo:** `coilyco-flight-deck/ward` - **Salvage branch:** `ward-salvage/ward-12486bc7` - **Pull request:** not opened - salvage branch has no diff against main - **Reason:** merge conflict integrating onto main - **Container uptime at reap:** 24m (age of the baked Forgejo PAT snapshot; a long-lived container is likelier to carry a rotated token) ## Cleanup diagnostics ``` --- reap diagnostics --- ward version: v0.823.0 version source: pinned via WARD_VERSION/--ward-version (v0.823.0) HEAD: f00cd5011bcf origin/main: f00cd5011bcf ancestry: HEAD is ALREADY on origin/main - a salvage here is a FALSE salvage (ward#504 signature) decision gate: provenance missing or unreadable on already-landed merge-remote-main run reason: merge conflict integrating onto main provenance: missing or unreadable run-owned landed: no working tree: clean container uptime: 24m (baked Forgejo PAT age proxy) --- end reap diagnostics --- ``` ## Recover ```bash git fetch https://forgejo.coilysiren.me/coilyco-flight-deck/ward.git ward-salvage/ward-12486bc7 git checkout -b ward-salvage/ward-12486bc7 FETCH_HEAD ``` </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

WARD-WORKFLOW: reservation-released

release details

Run finished with WARD-WORKFLOW: blocked 🛑.

ward container reap released container engineer-codex-ward-1501 (--harness codex): the terminal outcome supersedes the reservation, so a later redispatch no longer needs --override-reservation.

— Codex, via ward agent

<!-- ward-agent-reservation-released --> WARD-WORKFLOW: reservation-released <details><summary>release details</summary> Run finished with `WARD-WORKFLOW: blocked 🛑`. `ward container reap` released container `engineer-codex-ward-1501` (`--harness codex`): the terminal outcome supersedes the reservation, so a later redispatch no longer needs `--override-reservation`. </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

Confirmed complete despite the old reaper reopen.

Proof:

  • origin/main contains f00cd5011bcf for Qualify Ward-authored issue references.
  • Forgejo Actions are green: promote #2521 and release #2522 both succeeded.
  • Reap diagnostics show the known false-salvage signature: HEAD is ALREADY on origin/main, origin/main: f00cd5011bcf, clean worktree, and salvage branch has no diff.

The false-salvage class is tracked/fixed by #1606.

Confirmed complete despite the old reaper reopen. Proof: - `origin/main` contains `f00cd5011bcf` for `Qualify Ward-authored issue references`. - Forgejo Actions are green: promote `#2521` and release `#2522` both succeeded. - Reap diagnostics show the known false-salvage signature: `HEAD is ALREADY on origin/main`, `origin/main: f00cd5011bcf`, clean worktree, and salvage branch has no diff. The false-salvage class is tracked/fixed by #1606.
Sign in to join this conversation.
No milestone
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#1501
No description provided.