Skip to content

docs(readme): fenced install blocks so MCP directories can parse them - #341

Merged
hyperpolymath merged 1 commit into
mainfrom
docs/listing-score-fenced-install
Oct 6, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
docs/listing-score-fenced-install

Conversation

@hyperpolymath

@hyperpolymath hyperpolymath commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

Summary

Lifts the boj-server listing on aiagentslisting.com from F (22/49). The scanner reads README.adoc raw, because that is the file GitHub's /readme API serves. It only recognises Markdown ``` fences, so it failed Installation method (required, 15) and Easy install (12). Because it never parsed the npx command, it also reported "ships no npx package for our sandbox". That left the four live checks unscored (Verified live 20, Exposes tools 15, Ships prompts 8, Ships resources 8) and capped the grade at B. The command and the `mcpServers` block were already in the README, inside AsciiDoc `[source]` / `----` blocks.

📌 New pins

Head SHA: b8515b9. No pins added or changed (docs-only: no uses:, actions.lock, lockfile or container digest touched).

Changes

  • README.adoc, == Install section only: the three [source,bash|json] + ---- blocks become ```bash / ```json fences, which Asciidoctor accepts natively, so the page renders the same. The ++_++ escapes inside those blocks are dropped, since they are literal within fences. Adds a bare npx -y @hyperpolymath/boj-server line.
  • README.md is re-derived with the README Derive workflow's pinned toolchain (asciidoctor-reducer → asciidoctor 2.0.26 docbook5 → pandoc 3.10 gfm, plus the SPDX/GENERATED banner). This also clears staleness on main: today's badge-table edits to README.adoc had not been re-derived.

RSR Quality Checklist

Required

  • Tests pass. N/A: docs-only, no code touched. The README Derive check is the relevant gate (see Testing).
  • Code is formatted. N/A: no source files changed.
  • Linter is clean: asciidoctor --failure-level=WARN -b docbook5 exits 0 with no warnings.
  • No banned language patterns: prose and code-fence changes only.
  • No unsafe blocks without // SAFETY:. N/A: no code.
  • No banned functions.
  • SPDX headers: both READMEs keep their existing SPDX lines. No new files.
  • No secrets, credentials or .env files.

As Applicable

  • .machine_readable/ STATE/ECOSYSTEM/META. N/A: no project state, integration or architecture change.
  • Documentation updated for user-facing changes: the install section.
  • TOPOLOGY.md. N/A.
  • CHANGELOG. N/A: README presentation only, no release-visible change.
  • New dependencies. N/A: none.
  • ABI/FFI. N/A.

Testing

  • Derivation reproduces CI. I ran the workflow's local recipe with the same pinned versions (pandoc 3.10, asciidoctor 2.0.26). Diffed against the derivation of unmodified main, the only change is the added npx -y block. The install blocks were already fenced in README.md, and this PR keeps them fenced there.
  • The published package answers a live MCP handshake, sandbox-style. In a clean temp dir with no backend I ran npx -y @hyperpolymath/boj-server@latest (npm 0.4.7), sending initialize, tools/list, prompts/list and resources/list. stdout was pure JSON-RPC (logs went to stderr). It returned 65 tools, 6 prompts, 6 resources, so unlocking the live checks can only add points.
  • Comparison listing: growsurf-mcp (96/100) passes the same checks using ```json mcpServers and ```bash npx -y … fences.
  • Not yet verified: the score change itself. That needs a rescan from the listing dashboard after merge.

Deferred red checks (pre-existing on main, non-required)

All four fail identically on main at cb567a42, the base of this PR:

Screenshots

N/A.

🤖 Generated with Claude Code

https://claude.ai/code/session_01R1piD9ewX1Qqm9ciFcmPxG

