docs: OpenSpec proposal for MCP resource templates #148

Merged
goern merged 0 commits from refs/pull/148/head into main 2026-05-28 12:13:07 +00:00
goern commented 2026-05-25 08:11:56 +00:00 (Migrated from codeberg.org)

Summary

Adds the OpenSpec change mcp-resource-templates — a design-only proposal for exposing seven core Forgejo entities as URI-addressable MCP resources alongside the existing tool surface.

Entities: owner, repo, commit, issue, pr, comment, status (combined CI status for a sha).

No code changes. Implementation will follow under /opsx:apply once the proposal is reviewed.

Why

forgejo-mcp is tool-only today. Core Forgejo entities are noun-like, sha- or index-addressable, and often immutable — natural MCP resource candidates. Exposing them as URI resources unlocks auto-resolution from LLM context (e.g. a sha in a PR diff resolves without an explicit tool call), content-addressable caching for immutable entities, and composable references between entities. Designing all seven at once avoids the inconsistent half-tool/half-resource state that a piecemeal rollout would create.

Driven by bead forgejo-mcp-1l5.

Artifacts

  • openspec/changes/mcp-resource-templates/proposal.md — capability list for all 7 entities + impact
  • openspec/changes/mcp-resource-templates/design.md — 13 decisions (URI scheme forgejo://, coexist-vs-replace contract with existing tools, embedded-list bounding per docs/design/output-bounding.md, caching annotations, auth + error mapping, client compatibility matrix, 6-slice rollout order)
  • openspec/changes/mcp-resource-templates/specs/ — 8 spec files (one per capability) with ## ADDED Requirements and #### Scenario: blocks; all scenarios testable
  • openspec/changes/mcp-resource-templates/tasks.md — 7 task groups (framework → commit → status → repo+owner → issue+comment → pr → docs/wrap)

All 4 artifacts pass openspec validate mcp-resource-templates --strict.

Key Decisions (see design.md for full rationale)

  • D1 Custom forgejo:// URI scheme (not https://…) — instance-portable, no collision with web links.
  • D5 WithResourceCapabilities(subscribe=false, listChanged=false) for v1 — read-on-demand only; subscriptions explicitly out of scope.
  • D6 Per-domain RegisterResources(s) mirroring the existing RegisterXTool pattern; new shared operation/resource/ package for URI parsing and bounding helpers.
  • D8 Embedded lists (e.g. comments on an issue resource) capped at 30 items with a truncation sentinel naming the corresponding list tool — satisfies docs/design/output-bounding.md without inventing a new query param on resources/read.
  • D9 JSON primary block + text/markdown sidecar for entities carrying rendered text.
  • D13 Thin-slice rollout starts with mcp-resources-core + mcp-resource-commit (delivers value alone: replaces curl-for-statuses workflows).

Out of Scope

  • Implementation (separate change via /opsx:apply)
  • Mutating / write-through resources (mutations stay on tools)
  • resources/subscribe
  • Wiki / projects resources (blocked upstream)
  • Webhook / event resources

Test Plan

  • openspec validate mcp-resource-templates --strict passes
  • openspec status --change mcp-resource-templates shows 4/4 artifacts complete
  • Reviewers confirm 7 entity URI templates cover the requested surface (owner, repo, commit, issue, pr, comment, status)
  • Reviewers confirm coexistence rule (no existing tool removed or modified)
  • Reviewers confirm embedded-list bounding strategy aligns with docs/design/output-bounding.md

Closes forgejo-mcp-1l5.

## Summary Adds the OpenSpec change `mcp-resource-templates` — a design-only proposal for exposing seven core Forgejo entities as URI-addressable MCP resources alongside the existing tool surface. Entities: `owner`, `repo`, `commit`, `issue`, `pr`, `comment`, `status` (combined CI status for a sha). No code changes. Implementation will follow under `/opsx:apply` once the proposal is reviewed. ## Why `forgejo-mcp` is tool-only today. Core Forgejo entities are noun-like, sha- or index-addressable, and often immutable — natural MCP resource candidates. Exposing them as URI resources unlocks auto-resolution from LLM context (e.g. a sha in a PR diff resolves without an explicit tool call), content-addressable caching for immutable entities, and composable references between entities. Designing all seven at once avoids the inconsistent half-tool/half-resource state that a piecemeal rollout would create. Driven by bead `forgejo-mcp-1l5`. ## Artifacts - `openspec/changes/mcp-resource-templates/proposal.md` — capability list for all 7 entities + impact - `openspec/changes/mcp-resource-templates/design.md` — 13 decisions (URI scheme `forgejo://`, coexist-vs-replace contract with existing tools, embedded-list bounding per `docs/design/output-bounding.md`, caching annotations, auth + error mapping, client compatibility matrix, 6-slice rollout order) - `openspec/changes/mcp-resource-templates/specs/` — 8 spec files (one per capability) with `## ADDED Requirements` and `#### Scenario:` blocks; all scenarios testable - `openspec/changes/mcp-resource-templates/tasks.md` — 7 task groups (framework → commit → status → repo+owner → issue+comment → pr → docs/wrap) All 4 artifacts pass `openspec validate mcp-resource-templates --strict`. ## Key Decisions (see design.md for full rationale) - **D1** Custom `forgejo://` URI scheme (not `https://…`) — instance-portable, no collision with web links. - **D5** `WithResourceCapabilities(subscribe=false, listChanged=false)` for v1 — read-on-demand only; subscriptions explicitly out of scope. - **D6** Per-domain `RegisterResources(s)` mirroring the existing `RegisterXTool` pattern; new shared `operation/resource/` package for URI parsing and bounding helpers. - **D8** Embedded lists (e.g. comments on an issue resource) capped at 30 items with a truncation sentinel naming the corresponding list tool — satisfies `docs/design/output-bounding.md` without inventing a new query param on `resources/read`. - **D9** JSON primary block + `text/markdown` sidecar for entities carrying rendered text. - **D13** Thin-slice rollout starts with `mcp-resources-core` + `mcp-resource-commit` (delivers value alone: replaces curl-for-statuses workflows). ## Out of Scope - Implementation (separate change via `/opsx:apply`) - Mutating / write-through resources (mutations stay on tools) - `resources/subscribe` - Wiki / projects resources (blocked upstream) - Webhook / event resources ## Test Plan - [x] `openspec validate mcp-resource-templates --strict` passes - [x] `openspec status --change mcp-resource-templates` shows 4/4 artifacts complete - [x] Reviewers confirm 7 entity URI templates cover the requested surface (owner, repo, commit, issue, pr, comment, status) - [x] Reviewers confirm coexistence rule (no existing tool removed or modified) - [x] Reviewers confirm embedded-list bounding strategy aligns with `docs/design/output-bounding.md` Closes `forgejo-mcp-1l5`.
op1st-gitops commented 2026-05-25 08:12:00 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/openspec-validate-pr-df9q6 is running.

Starting Pipelinerun openspec-validate-pr-df9q6 in namespace op1st-pipelines

You can monitor the execution using the op1st Pipelines as Code PipelineRun viewer or through the command line by
using the tkn CLI with the following command:

tkn pr logs -n op1st-pipelines openspec-validate-pr-df9q6 -f

op1st Pipelines as Code/openspec-validate-pr-df9q6 is running. Starting Pipelinerun <b>[openspec-validate-pr-df9q6](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-df9q6)</b> in namespace <b>op1st-pipelines</b> You can monitor the execution using the [op1st Pipelines as Code](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-df9q6) PipelineRun viewer or through the command line by using the [tkn](https://tekton.dev/docs/cli/#installation) CLI with the following command: <code>tkn pr logs -n op1st-pipelines openspec-validate-pr-df9q6 -f</code>
op1st-gitops commented 2026-05-25 08:12:00 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/code-scans-vjtss is running.

Starting Pipelinerun code-scans-vjtss in namespace op1st-pipelines

You can monitor the execution using the op1st Pipelines as Code PipelineRun viewer or through the command line by
using the tkn CLI with the following command:

tkn pr logs -n op1st-pipelines code-scans-vjtss -f

op1st Pipelines as Code/code-scans-vjtss is running. Starting Pipelinerun <b>[code-scans-vjtss](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-vjtss)</b> in namespace <b>op1st-pipelines</b> You can monitor the execution using the [op1st Pipelines as Code](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-vjtss) PipelineRun viewer or through the command line by using the [tkn](https://tekton.dev/docs/cli/#installation) CLI with the following command: <code>tkn pr logs -n op1st-pipelines code-scans-vjtss -f</code>
op1st-gitops commented 2026-05-25 08:12:00 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/on-pull-request-sjnp7 is running.

Starting Pipelinerun on-pull-request-sjnp7 in namespace op1st-pipelines

You can monitor the execution using the op1st Pipelines as Code PipelineRun viewer or through the command line by
using the tkn CLI with the following command:

tkn pr logs -n op1st-pipelines on-pull-request-sjnp7 -f

op1st Pipelines as Code/on-pull-request-sjnp7 is running. Starting Pipelinerun <b>[on-pull-request-sjnp7](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-sjnp7)</b> in namespace <b>op1st-pipelines</b> You can monitor the execution using the [op1st Pipelines as Code](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-sjnp7) PipelineRun viewer or through the command line by using the [tkn](https://tekton.dev/docs/cli/#installation) CLI with the following command: <code>tkn pr logs -n op1st-pipelines on-pull-request-sjnp7 -f</code>
op1st-gitops commented 2026-05-25 08:12:32 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/code-scans-vjtss has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 20 seconds

fetch-source

Succeeded 12 seconds

gitleaks-version

Succeeded 9 seconds

gitleaks

op1st Pipelines as Code/code-scans-vjtss has <b>successfully</b> validated your commit. <ul> <li><b>Namespace</b>: <a href="https://detailurl.setting.custom-console-url-namespace.is.not.configured">op1st-pipelines</a></li> <li><b>PipelineRun:</b> <a href="https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-vjtss">code-scans-vjtss</a></li> </ul> <hr> <h4>Task Statuses:</h4> <table> <tr><th>Status</th><th>Duration</th><th>Name</th></tr> <tr> <td>Succeeded</td> <td>20 seconds</td><td> [fetch-source](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-vjtss/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>12 seconds</td><td> [gitleaks-version](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-vjtss/logs/gitleaks-version) </td></tr> <tr> <td>Succeeded</td> <td>9 seconds</td><td> [gitleaks](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-vjtss/logs/gitleaks) </td></tr> </table>
op1st-gitops commented 2026-05-25 08:12:41 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/openspec-validate-pr-df9q6 has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 18 seconds

fetch-source

Succeeded 22 seconds

validate

op1st Pipelines as Code/openspec-validate-pr-df9q6 has <b>successfully</b> validated your commit. <ul> <li><b>Namespace</b>: <a href="https://detailurl.setting.custom-console-url-namespace.is.not.configured">op1st-pipelines</a></li> <li><b>PipelineRun:</b> <a href="https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-df9q6">openspec-validate-pr-df9q6</a></li> </ul> <hr> <h4>Task Statuses:</h4> <table> <tr><th>Status</th><th>Duration</th><th>Name</th></tr> <tr> <td>Succeeded</td> <td>18 seconds</td><td> [fetch-source](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-df9q6/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>22 seconds</td><td> [validate](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-df9q6/logs/validate) </td></tr> </table>
op1st-gitops commented 2026-05-25 08:14:24 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/on-pull-request-sjnp7 has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 17 seconds

fetch-source

Succeeded 2 minutes

build-and-test

op1st Pipelines as Code/on-pull-request-sjnp7 has <b>successfully</b> validated your commit. <ul> <li><b>Namespace</b>: <a href="https://detailurl.setting.custom-console-url-namespace.is.not.configured">op1st-pipelines</a></li> <li><b>PipelineRun:</b> <a href="https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-sjnp7">on-pull-request-sjnp7</a></li> </ul> <hr> <h4>Task Statuses:</h4> <table> <tr><th>Status</th><th>Duration</th><th>Name</th></tr> <tr> <td>Succeeded</td> <td>17 seconds</td><td> [fetch-source](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-sjnp7/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>2 minutes</td><td> [build-and-test](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-sjnp7/logs/build-and-test) </td></tr> </table>
op1st-gitops commented 2026-05-26 13:32:31 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/code-scans-sdkvx is running.

Starting Pipelinerun code-scans-sdkvx in namespace op1st-pipelines

You can monitor the execution using the op1st Pipelines as Code PipelineRun viewer or through the command line by
using the tkn CLI with the following command:

tkn pr logs -n op1st-pipelines code-scans-sdkvx -f

op1st Pipelines as Code/code-scans-sdkvx is running. Starting Pipelinerun <b>[code-scans-sdkvx](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-sdkvx)</b> in namespace <b>op1st-pipelines</b> You can monitor the execution using the [op1st Pipelines as Code](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-sdkvx) PipelineRun viewer or through the command line by using the [tkn](https://tekton.dev/docs/cli/#installation) CLI with the following command: <code>tkn pr logs -n op1st-pipelines code-scans-sdkvx -f</code>
op1st-gitops commented 2026-05-26 13:32:31 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/on-pull-request-5kwmg is running.

Starting Pipelinerun on-pull-request-5kwmg in namespace op1st-pipelines

You can monitor the execution using the op1st Pipelines as Code PipelineRun viewer or through the command line by
using the tkn CLI with the following command:

tkn pr logs -n op1st-pipelines on-pull-request-5kwmg -f

op1st Pipelines as Code/on-pull-request-5kwmg is running. Starting Pipelinerun <b>[on-pull-request-5kwmg](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-5kwmg)</b> in namespace <b>op1st-pipelines</b> You can monitor the execution using the [op1st Pipelines as Code](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-5kwmg) PipelineRun viewer or through the command line by using the [tkn](https://tekton.dev/docs/cli/#installation) CLI with the following command: <code>tkn pr logs -n op1st-pipelines on-pull-request-5kwmg -f</code>
op1st-gitops commented 2026-05-26 13:32:31 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/openspec-validate-pr-44tgl is running.

Starting Pipelinerun openspec-validate-pr-44tgl in namespace op1st-pipelines

You can monitor the execution using the op1st Pipelines as Code PipelineRun viewer or through the command line by
using the tkn CLI with the following command:

tkn pr logs -n op1st-pipelines openspec-validate-pr-44tgl -f

op1st Pipelines as Code/openspec-validate-pr-44tgl is running. Starting Pipelinerun <b>[openspec-validate-pr-44tgl](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-44tgl)</b> in namespace <b>op1st-pipelines</b> You can monitor the execution using the [op1st Pipelines as Code](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-44tgl) PipelineRun viewer or through the command line by using the [tkn](https://tekton.dev/docs/cli/#installation) CLI with the following command: <code>tkn pr logs -n op1st-pipelines openspec-validate-pr-44tgl -f</code>
op1st-gitops commented 2026-05-26 13:33:01 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/code-scans-sdkvx has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 14 seconds

fetch-source

Succeeded 11 seconds

gitleaks-version

Succeeded 14 seconds

gitleaks

op1st Pipelines as Code/code-scans-sdkvx has <b>successfully</b> validated your commit. <ul> <li><b>Namespace</b>: <a href="https://detailurl.setting.custom-console-url-namespace.is.not.configured">op1st-pipelines</a></li> <li><b>PipelineRun:</b> <a href="https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-sdkvx">code-scans-sdkvx</a></li> </ul> <hr> <h4>Task Statuses:</h4> <table> <tr><th>Status</th><th>Duration</th><th>Name</th></tr> <tr> <td>Succeeded</td> <td>14 seconds</td><td> [fetch-source](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-sdkvx/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>11 seconds</td><td> [gitleaks-version](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-sdkvx/logs/gitleaks-version) </td></tr> <tr> <td>Succeeded</td> <td>14 seconds</td><td> [gitleaks](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-sdkvx/logs/gitleaks) </td></tr> </table>
op1st-gitops commented 2026-05-26 13:33:05 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/openspec-validate-pr-44tgl has failed.


Task Statuses:

StatusDurationName
Succeeded 13 seconds

fetch-source

Failed 16 seconds

validate


Failure snippet:

task validate has the status "Failed":
✗ spec/release-tools-image
✓ change/stateless-http-auth
Totals: 15 passed, 1 failed (16 items)
op1st Pipelines as Code/openspec-validate-pr-44tgl has <b>failed</b>. <ul> <li><b>Namespace</b>: <a href="https://detailurl.setting.custom-console-url-namespace.is.not.configured">op1st-pipelines</a></li> <li><b>PipelineRun:</b> <a href="https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-44tgl">openspec-validate-pr-44tgl</a></li> </ul> <hr> <h4>Task Statuses:</h4> <table> <tr><th>Status</th><th>Duration</th><th>Name</th></tr> <tr> <td>Succeeded</td> <td>13 seconds</td><td> [fetch-source](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-44tgl/logs/fetch-source) </td></tr> <tr> <td>Failed</td> <td>16 seconds</td><td> [validate](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-44tgl/logs/validate) </td></tr> </table> <hr> <h4>Failure snippet:</h4> task <b>validate</b> has the status <b>"Failed"</b>: <pre>✗ spec/release-tools-image ✓ change/stateless-http-auth Totals: 15 passed, 1 failed (16 items)</pre>
op1st-gitops commented 2026-05-26 13:34:22 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/on-pull-request-5kwmg has failed.


Task Statuses:

StatusDurationName
Succeeded 14 seconds

fetch-source

Succeeded 1 minute

build-and-test

Failed 15 seconds

commit-title-check


Failure snippet:

task commit-title-check has the status "Failed":
::error::1 commit(s) do not match Conventional Commits format.
Rewrite history (git rebase -i origin/main) so every commit matches:
  ^(feat|fix|docs|style|refactor|perf|test|ci|chore|build|revert)(\([^)]+\))?!?: .+
op1st Pipelines as Code/on-pull-request-5kwmg has <b>failed</b>. <ul> <li><b>Namespace</b>: <a href="https://detailurl.setting.custom-console-url-namespace.is.not.configured">op1st-pipelines</a></li> <li><b>PipelineRun:</b> <a href="https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-5kwmg">on-pull-request-5kwmg</a></li> </ul> <hr> <h4>Task Statuses:</h4> <table> <tr><th>Status</th><th>Duration</th><th>Name</th></tr> <tr> <td>Succeeded</td> <td>14 seconds</td><td> [fetch-source](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-5kwmg/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>1 minute</td><td> [build-and-test](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-5kwmg/logs/build-and-test) </td></tr> <tr> <td>Failed</td> <td>15 seconds</td><td> [commit-title-check](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-5kwmg/logs/commit-title-check) </td></tr> </table> <hr> <h4>Failure snippet:</h4> task <b>commit-title-check</b> has the status <b>"Failed"</b>: <pre>::error::1 commit(s) do not match Conventional Commits format. Rewrite history (git rebase -i origin/main) so every commit matches: ^(feat|fix|docs|style|refactor|perf|test|ci|chore|build|revert)(\([^)]+\))?!?: .+</pre>
op1st-gitops commented 2026-05-28 12:03:23 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/code-scans-bdz6t is running.

Starting Pipelinerun code-scans-bdz6t in namespace op1st-pipelines

You can monitor the execution using the op1st Pipelines as Code PipelineRun viewer or through the command line by
using the tkn CLI with the following command:

tkn pr logs -n op1st-pipelines code-scans-bdz6t -f

op1st Pipelines as Code/code-scans-bdz6t is running. Starting Pipelinerun <b>[code-scans-bdz6t](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-bdz6t)</b> in namespace <b>op1st-pipelines</b> You can monitor the execution using the [op1st Pipelines as Code](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-bdz6t) PipelineRun viewer or through the command line by using the [tkn](https://tekton.dev/docs/cli/#installation) CLI with the following command: <code>tkn pr logs -n op1st-pipelines code-scans-bdz6t -f</code>
op1st-gitops commented 2026-05-28 12:03:23 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/on-pull-request-2p5lm is running.

Starting Pipelinerun on-pull-request-2p5lm in namespace op1st-pipelines

You can monitor the execution using the op1st Pipelines as Code PipelineRun viewer or through the command line by
using the tkn CLI with the following command:

tkn pr logs -n op1st-pipelines on-pull-request-2p5lm -f

op1st Pipelines as Code/on-pull-request-2p5lm is running. Starting Pipelinerun <b>[on-pull-request-2p5lm](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-2p5lm)</b> in namespace <b>op1st-pipelines</b> You can monitor the execution using the [op1st Pipelines as Code](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-2p5lm) PipelineRun viewer or through the command line by using the [tkn](https://tekton.dev/docs/cli/#installation) CLI with the following command: <code>tkn pr logs -n op1st-pipelines on-pull-request-2p5lm -f</code>
op1st-gitops commented 2026-05-28 12:03:23 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/openspec-validate-pr-7nq7q is running.

Starting Pipelinerun openspec-validate-pr-7nq7q in namespace op1st-pipelines

You can monitor the execution using the op1st Pipelines as Code PipelineRun viewer or through the command line by
using the tkn CLI with the following command:

tkn pr logs -n op1st-pipelines openspec-validate-pr-7nq7q -f

op1st Pipelines as Code/openspec-validate-pr-7nq7q is running. Starting Pipelinerun <b>[openspec-validate-pr-7nq7q](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-7nq7q)</b> in namespace <b>op1st-pipelines</b> You can monitor the execution using the [op1st Pipelines as Code](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-7nq7q) PipelineRun viewer or through the command line by using the [tkn](https://tekton.dev/docs/cli/#installation) CLI with the following command: <code>tkn pr logs -n op1st-pipelines openspec-validate-pr-7nq7q -f</code>
op1st-gitops commented 2026-05-28 12:03:46 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/code-scans-bdz6t has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 12 seconds

fetch-source

Succeeded 7 seconds

gitleaks-version

Succeeded 10 seconds

gitleaks

op1st Pipelines as Code/code-scans-bdz6t has <b>successfully</b> validated your commit. <ul> <li><b>Namespace</b>: <a href="https://detailurl.setting.custom-console-url-namespace.is.not.configured">op1st-pipelines</a></li> <li><b>PipelineRun:</b> <a href="https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-bdz6t">code-scans-bdz6t</a></li> </ul> <hr> <h4>Task Statuses:</h4> <table> <tr><th>Status</th><th>Duration</th><th>Name</th></tr> <tr> <td>Succeeded</td> <td>12 seconds</td><td> [fetch-source](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-bdz6t/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>7 seconds</td><td> [gitleaks-version](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-bdz6t/logs/gitleaks-version) </td></tr> <tr> <td>Succeeded</td> <td>10 seconds</td><td> [gitleaks](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/code-scans-bdz6t/logs/gitleaks) </td></tr> </table>
op1st-gitops commented 2026-05-28 12:03:46 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/openspec-validate-pr-7nq7q has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 11 seconds

fetch-source

Succeeded 12 seconds

validate

op1st Pipelines as Code/openspec-validate-pr-7nq7q has <b>successfully</b> validated your commit. <ul> <li><b>Namespace</b>: <a href="https://detailurl.setting.custom-console-url-namespace.is.not.configured">op1st-pipelines</a></li> <li><b>PipelineRun:</b> <a href="https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-7nq7q">openspec-validate-pr-7nq7q</a></li> </ul> <hr> <h4>Task Statuses:</h4> <table> <tr><th>Status</th><th>Duration</th><th>Name</th></tr> <tr> <td>Succeeded</td> <td>11 seconds</td><td> [fetch-source](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-7nq7q/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>12 seconds</td><td> [validate](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/openspec-validate-pr-7nq7q/logs/validate) </td></tr> </table>
op1st-gitops commented 2026-05-28 12:05:09 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/on-pull-request-2p5lm has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 10 seconds

fetch-source

Succeeded 1 minute

build-and-test

Succeeded 13 seconds

commit-title-check

op1st Pipelines as Code/on-pull-request-2p5lm has <b>successfully</b> validated your commit. <ul> <li><b>Namespace</b>: <a href="https://detailurl.setting.custom-console-url-namespace.is.not.configured">op1st-pipelines</a></li> <li><b>PipelineRun:</b> <a href="https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-2p5lm">on-pull-request-2p5lm</a></li> </ul> <hr> <h4>Task Statuses:</h4> <table> <tr><th>Status</th><th>Duration</th><th>Name</th></tr> <tr> <td>Succeeded</td> <td>10 seconds</td><td> [fetch-source](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-2p5lm/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>1 minute</td><td> [build-and-test](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-2p5lm/logs/build-and-test) </td></tr> <tr> <td>Succeeded</td> <td>13 seconds</td><td> [commit-title-check](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/on-pull-request-2p5lm/logs/commit-title-check) </td></tr> </table>
goern commented 2026-05-28 12:12:59 +00:00 (Migrated from codeberg.org)

Minutes — ready to merge

CI green on cefe9ef026cfcc44a59caaca80936830dc53ec02:

  • code-scans-bdz6t (gitleaks)
  • openspec-validate-pr-7nq7q
  • on-pull-request-2p5lm (build-and-test + commit-title-check)

Final commit on this PR

fix: 🐛 openspec spec/release-tools-image add Purpose + Requirements headers — corrects the archived spec (introduced by bd92d21 on main) that started with ## ADDED Requirements instead of the conventional spec format. Without it, openspec validate --all --strict blocked every PR merging current main. Tracked via bead forgejo-mcp-1tc (closed).

Scope unchanged

Proposal-only, no code. Implementation will follow under /opsx:apply per the rollout order in design.md (mcp-resources-coremcp-resource-commit first).

Merging.

## Minutes — ready to merge CI green on `cefe9ef026cfcc44a59caaca80936830dc53ec02`: - `code-scans-bdz6t` ✅ (gitleaks) - `openspec-validate-pr-7nq7q` ✅ - `on-pull-request-2p5lm` ✅ (build-and-test + commit-title-check) ### Final commit on this PR `fix: 🐛 openspec spec/release-tools-image add Purpose + Requirements headers` — corrects the archived spec (introduced by `bd92d21` on main) that started with `## ADDED Requirements` instead of the conventional spec format. Without it, `openspec validate --all --strict` blocked every PR merging current main. Tracked via bead `forgejo-mcp-1tc` (closed). ### Scope unchanged Proposal-only, no code. Implementation will follow under `/opsx:apply` per the rollout order in `design.md` (`mcp-resources-core` → `mcp-resource-commit` first). Merging.
Sign in to join this conversation.
No reviewers
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
agentic-forges/forgejo-mcp!148
No description provided.