{"target":"https://heroku.com/","display_target":"heroku.com","report_url":"https://waymark.genedai.me/score/heroku.com","score":65,"score_label":"Blockers remain","scanned_at":"2026-08-24T02:19:41.258Z","eligible_checks":53,"score_breakdown":{"discovery":{"earned":13.6,"available":20,"passing":9,"total":17},"access":{"earned":21.8,"available":30,"passing":15,"total":23},"usability":{"earned":23,"available":40,"passing":7,"total":13},"payments":{"earned":0,"available":0,"passing":0,"total":0}},"issues":[{"id":"sitemap-xml","name":"XML sitemap","result":"partial","layer":"discovery","details":"Sitemap referenced in robots.txt only.","recommendation":"Add /sitemap.xml and reference it from robots.txt."},{"id":"agents-md","name":"AGENTS.md","result":"failed","layer":"discovery","details":"agents.md status 404.","recommendation":"Publish /agents.md with agent-oriented usage notes."},{"id":"well-known-ai-catalog","name":"Well-known AI catalog","result":"failed","layer":"discovery","details":"No ai-plugin.json or ai-catalog.json.","recommendation":"Add /.well-known/ai-plugin.json or /.well-known/ai-catalog.json."},{"id":"openapi-or-swagger-link","name":"OpenAPI / Swagger link","result":"failed","layer":"access","details":"No OpenAPI/Swagger link in HTML.","recommendation":"Link to an OpenAPI or Swagger document from the homepage."},{"id":"cors-on-api-hint","name":"CORS / API hint","result":"partial","layer":"access","details":"No CORS header or obvious API path.","recommendation":"If you expose an API, send Access-Control-Allow-Origin for intended clients."},{"id":"oauth-well-known","name":"OAuth / OIDC well-known","result":"failed","layer":"access","details":"No oauth-authorization-server or openid-configuration.","recommendation":"Publish /.well-known/openid-configuration or oauth-authorization-server if you authenticate agents."},{"id":"wm-robots-ai-policy","name":"robots.txt AI policy","result":"partial","layer":"discovery","details":"robots.txt present but no named AI crawlers.","recommendation":"Name GPTBot, ClaudeBot, Google-Extended, PerplexityBot and state allow or deny."},{"id":"wm-sitemap","name":"Sitemap for agents","result":"partial","layer":"discovery","details":"Sitemap only referenced.","recommendation":"Publish /sitemap.xml."},{"id":"wm-llms-full-txt","name":"llms-full.txt","result":"failed","layer":"discovery","details":"llms-full.txt status 404.","recommendation":"Optionally publish /llms-full.txt for one-shot ingest."},{"id":"wm-http-link-header","name":"HTTP Link header","result":"failed","layer":"discovery","details":"No rel=sitemap|describedby|api-catalog|alternate on homepage.","recommendation":"Send RFC 8288 Link headers for related machine resources."},{"id":"wm-markdown-negotiate","name":"Markdown negotiation","result":"failed","layer":"access","details":"Homepage did not negotiate markdown.","recommendation":"Respond to Accept: text/markdown with a markdown body."},{"id":"wm-index-md","name":"/index.md fallback","result":"failed","layer":"access","details":"index.md status 404.","recommendation":"Serve a markdown homepage at /index.md."},{"id":"wm-mcp-initialize","name":"MCP initialize","result":"failed","layer":"usability","details":"No MCP card to initialize","recommendation":"Expose Streamable HTTP MCP and answer initialize."},{"id":"wm-mcp-apps","name":"MCP Apps UI hint","result":"failed","layer":"usability","details":"No MCP Apps hint (N/A unless you return UI).","recommendation":"If you return UI, declare io.modelcontextprotocol/ui resources."},{"id":"wm-ai-plugin","name":"ai-plugin.json","result":"failed","layer":"discovery","details":"No /.well-known/ai-plugin.json.","recommendation":"Optionally publish a plugin-style capability manifest."},{"id":"wm-security-txt","name":"security.txt","result":"failed","layer":"access","details":"No /.well-known/security.txt Contact.","recommendation":"Publish /.well-known/security.txt with a Contact field."},{"id":"wm-change-password","name":"change-password well-known","result":"failed","layer":"access","details":"Login surface without /.well-known/change-password.","recommendation":"If users have passwords, serve /.well-known/change-password."},{"id":"wm-rate-limit-hint","name":"Rate limit signal","result":"partial","layer":"usability","details":"API surface without a rate-limit signal.","recommendation":"Document or send rate-limit headers on APIs."},{"id":"wm-idempotency-hint","name":"Idempotency signal","result":"partial","layer":"usability","details":"API surface without idempotency notes.","recommendation":"Document idempotency keys for mutating calls."},{"id":"wm-json-error-hint","name":"Machine-readable errors","result":"partial","layer":"usability","details":"API surface without a JSON error shape.","recommendation":"Return a JSON or problem+json error body."},{"id":"wm-openapi","name":"OpenAPI document","result":"failed","layer":"access","details":"OpenAPI probe.","recommendation":"Publish an OpenAPI document at a stable URL."},{"id":"wm-mcp","name":"MCP server","result":"partial","layer":"usability","details":"MCP probe.","recommendation":"Publish an MCP card and answer initialize."}]}