aiagentslisting.com reads README.adoc raw (GitHub's /readme choice) and
only recognises Markdown ``` fences. It failed "Installation method" and
"Easy install", and could not find the npx package for its live checks,
although the npx command and mcpServers block were both present inside
AsciiDoc [source]/---- blocks.

Asciidoctor accepts ``` fences natively, so the == Install section now
uses them (rendering unchanged), plus a bare `npx -y` line. README.md is
re-derived with the pinned toolchain (pandoc 3.10, asciidoctor 2.0.26);
this also clears staleness from today's badge-table edits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R1piD9ewX1Qqm9ciFcmPxG
@coderabbitai

coderabbitai Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 31c338d4-c8bf-4ef3-95ae-37a1175f76d4
📥 Commits

Reviewing files that changed from the base of the PR and between cb567a4 and b8515b9.

📒 Files selected for processing (2)
  • README.adoc
  • README.md

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (25)
  • GitHub Check: governance / Workflow security linter
  • GitHub Check: governance / Trusted-base reduction policy
  • GitHub Check: governance / Guix packaging policy (Nix retired)
  • GitHub Check: governance / Language / package anti-pattern policy
  • GitHub Check: governance / Allowlist Preflight
  • GitHub Check: governance / Exemption ratchet
  • GitHub Check: governance / Debt ratchet
  • GitHub Check: governance / Licence consistency
  • GitHub Check: governance / Well-Known (RFC 9116 + RSR)
  • GitHub Check: governance / Check Workflow Staleness
  • GitHub Check: governance / Code quality + docs
  • GitHub Check: governance / Security policy checks
  • GitHub Check: Groove manifest check
  • GitHub Check: Validate DEED manifests
  • GitHub Check: Validate eclexiaiser manifest
  • GitHub Check: readme-derive / Derive & verify README.md
  • GitHub Check: scan / gitleaks
  • GitHub Check: analyze (javascript-typescript, none)
  • GitHub Check: Bridge — deno (unit + boot smoke)
  • GitHub Check: Bridge — bun (unit + boot smoke)
  • GitHub Check: Detect relevant changes
  • GitHub Check: Detect relevant changes
  • GitHub Check: SonarQube
  • GitHub Check: Hypatia Neurosymbolic Analysis
  • GitHub Check: Detect relevant changes
⚠️ CI failures not shown inline (14)

GitHub Actions: README Derive / readme-derive _ Derive & verify README.md: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run set -euo pipefail
 �[36;1mset -euo pipefail�[0m
 �[36;1mcurl -fsSL -o /tmp/pandoc.deb \�[0m
 �[36;1m  "https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-1-amd64.deb"�[0m
 �[36;1msudo dpkg -i /tmp/pandoc.deb�[0m
 �[36;1msudo gem install --no-document \�[0m
 �[36;1m  asciidoctor -v "$ASCIIDOCTOR_VERSION" \�[0m
 �[36;1m  asciidoctor-reducer -v "$ASCIIDOCTOR_REDUCER_VERSION"�[0m
 �[36;1mpandoc --version | head -1�[0m
 �[36;1masciidoctor --version | head -1�[0m
 shell: /usr/bin/bash -e {0}
 env:
   PANDOC_VERSION: 3.10
   ASCIIDOCTOR_VERSION: 2.0.26
   ASCIIDOCTOR_REDUCER_VERSION: 1.1.1
 ##[endgroup]
 Selecting previously unselected package pandoc.
 (Reading database ... 203191 files and directories currently installed.)
 Preparing to unpack /tmp/pandoc.deb ...
 Unpacking pandoc (3.10-1) ...
 Setting up pandoc (3.10-1) ...
 Processing triggers for man-db (2.12.0-4build2) ...
 Not building database; man-db/auto-update is not 'true'.
 ERROR:  Can't use --version with multiple gems. You can specify multiple gems with version requirements using `gem install 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`
 ##[error]Process completed with exit code 1.

GitHub Actions: Build / 0_SonarQube.txt: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run SonarSource/sonarqube-scan-action@v8.1.0
 with:
   projectBaseDir: .
   scannerVersion: 8.1.0.6389
   scannerBinariesUrl: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli
   skipSignatureVerification: false
 env:
   SONAR_***REDACTED_SECRET_ASSIGNMENT***
 ##[endgroup]
 Installing Sonar Scanner CLI 8.1.0.6389 for linux-x64...
 Downloading from: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-8.1.0.6389-linux-x64.zip
 Downloading signature from: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-8.1.0.6389-linux-x64.zip.asc
 Importing SonarSource public key from hkps://keyserver.ubuntu.com...
 [command]/usr/bin/gpg --homedir /home/runner/work/_temp/gpg-home-1791306690764-2079 --batch --keyserver hkps://keyserver.ubuntu.com --recv-keys 679F1EE92B19609DE816FDE81DB198F93525EC1A
 gpg: keybox '/home/runner/work/_temp/gpg-home-1791306690764-2079/pubring.kbx' created
 gpg: /home/runner/work/_temp/gpg-home-1791306690764-2079/trustdb.gpg: trustdb created
 gpg: key 1DB198F93525EC1A: public key "SonarSource S.A. <infra@sonarsource.com>" imported
 gpg: Total number processed: 1
 gpg:               imported: 1
 Successfully imported key from hkps://keyserver.ubuntu.com
 ✓ SonarSource public key imported successfully
 Verifying GPG signature...
 [command]/usr/bin/gpg --homedir /home/runner/work/_temp/gpg-home-1791306690764-2079 --batch --verify /home/runner/work/_temp/6ca7c20f-c455-4dab-91d1-1770804542ac /home/runner/work/_temp/0120a69c-d83b-4f83-86e4-47c6adcdada9
 gpg: Signature made Tue Apr 21 07:20:26 2026 UTC
 gpg:                using RSA key D1436C0DBACEA48702AF97C363F1DD7753B8B315
 gpg: Good signature from "SonarSource S.A. <infra@sonarsource.com>" [unknown]
 gpg: WARNING: This key is not certified with a trusted signature!
 gpg:          There is no indication that the signature belongs to the owner.
 Primary key fingerprint: 679F 1EE9 2B19 609D E816  FDE8 1DB1 98F9 3525 EC1A
   ...

GitHub Actions: Build / SonarQube: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run SonarSource/sonarqube-scan-action@v8.1.0
 with:
   projectBaseDir: .
   scannerVersion: 8.1.0.6389
   scannerBinariesUrl: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli
   skipSignatureVerification: false
 env:
   SONAR_***REDACTED_SECRET_ASSIGNMENT***
 ##[endgroup]
 Installing Sonar Scanner CLI 8.1.0.6389 for linux-x64...
 Downloading from: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-8.1.0.6389-linux-x64.zip
 Downloading signature from: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-8.1.0.6389-linux-x64.zip.asc
 Importing SonarSource public key from hkps://keyserver.ubuntu.com...
 [command]/usr/bin/gpg --homedir /home/runner/work/_temp/gpg-home-1791306690764-2079 --batch --keyserver hkps://keyserver.ubuntu.com --recv-keys 679F1EE92B19609DE816FDE81DB198F93525EC1A
 gpg: keybox '/home/runner/work/_temp/gpg-home-1791306690764-2079/pubring.kbx' created
 gpg: /home/runner/work/_temp/gpg-home-1791306690764-2079/trustdb.gpg: trustdb created
 gpg: key 1DB198F93525EC1A: public key "SonarSource S.A. <infra@sonarsource.com>" imported
 gpg: Total number processed: 1
 gpg:               imported: 1
 Successfully imported key from hkps://keyserver.ubuntu.com
 ✓ SonarSource public key imported successfully
 Verifying GPG signature...
 [command]/usr/bin/gpg --homedir /home/runner/work/_temp/gpg-home-1791306690764-2079 --batch --verify /home/runner/work/_temp/6ca7c20f-c455-4dab-91d1-1770804542ac /home/runner/work/_temp/0120a69c-d83b-4f83-86e4-47c6adcdada9
 gpg: Signature made Tue Apr 21 07:20:26 2026 UTC
 gpg:                using RSA key D1436C0DBACEA48702AF97C363F1DD7753B8B315
 gpg: Good signature from "SonarSource S.A. <infra@sonarsource.com>" [unknown]
 gpg: WARNING: This key is not certified with a trusted signature!
 gpg:          There is no indication that the signature belongs to the owner.
 Primary key fingerprint: 679F 1EE9 2B19 609D E816  FDE8 1DB1 98F9 3525 EC1A
   ...

GitHub Actions: Governance / 3_governance _ Workflow security linter.txt: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run # GitHub Actions REJECTS a workflow with duplicate keys: the run is
 �[36;1m# GitHub Actions REJECTS a workflow with duplicate keys: the run is�[0m
 �[36;1m# `failure` with no jobs, no log and no check run. Nothing else here�[0m
 �[36;1m# can see it, because yaml.safe_load silently keeps the LAST�[0m
 �[36;1m# duplicate and reports success — so the file "parses" and every�[0m
 �[36;1m# other lint passes. Measured 2026-08-05: nine workflows in hypatia�[0m
 �[36;1m# were dead this way, including a CodeQL workflow with zero�[0m
 �[36;1m# successful runs in its entire lifetime.�[0m
 �[36;1mset -euo pipefail�[0m
 �[36;1mSCRIPT=".standards-dupkey/scripts/check-workflow-duplicate-keys.sh"�[0m
 �[36;1m# Self-hosting fallback: when THIS repository is standards, its own�[0m
 �[36;1m# working tree already holds the script, and during a rename that copy�[0m
 �[36;1m# is the only correct one — the pinned main checkout still has the old�[0m
 �[36;1m# name. Preferring the fetched copy keeps every other caller on the�[0m
 �[36;1m# canonical version.�[0m
 �[36;1mif [ ! -f "$SCRIPT" ] && [ -f scripts/check-workflow-duplicate-keys.sh ]; then�[0m
 �[36;1m  SCRIPT="scripts/check-workflow-duplicate-keys.sh"�[0m
 �[36;1m  echo "Using this repository's own copy (standards self-lint)."�[0m
 �[36;1mfi�[0m
 �[36;1mif [ ! -f "$SCRIPT" ]; then�[0m
 �[36;1m  echo "::error::duplicate-key checker not found — neither fetched from" \�[0m

GitHub Actions: Governance / governance _ Workflow security linter: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run # GitHub Actions REJECTS a workflow with duplicate keys: the run is
 �[36;1m# GitHub Actions REJECTS a workflow with duplicate keys: the run is�[0m
 �[36;1m# `failure` with no jobs, no log and no check run. Nothing else here�[0m
 �[36;1m# can see it, because yaml.safe_load silently keeps the LAST�[0m
 �[36;1m# duplicate and reports success — so the file "parses" and every�[0m
 �[36;1m# other lint passes. Measured 2026-08-05: nine workflows in hypatia�[0m
 �[36;1m# were dead this way, including a CodeQL workflow with zero�[0m
 �[36;1m# successful runs in its entire lifetime.�[0m
 �[36;1mset -euo pipefail�[0m
 �[36;1mSCRIPT=".standards-dupkey/scripts/check-workflow-duplicate-keys.sh"�[0m
 �[36;1m# Self-hosting fallback: when THIS repository is standards, its own�[0m
 �[36;1m# working tree already holds the script, and during a rename that copy�[0m
 �[36;1m# is the only correct one — the pinned main checkout still has the old�[0m
 �[36;1m# name. Preferring the fetched copy keeps every other caller on the�[0m
 �[36;1m# canonical version.�[0m
 �[36;1mif [ ! -f "$SCRIPT" ] && [ -f scripts/check-workflow-duplicate-keys.sh ]; then�[0m
 �[36;1m  SCRIPT="scripts/check-workflow-duplicate-keys.sh"�[0m
 �[36;1m  echo "Using this repository's own copy (standards self-lint)."�[0m
 �[36;1mfi�[0m
 �[36;1mif [ ! -f "$SCRIPT" ]; then�[0m
 �[36;1m  echo "::error::duplicate-key checker not found — neither fetched from" \�[0m

GitHub Actions: Governance / 6_governance _ Allowlist Preflight.txt: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run rm -rf .standards-checkout
 �[36;1mrm -rf .standards-checkout�[0m
 �[36;1mbash "$RUNNER_TEMP/check-actions-policy.sh" \�[0m
 �[36;1m  "$GITHUB_REPOSITORY" "$RUNNER_TEMP/allowed-actions.json"�[0m
 shell: /usr/bin/bash -e {0}
 env:
   GH_***REDACTED_SECRET_ASSIGNMENT***
 gh: To use GitHub CLI in a GitHub Actions workflow, set the GH_TOKEN environment variable. Example:
   env:
     GH_***REDACTED_SECRET_ASSIGNMENT*** github.token }}
 ERROR: could not read live Actions permissions for hyperpolymath/boj-server
 ##[error]Process completed with exit code 3.

GitHub Actions: Governance / governance _ Allowlist Preflight: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run rm -rf .standards-checkout
 �[36;1mrm -rf .standards-checkout�[0m
 �[36;1mbash "$RUNNER_TEMP/check-actions-policy.sh" \�[0m
 �[36;1m  "$GITHUB_REPOSITORY" "$RUNNER_TEMP/allowed-actions.json"�[0m
 shell: /usr/bin/bash -e {0}
 env:
   GH_***REDACTED_SECRET_ASSIGNMENT***
 gh: To use GitHub CLI in a GitHub Actions workflow, set the GH_TOKEN environment variable. Example:
   env:
     GH_***REDACTED_SECRET_ASSIGNMENT*** github.token }}
 ERROR: could not read live Actions permissions for hyperpolymath/boj-server
 ##[error]Process completed with exit code 3.

GitHub Actions: Governance / 8_governance _ Code quality + docs.txt: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run editorconfig-checker/action-editorconfig-checker@840e866d93b8e032123c23bac69dece044d4d84c
 with:
   github-***REDACTED_SECRET_ASSIGNMENT***
   version: latest
 ##[endgroup]
 Find 'latest' release
 ##[error]Error: The binary 'ec-linux-amd64*' not found

GitHub Actions: Governance / governance _ Code quality + docs: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run editorconfig-checker/action-editorconfig-checker@840e866d93b8e032123c23bac69dece044d4d84c
 with:
   github-***REDACTED_SECRET_ASSIGNMENT***
   version: latest
 ##[endgroup]
 Find 'latest' release
 ##[error]Error: The binary 'ec-linux-amd64*' not found

GitHub Actions: Governance / 11_governance _ Security policy checks.txt: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run set -uo pipefail
 �[36;1mset -uo pipefail�[0m
 �[36;1mDIR=.github/canonical-references�[0m
 �[36;1mif [ ! -d "$DIR" ]; then�[0m
 �[36;1m  echo "ℹ️  [R5] no $DIR/ — skipped (repo has not opted in)"�[0m
 �[36;1m  exit 0�[0m
 �[36;1mfi�[0m
 �[36;1mif ! command -v python3 >/dev/null 2>&1; then�[0m
 �[36;1m  echo "❌ [R5] python3 missing on runner — required for YAML rule parsing"�[0m
 �[36;1m  exit 2�[0m
 �[36;1mfi�[0m
 �[36;1mpython3 - <<'PY'�[0m
 �[36;1mimport os, sys, glob, subprocess�[0m
 �[36;1mtry:�[0m
 �[36;1m    import yaml�[0m
 �[36;1mexcept ImportError:�[0m
 �[36;1m    sys.exit("❌ [R5] PyYAML not installed on runner; install python3-yaml")�[0m
 �[36;1m�[0m
 �[36;1mdir_ = ".github/canonical-references"�[0m
 �[36;1mfiles = sorted(glob.glob(f"{dir_}/*.yml") + glob.glob(f"{dir_}/*.yaml"))�[0m
 �[36;1mif not files:�[0m
 �[36;1m    print(f"ℹ️  [R5] {dir_}/ has no .yml/.yaml rules — skipped")�[0m
 �[36;1m    sys.exit(0)�[0m
 �[36;1m�[0m
 �[36;1mtotal = 0�[0m
 �[36;1mfor rf in files:�[0m
 �[36;1m    with open(rf, encoding="utf-8") as fh:�[0m
 �[36;1m        cfg = yaml.safe_load(fh)�[0m
 �[36;1m    if not isinstance(cfg, dict):�[0m
 �[36;1m        print(f"❌ [R5] {rf}: top-level must be a mapping"); total += 1; continue�[0m
 �[36;1m    rid  = cfg.get("id", os.path.basename(rf))�[0m
 �[36;1m    desc = cfg.get("description", "")�[0m
 �[36;1m    pats = cfg.get("patterns") or []�[0m
 �[36;1m    canon = cfg.get("canonical_pointer", "")�[0m
 �[36;1m    scope = (cfg.get("scope") or {})�[0m
 �[36;1m    includes = scope.get("include") or []�[0m
 �[36;1m    if not pats or not includes:�[0m
 �[36;1m        print(f"❌ [R5:{rid}] missing patterns or scope.include in {rf}")�[0m
 �[36;1m        total += 1; continue�[0m
 �[36;1m    # exclude self-references�[0m
 �[36;1m    skip = set(["CHANGELOG.md", "CHANGELOG.adoc", rf])�[0m
 �[36;1m    if canon: skip.add(canon)�[0m
 �[36;1m    rule_hits = 0�[0m
 �[36;1m    for f_ in includes:�[0m
 �[36;1m        if f_ in skip or not os...

GitHub Actions: Governance / governance _ Security policy checks: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run set -uo pipefail
 �[36;1mset -uo pipefail�[0m
 �[36;1mDIR=.github/canonical-references�[0m
 �[36;1mif [ ! -d "$DIR" ]; then�[0m
 �[36;1m  echo "ℹ️  [R5] no $DIR/ — skipped (repo has not opted in)"�[0m
 �[36;1m  exit 0�[0m
 �[36;1mfi�[0m
 �[36;1mif ! command -v python3 >/dev/null 2>&1; then�[0m
 �[36;1m  echo "❌ [R5] python3 missing on runner — required for YAML rule parsing"�[0m
 �[36;1m  exit 2�[0m
 �[36;1mfi�[0m
 �[36;1mpython3 - <<'PY'�[0m
 �[36;1mimport os, sys, glob, subprocess�[0m
 �[36;1mtry:�[0m
 �[36;1m    import yaml�[0m
 �[36;1mexcept ImportError:�[0m
 �[36;1m    sys.exit("❌ [R5] PyYAML not installed on runner; install python3-yaml")�[0m
 �[36;1m�[0m
 �[36;1mdir_ = ".github/canonical-references"�[0m
 �[36;1mfiles = sorted(glob.glob(f"{dir_}/*.yml") + glob.glob(f"{dir_}/*.yaml"))�[0m
 �[36;1mif not files:�[0m
 �[36;1m    print(f"ℹ️  [R5] {dir_}/ has no .yml/.yaml rules — skipped")�[0m
 �[36;1m    sys.exit(0)�[0m
 �[36;1m�[0m
 �[36;1mtotal = 0�[0m
 �[36;1mfor rf in files:�[0m
 �[36;1m    with open(rf, encoding="utf-8") as fh:�[0m
 �[36;1m        cfg = yaml.safe_load(fh)�[0m
 �[36;1m    if not isinstance(cfg, dict):�[0m
 �[36;1m        print(f"❌ [R5] {rf}: top-level must be a mapping"); total += 1; continue�[0m
 �[36;1m    rid  = cfg.get("id", os.path.basename(rf))�[0m
 �[36;1m    desc = cfg.get("description", "")�[0m
 �[36;1m    pats = cfg.get("patterns") or []�[0m
 �[36;1m    canon = cfg.get("canonical_pointer", "")�[0m
 �[36;1m    scope = (cfg.get("scope") or {})�[0m
 �[36;1m    includes = scope.get("include") or []�[0m
 �[36;1m    if not pats or not includes:�[0m
 �[36;1m        print(f"❌ [R5:{rid}] missing patterns or scope.include in {rf}")�[0m
 �[36;1m        total += 1; continue�[0m
 �[36;1m    # exclude self-references�[0m
 �[36;1m    skip = set(["CHANGELOG.md", "CHANGELOG.adoc", rf])�[0m
 �[36;1m    if canon: skip.add(canon)�[0m
 �[36;1m    rule_hits = 0�[0m
 �[36;1m    for f_ in includes:�[0m
 �[36;1m        if f_ in skip or not os...

GitHub Actions: Governance / 12_governance _ Well-Known (RFC 9116 + RSR).txt: docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run SECTXT=""
 �[36;1mSECTXT=""�[0m
 �[36;1m[ -f ".well-known/security.txt" ] && SECTXT=".well-known/security.txt"�[0m
 �[36;1m[ -f "security.txt" ] && SECTXT="security.txt"�[0m
 �[36;1mif [ -z "$SECTXT" ]; then�[0m
 �[36;1m  echo "::warning::No security.txt found."�[0m
 �[36;1m  exit 0�[0m
 �[36;1mfi�[0m
 �[36;1mgrep -q "^Contact:" "$SECTXT" || { echo "::error::Missing Contact field"; exit 1; }�[0m

GitHub Actions: Governance / governance _ Well-Known (RFC 9116 + RSR): docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run SECTXT=""
 �[36;1mSECTXT=""�[0m
 �[36;1m[ -f ".well-known/security.txt" ] && SECTXT=".well-known/security.txt"�[0m
 �[36;1m[ -f "security.txt" ] && SECTXT="security.txt"�[0m
 �[36;1mif [ -z "$SECTXT" ]; then�[0m
 �[36;1m  echo "::warning::No security.txt found."�[0m
 �[36;1m  exit 0�[0m
 �[36;1mfi�[0m
 �[36;1mgrep -q "^Contact:" "$SECTXT" || { echo "::error::Missing Contact field"; exit 1; }�[0m

GitHub Actions: Governance / governance _ Well-Known (RFC 9116 + RSR): docs(readme): fenced install blocks so MCP directories can parse them

Conclusion: failure

View job details

##[group]Run MIXED=$(grep -rE 'src="http://|href="http://' --include="*.html" --include="*.htm" . 2>/dev/null | grep -vE 'localhost|127\.0\.0\.1|example\.com|lol/|node_modules/|third-party/|vendor/' | head -5 || true)
 �[36;1mMIXED=$(grep -rE 'src="http://|href="http://' --include="*.html" --include="*.htm" . 2>/dev/null | grep -vE 'localhost|127\.0\.0\.1|example\.com|lol/|node_modules/|third-party/|vendor/' | head -5 || true)�[0m
 �[36;1mif [ -n "$MIXED" ]; then�[0m
 �[36;1m  echo "::error::Mixed content (HTTP in HTML)"�[0m
🧰 Additional context used
📚 Code guidelines (1)
.github/copilot-instructions.md — auto-discovered
📓 Path-based instructions (1)
Source excerpt: SPDX: `MPL-2.0` on all new files.

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Files:

  • README.md
  • README.adoc
🪛 GitHub Actions: README Derive / 0_readme-derive _ Derive & verify README.md.txt
README.adoc

[error] 1-1: The publishing README derivation step reports that the declared canonical file 'README.adoc' does not exist.

🪛 GitHub Actions: README Derive / readme-derive _ Derive & verify README.md
README.adoc

[error] 1-1: README derivation step: Declared canonical 'README.adoc' does not exist.

🪛 LanguageTool
README.md

[locale-violation] ~10-~10: License must be spelled with a “c” when used as a noun in British English. Use “licence”.
Context: ...lymath_boj-server) | | Compliance | [![License: MPL-2.0](https://img.shields.io/badge/...

(LICENCE_LICENSE_NOUN_SINGULAR)


[uncategorized] ~150-~150: The official name of this software platform is spelled with a capital “H”.
Context: ...cartridge_invoke| | **GitHub** | 14 |boj_github_list_repos, boj_github_create_issue`,...

(GITHUB)


[uncategorized] ~150-~150: The official name of this software platform is spelled with a capital “H”.
Context: ...itHub** | 14 | boj_github_list_repos, boj_github_create_issue, boj_github_create_pr, ...

(GITHUB)


[uncategorized] ~150-~150: The official name of this software platform is spelled with a capital “H”.
Context: ...list_repos, boj_github_create_issue, boj_github_create_pr, boj_github_merge_pr, boj...

(GITHUB)


[uncategorized] ~150-~150: The official name of this software platform is spelled with a capital “H”.
Context: ..._create_issue, boj_github_create_pr, boj_github_merge_pr, boj_github_search_code, b...

(GITHUB)


[uncategorized] ~150-~150: The official name of this software platform is spelled with a capital “H”.
Context: ...thub_create_pr, boj_github_merge_pr, boj_github_search_code, boj_github_graphql` | | ...

(GITHUB)


[uncategorized] ~150-~150: The official name of this software platform is spelled with a capital “H”.
Context: ...ub_merge_pr, boj_github_search_code, boj_github_graphql| | **GitLab** | 8 |boj_gitl...

(GITHUB)


[uncategorized] ~223-~223: The official name of this software platform is spelled with a capital “H”.
Context: ...ckend. | | GITHUB_TOKEN | — | PAT for boj_github_* tools. | | GITLAB_TOKEN / `GITLAB_...

(GITHUB)


[uncategorized] ~225-~225: The official name of this software platform is spelled with a capital “H”.
Context: ...ore, or a CSV of domain prefixes (e.g. core,github,browser). | | BOJ_RATE_LIMIT|60` ...

(GITHUB)

🔇 Additional comments (3)
README.md (1)

6-10: LGTM!

Also applies to: 70-75, 147-156, 208-233

README.adoc (2)

66-68: LGTM!

Also applies to: 70-74, 84-94, 107-116


3-3: 📐 Maintainability & Code Quality

The current failure is not a missing README path.

The run for this PR head failed during Install toolchain. The checkout and publishing-declaration steps succeeded, and the derivation checks were skipped. The evidence does not support changing the README path.


📝 Summary

Summary by CodeRabbit

  • Documentation
    • Updated setup examples for Claude Code and Claude Desktop, along with Deno, Bun and Node runtime commands, to use Markdown code blocks. Commands and configuration remain unchanged.
    • Reorganised README badges into tables grouped by topic and added an npx launch example for MCP clients.
    • Reformatted tool-group, transport and configuration tables without changing their documented values or behaviour.

Walkthrough

The README files reorganise badges and reference tables, add an npx launch example for MCP clients, and use Markdown fences for setup and runtime examples. Existing commands and documented options remain unchanged.

Changes

README documentation

Layer / File(s) Summary
README examples and reference layout
README.md, README.adoc
README.md groups badges, adds an MCP launch command, and reformats tool, transport and environment-variable tables. README.adoc replaces AsciiDoc source-block delimiters with Markdown fences for Claude Code, Claude Desktop and runtime examples.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~5 minutes

Change: Other

Merge Risk: ⚪ Minimal · up to b8515

The documentation changes have no established merge-blocking issue. The derivation workflow still needs a successful run, but its reported failure has not been tied to this change.

Architecture Summary

Architecture risk: 🔵 Low · up to b8515

The change affects 2 systems.

Changed systems: README.adoc, README.md

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — README.adoc (service) was modified; 1 changed file maps to changed impact.
  • observed — README.md (service) was modified; 1 changed file maps to changed impact.

Before / after behavior

  • observed — Modified behavior in README.adoc: The Claude Code CLI examples now use Markdown fences instead of an AsciiDoc [source,bash] block; the claude mcp add and direct npx commands are unchanged.
  • observed — Modified behavior in README.adoc: The Claude Desktop configuration example now opens with a Markdown JSON fence instead of the AsciiDoc [source,json] delimiter.
  • observed — Modified behavior in README.adoc: The Claude Desktop configuration example now closes with a Markdown fence instead of the AsciiDoc source-block delimiter.
  • observed — Modified behavior in README.adoc: The Deno/Bun/Node command example now opens with a Markdown Bash fence instead of the AsciiDoc [source,bash] delimiter.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly describes the main change: using fenced install blocks so MCP directories can parse them.
Description check ✅ Passed The description covers the summary, changes, quality checklist, testing, deferred checks and screenshots. It gives relevant context for the documentation-only changes and identifies that the listing s…
✨ Finishing Touches
🛠️ Fix failing CI checks
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit reads the fenced-in lines,
And finds the launch command just right.
The badges gather in neat rows,
The tables keep their facts in sight.
With README tidied, off it goes!

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 114 issues detected

Severity Count
🔴 Critical 10
🟠 High 22
🟡 Medium 82

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Job `sonarqube` in build.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
    "type": "missing_timeout_minutes",
    "file": ".github/workflows/build.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium",
    "recipe_id": "recipe-add-workflow-timeout-minutes",
    "job": "sonarqube"
  },
  {
    "reason": "Job `triage` in label-triage.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
    "type": "missing_timeout_minutes",
    "file": ".github/workflows/label-triage.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium",
    "recipe_id": "recipe-add-workflow-timeout-minutes",
    "job": "triage"
  },
  {
    "reason": "Job `sync` in labels.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
    "type": "missing_timeout_minutes",
    "file": ".github/workflows/labels.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium",
    "recipe_id": "recipe-add-workflow-timeout-minutes",
    "job": "sync"
  },
  {
    "reason": "Job `deploy` in pages-deploy.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
    "type": "missing_timeout_minutes",
    "file": ".github/workflows/pages-deploy.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium",
    "recipe_id": "recipe-add-workflow-timeout-minutes",
    "job": "deploy"
  },
  {
    "reason": "Step uses `peter-evans/repository-dispatch` with `token: ${{ secrets.FARM_DISPATCH_TOKEN }}` but has no `if: secrets.FARM_DISPATCH_TOKEN != ''` gate. On repos where the secret hasn't been propagated the action fails on every push, red-maining the repo. Add the step-level gate (or env+if pattern) so the missing-secret path is a clean skip instead of a red.",
    "type": "secret_action_without_presence_gate",
    "file": ".github/workflows/instant-sync.yml",
    "action": "peter-evans/repository-dispatch",
    "rule_module": "workflow_audit",
    "severity": "high",
    "fix_recipe": "add_secret_presence_gate"
  },
  {
    "reason": "codeql.yml does not list `language: actions` in its matrix, but the repo has workflow files. CodeQL's `actions` language scans workflow YAML for injection and other CI/CD-specific weaknesses — every repo with workflows benefits. Add an entry to `matrix.include` with `language: actions` + `build-mode: none`.",
    "type": "codeql_missing_actions_language",
    "file": ".github/workflows/codeql.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium",
    "fix_recipe": "add_codeql_actions_language"
  },
  {
    "line": 39,
    "reason": "job in .github/workflows/labels.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
    "type": "RE001",
    "file": ".github/workflows/labels.yml",
    "action": "report",
    "rule_module": "research_extensions",
    "severity": "medium"
  },
  {
    "line": 46,
    "reason": "job in .github/workflows/push-email-notify.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
    "type": "RE001",
    "file": ".github/workflows/push-email-notify.yml",
    "action": "report",
    "rule_module": "research_extensions",
    "severity": "medium"
  },
  {
    "line": 32,
    "reason": "job in .github/workflows/build.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
    "type": "RE001",
    "file": ".github/workflows/build.yml",
    "action": "report",
    "rule_module": "research_extensions",
    "severity": "medium"
  },
  {
    "line": 44,
    "reason": "job in .github/workflows/container-publish.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
    "type": "RE001",
    "file": ".github/workflows/container-publish.yml",
    "action": "report",
    "rule_module": "research_extensions",
    "severity": "medium"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@coderabbitai

coderabbitai Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Add Carrot credits or activate Agent usage billing to use Autopilot

@coderabbitai

coderabbitai Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

✅ Coding Agent task started: View task and status

The task will inspect the CI failures, validate its fix, and commit the fix to this branch automatically.

Note: Fixing CI failures is a beta feature and may encounter errors. Expect some limitations and changes as we gather feedback and continue to improve it.

⏭️ 2 check(s) skipped — already failing on `main` (not caused by this PR)
  • GitHub Actions: README Derive / 0_readme-derive _ Derive & verify README.md.txt
  • GitHub Actions: Build / 0_SonarQube.txt

@hyperpolymath
hyperpolymath merged commit d836a63 into main Oct 6, 2026
54 of 58 checks passed
@hyperpolymath
hyperpolymath deleted the docs/listing-score-fenced-install branch October 6, 2026 17:30
hyperpolymath added a commit that referenced this pull request Oct 7, 2026
…box can run it (#348)

## Summary

Removes the `env` block from the Claude Desktop `mcpServers` example in
the README. The goal is to let aiagentslisting.com's sandbox run the npx
package, so the listing's four remaining checks can be credited:
**Exposes tools** (required), Verified live, Ships prompts and Ships
resources. The score is currently 49/100, grade F, with 2 of 3 required
checks passed.

Why this is thought to be the blocker:
- At 2026-10-07T06:48Z the listing held
`installConfig.mcpServers.boj-server.env = {"BOJ_URL": ""}`. The scanner
blanks env values, the way it would for a credential the user must
supply.
- The listing has `serverTools: []` and no `serverToolsCheckedAt`, so
the sandbox has never run against boj-server.
- The one local-stdio npx server in a 28-listing sample (`discover`
pages 1–4) that the sandbox did verify is `playwright-mcp`, with
`serverToolsSource: "sandbox"` and a score of 80. Its config declares no
`env`.

This is a hypothesis. It's confirmed only once a rescan shows
`serverToolsSource: "sandbox"`. `BOJ_URL` already defaults to
`http://localhost:7700` (`mcp-bridge/lib/api-clients.js:14`), so the
example behaves exactly as before, and the README still says how to set
the variable.

Follows #341, which fixed Installation method and Easy install; both now
score full marks.

## Type of change

Documentation only.

## 📌 New pins

Head SHA: **`e1aa8d3c998c72e5fb728859ff589bd291806696`**. This PR adds
or changes no pins: no action `uses:`, `actions.lock`, lockfile or
container digest changes.

## Changes

- `README.adoc`: dropped the `"env": { "BOJ_URL": … }` line from the
Claude Desktop JSON fence, and added one sentence saying `BOJ_URL`
defaults to `http://localhost:7700` and should be set under `env` only
if the backend listens elsewhere.
- `README.md`: re-derived from README.adoc (ADR-004). The only
differences are those two changes.

## RSR Quality Checklist

### Required

- [x] Tests pass. N/A in practice: this PR changes no code, only two
README files.
- [x] Code is formatted. N/A: no code changed.
- [x] Linter is clean. N/A: no code changed.
- [x] No banned language patterns. Documentation only; no new files.
- [x] No `unsafe` blocks without `// SAFETY:` comments. N/A: no code
changed.
- [x] No banned functions. N/A: no code changed.
- [x] SPDX license headers present. Both modified files keep their
existing CC-BY-SA-4.0 headers, and there are no new files.
- [x] No secrets, credentials, or `.env` files included. The removed
line was a localhost default, not a secret.

### As Applicable

- [ ] `.machine_readable/*` updated. N/A: project state didn't change,
and A2ML is retired estate-wide (D308).
- [x] Documentation updated for user-facing changes. That is the whole
PR.
- [ ] `TOPOLOGY.md` updated. N/A: architecture didn't change.
- [ ] `CHANGELOG` updated. N/A: README example only, no release.
- [ ] New dependencies reviewed. N/A: no dependencies added.
- [ ] ABI/FFI changes validated. N/A: ABI and FFI untouched.

## Testing

- **Server unaffected by the env value.** I ran `npx -y
@hyperpolymath/boj-server@latest` (0.4.7) twice, once with `BOJ_URL`
unset and once with `BOJ_URL=""`, sending initialize, `tools/list`,
`prompts/list` and `resources/list`. Both runs completed a clean
handshake and returned **65 tools, 6 prompts and 6 resources**, with
nothing but JSON-RPC on stdout.
- **README.md re-derived with the pinned pipeline.** asciidoctor 2.0.26
docbook5, then pandoc 3.10 gfm, plus the SPDX/GENERATED banner. The
local reducer is 1.1.2 against the pinned 1.1.1; every other line of the
output is identical to the committed file. The workflow's own `norm` +
`diff -q` freshness step reports **up to date**.
- **After merge:** the owner clicks Rescan, then `get_listing
boj-server` should show `serverToolsSource: "sandbox"` and
`quality.requiredPassed: true`.

Deferred non-required reds that are also red on main@960ad299:
`governance` and `SonarQube`, both tracked in #338.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01P56iYjCwHmbRyfFrpyJzTC

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant