feat(wiki): add direct REST wiki support #379

Merged
woozar merged 0 commits from feat/wiki-support-direct-rest into main 2026-07-23 03:21:27 +00:00
woozar commented 2026-07-18 22:06:07 +00:00 (Migrated from codeberg.org)

Closes #32.

Summary

  • add six wiki tools (list, get, revisions, create, update, delete)
  • implement the missing Forgejo wiki surface through the existing authenticated raw-HTTP layer, without a new SDK dependency
  • add forgejo://repo/{owner}/{repo}/wiki/{pageName} with JSON metadata and a bounded Markdown sidecar
  • support normalized names, spaces, and slash-separated flat page names (%2F in resource URIs)
  • expose stable MCP response DTOs without leaking content_base64 or author email addresses
  • preserve page names when update omits title; document duplicate-create overwrite and last-writer-wins behavior

Pagination finding

Live verification falsified the initially proposed limit+1 strategy: because Forgejo computes the offset from the requested page size, page 2 skipped an item after page 1 had been fetched with limit+1.

The implementation therefore fetches the current page with exactly the caller's limit. When that page is full, it probes page+1 with the same limit to compute has_next. This preserves stable page boundaries for pages and revisions.

Output-bounding checklist

  • list_wiki_pages: entity list bounded by caller-controlled page/limit
  • get_wiki_revisions: entity list bounded by caller-controlled page/limit
  • both list tools return has_next and echo page for continuation
  • get_wiki_page: text bounded by caller-controlled start_line/end_line; always returns total_lines
  • create/update/delete return fixed-shape, semantics-bounded responses
  • resource revisions use resource.Bounded with a sentinel naming get_wiki_revisions
  • resource Markdown is capped at 1 MiB, UTF-8 safely, with a marker naming the ranged get_wiki_page tool
  • bound parameters are documented in tool schemas and README

Verification

Live-tested against Forgejo 15.0.4+gitea-1.22.0; the complete MCP demo was replayed against 16.0.0+gitea-1.22.0.

  • full create/list/get/resource-read/update/revisions/ranged-read/delete replay
  • encoded-slash tool and resources/read round trips
  • 32-page pagination boundary test; all temporary pages removed
  • duplicate create overwrites on the tested server
  • stale body SHA and If-Match are ignored by the tested server, so updates are documented as last-writer-wins

Quality gates:

  • make build
  • go vet ./...
  • gofmt and go mod tidy drift checks
  • go test -race -shuffle=on -count=1 ./...
  • golangci-lint v2.12.2: 0 findings
  • govulncheck with Go 1.26.5: 0 reachable vulnerabilities
  • dependency license check
  • openspec validate --all --strict: 21 passed, 0 failed
  • end-to-end Showboat transcript captured and OpenSpec change archived

Follow-ups

Two non-blocking hardening ideas remain documented for separate work: distinguish a disabled wiki from a missing page, and add an API-drift guard for unexpectedly empty decoded content.

Closes #32. ## Summary - add six wiki tools (`list`, `get`, `revisions`, `create`, `update`, `delete`) - implement the missing Forgejo wiki surface through the existing authenticated raw-HTTP layer, without a new SDK dependency - add `forgejo://repo/{owner}/{repo}/wiki/{pageName}` with JSON metadata and a bounded Markdown sidecar - support normalized names, spaces, and slash-separated flat page names (`%2F` in resource URIs) - expose stable MCP response DTOs without leaking `content_base64` or author email addresses - preserve page names when update omits `title`; document duplicate-create overwrite and last-writer-wins behavior ## Pagination finding Live verification falsified the initially proposed `limit+1` strategy: because Forgejo computes the offset from the requested page size, page 2 skipped an item after page 1 had been fetched with `limit+1`. The implementation therefore fetches the current page with exactly the caller's `limit`. When that page is full, it probes `page+1` with the same limit to compute `has_next`. This preserves stable page boundaries for pages and revisions. ## Output-bounding checklist - [x] `list_wiki_pages`: entity list bounded by caller-controlled `page`/`limit` - [x] `get_wiki_revisions`: entity list bounded by caller-controlled `page`/`limit` - [x] both list tools return `has_next` and echo `page` for continuation - [x] `get_wiki_page`: text bounded by caller-controlled `start_line`/`end_line`; always returns `total_lines` - [x] create/update/delete return fixed-shape, semantics-bounded responses - [x] resource revisions use `resource.Bounded` with a sentinel naming `get_wiki_revisions` - [x] resource Markdown is capped at 1 MiB, UTF-8 safely, with a marker naming the ranged `get_wiki_page` tool - [x] bound parameters are documented in tool schemas and README ## Verification Live-tested against Forgejo `15.0.4+gitea-1.22.0`; the complete MCP demo was replayed against `16.0.0+gitea-1.22.0`. - full create/list/get/resource-read/update/revisions/ranged-read/delete replay - encoded-slash tool and `resources/read` round trips - 32-page pagination boundary test; all temporary pages removed - duplicate create overwrites on the tested server - stale body SHA and `If-Match` are ignored by the tested server, so updates are documented as last-writer-wins Quality gates: - `make build` - `go vet ./...` - gofmt and `go mod tidy` drift checks - `go test -race -shuffle=on -count=1 ./...` - `golangci-lint v2.12.2`: 0 findings - `govulncheck` with Go 1.26.5: 0 reachable vulnerabilities - dependency license check - `openspec validate --all --strict`: 21 passed, 0 failed - end-to-end Showboat transcript captured and OpenSpec change archived ## Follow-ups Two non-blocking hardening ideas remain documented for separate work: distinguish a disabled wiki from a missing page, and add an API-drift guard for unexpectedly empty decoded content.
op1st-gitops commented 2026-07-18 22:06:12 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code is skipping this commit.
User woozar is not allowed to trigger CI via pull_request in this repo.

op1st Pipelines as Code is skipping this commit. User woozar is not allowed to trigger CI via pull_request in this repo.
op1st-gitops commented 2026-07-18 22:07:11 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code is skipping this commit.
User woozar is not allowed to trigger CI via pull_request in this repo.

op1st Pipelines as Code is skipping this commit. User woozar is not allowed to trigger CI via pull_request in this repo.
goern commented 2026-07-19 12:22:42 +00:00 (Migrated from codeberg.org)

/ok-to-test

/ok-to-test
op1st-gitops commented 2026-07-19 12:22:49 +00:00 (Migrated from codeberg.org)

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

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

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

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

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

op1st Pipelines as Code/forgejo-mcp-on-pull-request-qk96c is running. Starting Pipelinerun <b>[forgejo-mcp-on-pull-request-qk96c](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-qk96c)</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-qk96c) 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-qk96c -f</code>
op1st-gitops commented 2026-07-19 12:22:50 +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-07-19 12:23:23 +00:00 (Migrated from codeberg.org)

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


Task Statuses:

StatusDurationName
Succeeded 21 seconds

fetch-source

Succeeded 9 seconds

gitleaks-version

Succeeded 11 seconds

gitleaks

op1st Pipelines as Code/forgejo-mcp-code-scans-5g9b4 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-5g9b4">forgejo-mcp-code-scans-5g9b4</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>21 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-5g9b4/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>9 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-5g9b4/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-5g9b4/logs/gitleaks) </td></tr> </table>
op1st-gitops commented 2026-07-19 12:25:25 +00:00 (Migrated from codeberg.org)

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


Task Statuses:

StatusDurationName
Succeeded 19 seconds

fetch-source

Succeeded 2 minutes

build-and-test

Succeeded 17 seconds

commit-title-check

op1st Pipelines as Code/forgejo-mcp-on-pull-request-qk96c 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-qk96c">forgejo-mcp-on-pull-request-qk96c</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>19 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-qk96c/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/forgejo-mcp-on-pull-request-qk96c/logs/build-and-test) </td></tr> <tr> <td>Succeeded</td> <td>17 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-qk96c/logs/commit-title-check) </td></tr> </table>
woozar commented 2026-07-19 21:32:16 +00:00 (Migrated from codeberg.org)

