{"service":"Vanagon Dictionary","serviceContract":{"role":"Shared lexical service for Vanagon and Gerry. Preserved Vanagon.com bus terminology and mailing-list slang, separately sourced contemporary parts references, and clearly labeled machine-assisted translations.","repository":"https://github.com/mbarbine/vanagon-dictionary","origin":"https://dictionary.vanagon.com","consumers":{"vanagon":"https://vanagon.com","gerry":"https://gerry.vanagon.com"},"productionOrigins":{"dictionary":"https://dictionary.vanagon.com","vanagon":"https://vanagon.com","gerry":"https://gerry.vanagon.com"},"productionActivation":"Configured for dictionary.vanagon.com with the retained dictionary.ja1.io alias. Consult deployment acceptance evidence for current DNS/TLS status.","ownership":{"dictionary":"Canonical terms, definitions, translations, provenance, editorial revisions, lexical APIs and exports.","vanagon":"Historical page/capture presentation, editorial pages, navigation, and its own feeds and protocols.","gerry":"Messages, discussions, archives, community accounts, and its own feeds and protocols."},"independentServices":"Shared community footer and lexical service; each site retains its own feeds, API/MCP registry, credentials, and deployment. Dictionary RSS/Atom publishes dictionary events only; it does not mirror Vanagon or Gerry activity.","backendStatus":"Cloudflare Workers and D1 are the only configured persistence and operational backend. The API Worker also configures Queues, R2, Workflows, and Workers AI. The Neon client, legacy docs publisher, and optional Trace/Graph/event-sink destinations were removed. Frontend data routes delegate to the canonical Cloudflare Dictionary API Worker; the legacy SQL compatibility shim fails closed. Gerry’s bounded public archive-search API remains a first-party read integration and does not store Dictionary data.","gerryContext":"The Dictionary queries Gerry’s bounded public community-search API for up to three contextual matches and links to Gerry’s full archive search. Gerry remains the sole owner of those messages; matches are not imported definitions or reviewed lexical relationships.","serviceReads":"Dictionary service reads and ordinary proxies bound the wait for headers and response bytes to 10 seconds; Gerry context reads use 6 seconds. Federated search preserves available source results and labels unavailable sources. Requests are not retried automatically. Proxy request bodies have a separate 10-second deadline (408 REQUEST_TIMEOUT before dispatch); protected snapshot dispatch retains its 60-second deadline. A timeout after dispatch does not prove a mutation was rolled back; inspect its receipt before retrying.","mcpCompatibility":"The Dictionary, Gerry, and Vanagon MCP registries are independent. Dictionary exposes stateless Streamable HTTP at /api/mcp/streamable for MCP 2026-07-28 modern clients and preserves 2025-03-26 legacy Streamable HTTP behavior on the same endpoint; both paths use the same read-only registry. Both eras passed official SDK acceptance on dictionary.ja1.io after deployment. The legacy JSON-RPC endpoints /api/mcp and /api/v1/mcp remain available (2024-11-05). Gerry and Vanagon expose their independent Streamable HTTP registries at /api/mcp. Cross-service MCP tool invocation is not configured; lexical integrations use the public Dictionary REST API and Gerry community-search API.","contributions":"Dictionary browser drafts remain local. Authenticated Gerry members can submit genuine editorial proposals through the restricted service binding. Proposals remain pending until separately reviewed and applied; receipt acceptance is not publication. Operator writes require the server-configured key.","shortDefinitions":"Canonical lexical reads include nullable short_definition from the selected definition locale. Only separately recorded, bounded text is returned; absent summaries are not generated. Protected publication, import and edits support this field. Explicit null clears it. Legacy submission notes remain private; only their recorded short text is projected. Historical originals remain immutable.","definitionHistory":"GET /api/v1/definitions/{id}/history is an operator-only, no-store read of retained definition snapshots. Older unrecorded changes are not reconstructed. Snapshots can include removed or private content and never enter public search, feeds or MCP. Optional expectedRevision on protected edits rejects stale writes without mutation. See OpenAPI for limits and coverage.","translationPolicy":"Machine-assisted drafts are not human-reviewed. Missing translations return explicitly labeled source English.","termLabels":"Canonical term detail, search, browse, category/tag and author reads include term_label: a recorded requested-locale name with an eligible definition, or explicit canonical_fallback in the origin locale. Canonical IDs, URLs and alphabetical order remain unchanged. Repeated canonical labels do not establish translation coverage; label review state is unrecorded. Differing recorded names appear alongside canonical headings. This read contract does not add editorial label writes or invent translations.","sourceReferences":"GET /api/v1/terms/{slug}/sources and MCP get_term_sources enumerate recorded public definition citations and applied source annotations. Omit locale for all definition languages; explicit locale does not substitute English. References preserve record identity and source/capture provenance, are not fetched, and do not certify technical correctness. Follow nextOffset and omitted_invalid_references; unavailable storage never substitutes seed citations."},"canonicalBaseUrl":"https://dictionary.vanagon.com","publicSafeAccessEnabledByDefault":true,"platphormApiKeyProtectedActionPolicy":"Submissions, votes, removal requests, definition edits, retained definition history, moderation, import, admin, audit logs, reports, registry mutation, and destructive actions require PLATPHORM_API_KEY.","acceptedAuthenticationHeaders":["Authorization: Bearer $PLATPHORM_API_KEY","X-PlatPhorm-API-Key: $PLATPHORM_API_KEY"],"w3cTracePropagationPolicy":"W3C trace context and PlatPhorm trace headers are accepted and propagated for platform operations without secrets in trace state or baggage.","ja4DigestSafeHandlingPolicy":"Raw fingerprint values are not published in public dictionary artifacts.","cloudflareMetadataPolicy":"Safe Cloudflare metadata may be captured for trace-linked observability. Raw IPs, cookies, auth headers, tokens, and raw JA4 digest values are not public artifacts.","privateDataRedactionPolicy":"Pending/rejected moderation data, private author metadata, audit logs, provider credentials, OAuth tokens, API keys, cookies, and raw request bodies are redacted from public logs and discovery files.","openapiMcpLlmsDiscoveryPolicy":"OpenAPI, llms files, MCP manifest, and read-only MCP/API discovery are public-safe and should describe real Dictionary capabilities only.","featureSwitchPolicy":{"api":"DICTIONARY_FEATURE_API; disabled REST routes return 503 while health and API docs remain available.","mcp":"DICTIONARY_FEATURE_MCP; disabled MCP routes return an explicit 503/JSON-RPC feature-disabled response.","cloudflareBackend":"DICTIONARY_FEATURE_CLOUDFLARE_BACKEND; disabled Cloudflare Worker data routes and frontend proxy calls return 503 while Worker health remains available.","semantics":"Unset values default to enabled. Feature switches disable service access; they do not change authorization or corpus records."},"sitemapNoDeadLinkPolicy":"Sitemaps include only public-safe routes generated from canonical route/content state and exclude known test junk, private routes, mutation routes, and dead URLs.","rssFeedPolicy":"Dictionary RSS and Atom describe completed public publication events. Historical seeds, machine-assisted draft translations, Gerry messages, private data, and secrets are excluded; an unavailable event source produces an empty feed.","faqBreadcrumbJsonLdPolicy":"Public routed pages should include canonical metadata, breadcrumbs where appropriate, and JSON-LD for FAQ, website, dictionary, and term surfaces.","modelScaffoldingPolicy":"Server-only model assistance is provider-neutral, trace-linked, validation-gated, and degraded when no model provider is configured. Model suggestions are not approved definitions.","agentAccessPolicy":"allow_public for read-only dictionary, discovery, API docs, OpenAPI, llms, RSS, sitemap, and MCP introspection; protected_required for moderation/admin/import/sync/reporting.","rateLimitPolicy":"Public clients should keep reads bounded. Protected writes require PLATPHORM_API_KEY and may be throttled.","abuseSpamPolicy":"Submissions, votes, and removal requests require PLATPHORM_API_KEY. Spam, abusive automation, credential probing, and protected action attempts may be blocked.","requiredTrustLine":"Web dashboard, public-safe discovery, browser-based operations, trusted-domain discovery, standard route compliance, Cloudflare metadata capture, trace inspection, and agentic workflow discovery are intentionally supported for public read-only debugging and operator workflows. Mutating, administrative, ingestion, replay, fork, remediation, deployment, sync, test-triggering, reporting, and write actions require PLATPHORM_API_KEY.","securityContact":"https://dictionary.vanagon.com/.well-known/security.txt","updatedAt":"2026-10-26T00:00:00.000Z","version":"2026-10-26.vanagon.shared-service"}