feat: branch protection management — CRUD tools + forgejo:// resources (uc6) #196

Merged
goern merged 0 commits from refs/pull/196/head into main 2026-06-02 14:35:55 +00:00
goern commented 2026-06-02 14:23:26 +00:00 (Migrated from codeberg.org)

What

Implements the branch-protection OpenSpec change merged in #195forgejo-mcp-uc6. New operation/branchprotection/ package.

Tools (5) over /repos/{owner}/{repo}/branch_protections:

tool notes
list_branch_protections output-bounded: page/limit, response echoes them for resumability
get_branch_protection by rule name
create_branch_protection requires branch_name; status_check_contexts comma-separated
edit_branch_protection PATCH pointer semantics — only passed fields change
delete_branch_protection by rule name

Resources (2):

  • Collection forgejo://repo/{owner}/{repo}/branch_protections — bounded at EmbeddedListCap, truncation sentinel names list_branch_protections.
  • Single forgejo://repo/{owner}/{repo}/branch_protection/{rule}{rule} may contain slashes (glob rules like release/*).

Why

forgejo-mcp-f6h: a repo with no protection let Renovate automerge before CI was green. This gives MCP the surface to see and enforce protection.

Output-bounding checklist (docs/design/output-bounding.md)

  • Bounded by tool semantics? No — list size is data-proportional.
  • Bound params: page + limit (the "list of entities" row).
  • Resume: response echoes page/limit; collection resource emits the truncation sentinel + list_tool.
  • Documented: tool descriptions + README tool table.

Notable decision (SDK reality)

EditBranchProtectionOption pointer fields have no omitempty, so unpassed fields marshal as explicit null — which Forgejo reads as leave-unchanged. The handler uses pkg/ptr.To so an omitted enable_status_check is sent as null, never false (which would silently relax protection). I refined that one spec scenario in the change to state this precisely; a test asserts the null-not-false behavior.

Tests (all green)

go test ./... passes. New coverage: list (page echo), get (ok + 404→error), create (status_check_contexts round-trip; missing branch_name → no Forgejo call), edit (only-passed-fields null-safety; contexts round-trip), delete; URI parsers (incl. slash globs + invalid→-32602); collection truncation sentinel; 404→-32003.

Quality gates

make build · go vet ./... · gofmt clean · go test ./... · openspec validate branch-protection-management --strict

After merge

Archive the change (syncs openspec/specs/branch-protection/).


Closes forgejo-mcp-uc6. Implements #195. Discovered from forgejo-mcp-f6h.

## What Implements the `branch-protection` OpenSpec change merged in #195 — `forgejo-mcp-uc6`. New `operation/branchprotection/` package. **Tools (5)** over `/repos/{owner}/{repo}/branch_protections`: | tool | notes | |---|---| | `list_branch_protections` | output-bounded: `page`/`limit`, response echoes them for resumability | | `get_branch_protection` | by `rule` name | | `create_branch_protection` | requires `branch_name`; `status_check_contexts` comma-separated | | `edit_branch_protection` | PATCH pointer semantics — only passed fields change | | `delete_branch_protection` | by `rule` name | **Resources (2)**: - Collection `forgejo://repo/{owner}/{repo}/branch_protections` — bounded at `EmbeddedListCap`, truncation sentinel names `list_branch_protections`. - Single `forgejo://repo/{owner}/{repo}/branch_protection/{rule}` — `{rule}` may contain slashes (glob rules like `release/*`). ## Why `forgejo-mcp-f6h`: a repo with no protection let Renovate automerge before CI was green. This gives MCP the surface to see and enforce protection. ## Output-bounding checklist (`docs/design/output-bounding.md`) - Bounded by tool semantics? **No** — list size is data-proportional. - Bound params: `page` + `limit` (the "list of entities" row). - Resume: response echoes `page`/`limit`; collection resource emits the truncation sentinel + `list_tool`. - Documented: tool descriptions + README tool table. ✅ ## Notable decision (SDK reality) `EditBranchProtectionOption` pointer fields have **no `omitempty`**, so unpassed fields marshal as explicit `null` — which Forgejo reads as *leave-unchanged*. The handler uses `pkg/ptr.To` so an omitted `enable_status_check` is sent as `null`, **never `false`** (which would silently relax protection). I refined that one spec scenario in the change to state this precisely; a test asserts the null-not-false behavior. ## Tests (all green) `go test ./...` passes. New coverage: list (page echo), get (ok + 404→error), create (`status_check_contexts` round-trip; missing `branch_name` → no Forgejo call), edit (only-passed-fields null-safety; contexts round-trip), delete; URI parsers (incl. slash globs + invalid→`-32602`); collection truncation sentinel; 404→`-32003`. ## Quality gates `make build` ✅ · `go vet ./...` ✅ · `gofmt` clean ✅ · `go test ./...` ✅ · `openspec validate branch-protection-management --strict` ✅ ## After merge Archive the change (syncs `openspec/specs/branch-protection/`). --- Closes forgejo-mcp-uc6. Implements #195. Discovered from forgejo-mcp-f6h.
op1st-gitops commented 2026-06-02 14:23:59 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-zn94k is running.

Starting Pipelinerun forgejo-mcp-openspec-validate-pr-zn94k 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 forgejo-mcp-openspec-validate-pr-zn94k -f

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-zn94k is running. Starting Pipelinerun <b>[forgejo-mcp-openspec-validate-pr-zn94k](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/forgejo-mcp-openspec-validate-pr-zn94k)</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/forgejo-mcp-openspec-validate-pr-zn94k) 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 forgejo-mcp-openspec-validate-pr-zn94k -f</code>
op1st-gitops commented 2026-06-02 14:23:59 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-on-pull-request-wl5x8 is running.

Starting Pipelinerun forgejo-mcp-on-pull-request-wl5x8 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 forgejo-mcp-on-pull-request-wl5x8 -f

op1st Pipelines as Code/forgejo-mcp-on-pull-request-wl5x8 is running. Starting Pipelinerun <b>[forgejo-mcp-on-pull-request-wl5x8](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/forgejo-mcp-on-pull-request-wl5x8)</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/forgejo-mcp-on-pull-request-wl5x8) 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 forgejo-mcp-on-pull-request-wl5x8 -f</code>
op1st-gitops commented 2026-06-02 14:23:59 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-code-scans-5jxbb is running.

Starting Pipelinerun forgejo-mcp-code-scans-5jxbb 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 forgejo-mcp-code-scans-5jxbb -f

op1st Pipelines as Code/forgejo-mcp-code-scans-5jxbb is running. Starting Pipelinerun <b>[forgejo-mcp-code-scans-5jxbb](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/forgejo-mcp-code-scans-5jxbb)</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/forgejo-mcp-code-scans-5jxbb) 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 forgejo-mcp-code-scans-5jxbb -f</code>
op1st-gitops commented 2026-06-02 14:24:23 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-code-scans-5jxbb has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 12 seconds

fetch-source

Succeeded 16 seconds

gitleaks-version

Succeeded 11 seconds

gitleaks

op1st Pipelines as Code/forgejo-mcp-code-scans-5jxbb 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/forgejo-mcp-code-scans-5jxbb">forgejo-mcp-code-scans-5jxbb</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/forgejo-mcp-code-scans-5jxbb/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>16 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/forgejo-mcp-code-scans-5jxbb/logs/gitleaks-version) </td></tr> <tr> <td>Succeeded</td> <td>11 seconds</td><td> [gitleaks](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/forgejo-mcp-code-scans-5jxbb/logs/gitleaks) </td></tr> </table>
op1st-gitops commented 2026-06-02 14:24:26 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-zn94k has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 13 seconds

fetch-source

Succeeded 14 seconds

validate

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-zn94k 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/forgejo-mcp-openspec-validate-pr-zn94k">forgejo-mcp-openspec-validate-pr-zn94k</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/forgejo-mcp-openspec-validate-pr-zn94k/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>14 seconds</td><td> [validate](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/forgejo-mcp-openspec-validate-pr-zn94k/logs/validate) </td></tr> </table>
op1st-gitops commented 2026-06-02 14:25:53 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-on-pull-request-wl5x8 has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 11 seconds

fetch-source

Succeeded 1 minute

build-and-test

Succeeded 16 seconds

commit-title-check

op1st Pipelines as Code/forgejo-mcp-on-pull-request-wl5x8 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/forgejo-mcp-on-pull-request-wl5x8">forgejo-mcp-on-pull-request-wl5x8</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/forgejo-mcp-on-pull-request-wl5x8/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/forgejo-mcp-on-pull-request-wl5x8/logs/build-and-test) </td></tr> <tr> <td>Succeeded</td> <td>16 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/forgejo-mcp-on-pull-request-wl5x8/logs/commit-title-check) </td></tr> </table>
op1st-gitops commented 2026-06-02 14:31:25 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-code-scans-b6w82 is running.

Starting Pipelinerun forgejo-mcp-code-scans-b6w82 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 forgejo-mcp-code-scans-b6w82 -f

op1st Pipelines as Code/forgejo-mcp-code-scans-b6w82 is running. Starting Pipelinerun <b>[forgejo-mcp-code-scans-b6w82](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/forgejo-mcp-code-scans-b6w82)</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/forgejo-mcp-code-scans-b6w82) 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 forgejo-mcp-code-scans-b6w82 -f</code>
op1st-gitops commented 2026-06-02 14:31:25 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-on-pull-request-jbdw7 is running.

Starting Pipelinerun forgejo-mcp-on-pull-request-jbdw7 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 forgejo-mcp-on-pull-request-jbdw7 -f

op1st Pipelines as Code/forgejo-mcp-on-pull-request-jbdw7 is running. Starting Pipelinerun <b>[forgejo-mcp-on-pull-request-jbdw7](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/forgejo-mcp-on-pull-request-jbdw7)</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/forgejo-mcp-on-pull-request-jbdw7) 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 forgejo-mcp-on-pull-request-jbdw7 -f</code>
op1st-gitops commented 2026-06-02 14:31:25 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr- has failed.
There was an error creating the PipelineRun: forgejo-mcp-openspec-validate-pr-

cannot use the API on the provider platform to create a in_progress status:

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr- has <b>failed</b>. There was an error creating the PipelineRun: <b>forgejo-mcp-openspec-validate-pr-</b> cannot use the API on the provider platform to create a in_progress status:
op1st-gitops commented 2026-06-02 14:31:52 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-code-scans-b6w82 has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 14 seconds

fetch-source

Succeeded 12 seconds

gitleaks-version

Succeeded 12 seconds

gitleaks

op1st Pipelines as Code/forgejo-mcp-code-scans-b6w82 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/forgejo-mcp-code-scans-b6w82">forgejo-mcp-code-scans-b6w82</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/forgejo-mcp-code-scans-b6w82/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/forgejo-mcp-code-scans-b6w82/logs/gitleaks-version) </td></tr> <tr> <td>Succeeded</td> <td>12 seconds</td><td> [gitleaks](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/forgejo-mcp-code-scans-b6w82/logs/gitleaks) </td></tr> </table>
goern commented 2026-06-02 14:32:36 +00:00 (Migrated from codeberg.org)

/test forgejo-mcp-openspec-validate-pr

The red status is a PaC infrastructure error (cannot use the API on the provider platform to create a in_progress status) raised at PipelineRun creation — not a validation failure. The real run (-zn94k) reported "successfully validated"; code-scans and on-pull-request are green. Reproduced locally: openspec validate --all --strict → 17/17, check-demos → 0 errors. Re-running to clear the stale status.

/test forgejo-mcp-openspec-validate-pr The red status is a PaC infrastructure error (`cannot use the API on the provider platform to create a in_progress status`) raised at PipelineRun **creation** — not a validation failure. The real run (`-zn94k`) reported "successfully validated"; `code-scans` and `on-pull-request` are green. Reproduced locally: `openspec validate --all --strict` → 17/17, `check-demos` → 0 errors. Re-running to clear the stale status.
op1st-gitops commented 2026-06-02 14:32:43 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-c5575 is running.

Starting Pipelinerun forgejo-mcp-openspec-validate-pr-c5575 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 forgejo-mcp-openspec-validate-pr-c5575 -f

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-c5575 is running. Starting Pipelinerun <b>[forgejo-mcp-openspec-validate-pr-c5575](https://console-openshift-console.apps.nostromo.erdgeschoss.b4mad.emea.operate-first.cloud/k8s/ns/op1st-pipelines/tekton.dev~v1~PipelineRun/forgejo-mcp-openspec-validate-pr-c5575)</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/forgejo-mcp-openspec-validate-pr-c5575) 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 forgejo-mcp-openspec-validate-pr-c5575 -f</code>
op1st-gitops commented 2026-06-02 14:33:09 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-c5575 has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 13 seconds

fetch-source

Succeeded 12 seconds

validate

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-c5575 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/forgejo-mcp-openspec-validate-pr-c5575">forgejo-mcp-openspec-validate-pr-c5575</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/forgejo-mcp-openspec-validate-pr-c5575/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/forgejo-mcp-openspec-validate-pr-c5575/logs/validate) </td></tr> </table>
op1st-gitops commented 2026-06-02 14:33:20 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-on-pull-request-jbdw7 has successfully validated your commit.


Task Statuses:

StatusDurationName
Succeeded 13 seconds

fetch-source

Succeeded 1 minute

build-and-test

Succeeded 14 seconds

commit-title-check

op1st Pipelines as Code/forgejo-mcp-on-pull-request-jbdw7 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/forgejo-mcp-on-pull-request-jbdw7">forgejo-mcp-on-pull-request-jbdw7</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/forgejo-mcp-on-pull-request-jbdw7/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/forgejo-mcp-on-pull-request-jbdw7/logs/build-and-test) </td></tr> <tr> <td>Succeeded</td> <td>14 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/forgejo-mcp-on-pull-request-jbdw7/logs/commit-title-check) </td></tr> </table>
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!196
No description provided.