Skip to content

History

Revisions

  • docs: correct stale/security-relevant claims found in a full wiki audit - Security-Proof-Client-Credential-Isolation.md: the 'Client isolation matrix' still described DCR redirect-URI scope inheritance as current, safe behavior -- that was the exact #497 P0 vulnerability, fixed in #505. Corrected the table and added a note. - Home.md, Scope-and-Tool-Matrix.md, OAuth-Clients-and-Scopes.md: all three said anonymous/read access requires 'no auth at all', which is only true with OAuth disabled. Production runs with OAuth enabled, where every /mcp request without a bearer is challenged regardless of tool tier (#498, confirmed live). Added correction notes distinguishing the scope-ACL layer (genuinely ungated) from bearer-token requirement (not bearerless in production). - AgentReady-Pitfalls.md, Live-Deployment-Runbook.md: documented a second, distinct cause of the 'chtimes ... operation not permitted' build failure (#521, live-reproduced 2026-07-18) -- the MCP server's own build_site tool runs as a different system user (mcp-hugo-server-go) than the manual rebuild path these pages already documented (hugo-mcp), and can be blocked by individual files that drifted to the wrong owner even when ReadWritePaths is already correct.

    @jmrGrav jmrGrav committed Jul 18, 2026
    c4f0d3a
  • fix: correct anonymous-access claim for OAuth-enabled (production) deployments (#498) Prior edit this session claimed publicServer answers with zero Authorization header in all cases. Verified against internal/server/server.go's actual /mcp handler: when cfg.OAuth.Enabled (production's real config), every request without a bearer gets a 401 challenge by deliberate design (RFC 6750 discovery), regardless of which tool tier it would otherwise resolve to. The #450 ungated-read invariant is real but operates one layer up, at the scope-ACL check once a caller already has a token (even read-scope, via self-serve DCR) -- it was never a bearerless-access guarantee in an OAuth-enabled deployment. TestAnonymousServerExposesReadTools passes with OAuth disabled, which is not production's config.

    @jmrGrav jmrGrav committed Jul 18, 2026
    81917b9
  • docs: update wiki to reflect the #450 2-scope model (read/write) Several pages still described the pre-#450 four-tier scope model (content.read/content.write/site.admin/system.admin with mcp as the only alias) as if it were still active. Since #450 the server enforces exactly two scopes, read and write, with every older scope string accepted only as a compatibility alias. Home, Documentation-Source-of-Truth, OAuth-Clients-and-Scopes, Scope-and-Tool-Matrix, Pitfalls-Index, Client-Compatibility, and Smoke-Tests-and-Live-Verification updated to describe the current model as current, with the old model kept only as historical context where relevant. Pitfall-Anonymous-vs-Authenticated-Server rewritten more substantially: it described a four-MCP-server-instance architecture (anonServer/readServer/writeServer/siteAdminServer) that no longer exists in the code -- the server now runs two instances (publicServer/writeServer), and read-only tools that used to require content.read (validate_site, build_agent_context, etc.) are fully ungated since #450, not just relabeled. Security-Proof-Client-Credential-Isolation gets a terminology note rather than a rewrite -- the security property it demonstrates (redirect URI isolation blocks cross-client credential reuse) is scope-model-independent, so the historical scope names are left in place with a pointer to the current model.

    @jmrGrav jmrGrav committed Jul 18, 2026
    d7a7f01
  • docs: document july 13 agent-ready recovery

    @jmrGrav jmrGrav committed Jul 13, 2026
    295bbcd
  • docs: align wiki with contribution rules and graph contract

    @jmrGrav jmrGrav committed Jul 13, 2026
    b5109d4
  • docs: add Webhook Plugins Configuration page (Cloudflare, IndexNow, Google Indexing)

    @jmrGrav jmrGrav committed Jul 11, 2026
    465feb6
  • docs: add security proof for client credential isolation Live test (2026-07-05): using chatgpt-write credentials from Claude.ai is refused because the redirect_uri sent by Claude.ai does not match the URIs registered for the chatgpt-write client. Documents the cross-client token theft protection as a concrete proof with RFC 6749 reference. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

    @jmrGrav jmrGrav committed Jul 5, 2026
    fc31b13
  • docs: add invalid-scope pitfall alias and changelog gate

    @jmrGrav jmrGrav committed Jul 5, 2026
    4ead851
  • docs: add release tag drift pitfall

    @jmrGrav jmrGrav committed Jul 5, 2026
    ddd6e82
  • docs: add wiki source-of-truth and smoke runbooks

    @jmrGrav jmrGrav committed Jul 5, 2026
    43aee6c
  • docs: add 5 pitfall pages + update Home index - Pitfall: Claude auth_callback vs oauth_callback (redirect URI path mismatch) - Pitfall: Redirect URI exact matching (rules, wildcards, common mistakes) - Pitfall: OAuth client max scope (scope clamping, RFC 6749 §3.3, log output) - Pitfall: Anonymous vs authenticated server (tool boundary, test, Claude UI label) - Pitfall: openid-configuration 404 (ChatGPT OIDC probe, expected, no fix needed)

    @jmrGrav jmrGrav committed Jul 5, 2026
    a426e08
  • docs: align wiki with site.admin scope collapse

    @jmrGrav jmrGrav committed Jul 5, 2026
    cdb66e3
  • docs: add invalid_scope-as-302 pitfall page; update Home scope list

    @jmrGrav jmrGrav committed Jul 5, 2026
    90e3d52
  • docs: add operational wiki runbooks

    @jmrGrav jmrGrav committed Jul 5, 2026
    fe433bf
  • docs: add AgentReady wiki runbook

    @jmrGrav jmrGrav committed Jul 5, 2026
    bdbcd07
  • Initial Home page

    @jmrGrav jmrGrav committed Jul 5, 2026
    839b240