/retest forgejo-mcp-openspec-validate-pr

/retest forgejo-mcp-openspec-validate-pr
op1st-gitops commented 2026-07-19 21:32:24 +00:00 (Migrated from codeberg.org)

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

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

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-6nswn is running. Starting Pipelinerun <b>[forgejo-mcp-openspec-validate-pr-6nswn](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-6nswn)</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-6nswn) 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-6nswn -f</code>
op1st-gitops commented 2026-07-19 21:32:50 +00:00 (Migrated from codeberg.org)

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


Task Statuses:

StatusDurationName
Succeeded 12 seconds

fetch-source

Succeeded 13 seconds

validate

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-6nswn 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-6nswn">forgejo-mcp-openspec-validate-pr-6nswn</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-openspec-validate-pr-6nswn/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>13 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-6nswn/logs/validate) </td></tr> </table>
op1st-gitops commented 2026-07-19 21:35:17 +00:00 (Migrated from codeberg.org)

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

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

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-m9d9x is running. Starting Pipelinerun <b>[forgejo-mcp-openspec-validate-pr-m9d9x](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-m9d9x)</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-m9d9x) 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-m9d9x -f</code>
op1st-gitops commented 2026-07-19 21:35:17 +00:00 (Migrated from codeberg.org)

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

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

op1st Pipelines as Code/forgejo-mcp-on-pull-request-5wwhw is running. Starting Pipelinerun <b>[forgejo-mcp-on-pull-request-5wwhw](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-5wwhw)</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-5wwhw) 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-5wwhw -f</code>
op1st-gitops commented 2026-07-19 21:35:17 +00:00 (Migrated from codeberg.org)

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

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

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

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


Task Statuses:

StatusDurationName
Succeeded 31 seconds

fetch-source

Succeeded 26 seconds

gitleaks-version

Succeeded 17 seconds

gitleaks

op1st Pipelines as Code/forgejo-mcp-code-scans-94gsz 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-94gsz">forgejo-mcp-code-scans-94gsz</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>31 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-94gsz/logs/fetch-source) </td></tr> <tr> <td>Succeeded</td> <td>26 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-94gsz/logs/gitleaks-version) </td></tr> <tr> <td>Succeeded</td> <td>17 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-94gsz/logs/gitleaks) </td></tr> </table>
op1st-gitops commented 2026-07-19 21:36:13 +00:00 (Migrated from codeberg.org)

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


Task Statuses:

StatusDurationName
Succeeded 31 seconds

fetch-source

Succeeded 22 seconds

validate

op1st Pipelines as Code/forgejo-mcp-openspec-validate-pr-m9d9x 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-m9d9x">forgejo-mcp-openspec-validate-pr-m9d9x</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>31 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-m9d9x/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/forgejo-mcp-openspec-validate-pr-m9d9x/logs/validate) </td></tr> </table>
op1st-gitops commented 2026-07-19 21:39:35 +00:00 (Migrated from codeberg.org)

op1st Pipelines as Code/forgejo-mcp-on-pull-request-5wwhw has failed.


Task Statuses:

StatusDurationName
Succeeded 30 seconds

fetch-source

Failed 24 seconds

commit-title-check

Succeeded 3 minutes

build-and-test


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/forgejo-mcp-on-pull-request-5wwhw 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/forgejo-mcp-on-pull-request-5wwhw">forgejo-mcp-on-pull-request-5wwhw</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>30 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-5wwhw/logs/fetch-source) </td></tr> <tr> <td>Failed</td> <td>24 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-5wwhw/logs/commit-title-check) </td></tr> <tr> <td>Succeeded</td> <td>3 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/forgejo-mcp-on-pull-request-5wwhw/logs/build-and-test) </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>
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!379
No description provided.