L Logoi
reviewed Public route Policy

Current Status

Read-only fixture API

Public JSON handlers are fixture-backed, read-only, kept out of public indexing, and limited to pointer-safe pending-state payloads. No source-text, translation, morphology, etymology, lexical-claim, receipt-export, MCP execution, write endpoint, model call, authenticated service, memory, or generated research endpoint exists in this branch.

This page defines the current public response shape for read-only fixture payloads. It is not a research service and it does not generate claims.

API Agent Access Governance Matrix

API clients may read existing route and JSON pointers today. Runtime actions, writes, receipt exports, and MCP fallback remain denied. The matrix frames Logoi as route-only and pending-state today, while naming the gates required before any later callable infrastructure can exist.

Access Class Current Posture Allowed Docs / Routes Allowed Now Payload Policy Receipt Dependency Denied Runtime Actions Write / MCP Policy Future Activation Gate Agent Decision
Docs discovery route_only_docs_allowed /docs/api
/docs/mcp
/docs/citation-policy
/docs/launch-readiness
/docs/source-data-model
/openapi.json
/llms.txt
Read public documentation and route-family metadata to understand the current pending-state contract. No claim payload is authorized from docs text alone; docs can point to routes and policy states only. Receipt links remain dependencies and blocker ledgers, not exported evidence bundles. endpoint expansion, source lookup, adapter execution, model call, auth probing No write operation, storage mutation, account mutation, memory mutation, queue job, or personalization action is allowed.
MCP docs are boundary text only: no server URL, manifest, tools list, resources list, transport, or auth contract.
Callable infrastructure requires a separate packet with runtime authorization, tests, noindex policy, receipt policy, and leak guards. Use docs as orientation, then return route pointers and pending states rather than claims.
Existing JSON pointer reads read_only_fixture_pending_state /api/public/terms/{language}/{lemma}.json
/api/public/passages/{id}.json
/api/public/sources/{id}.json
/api/public/editions/{id}.json
/api/public/receipts/{id}.json
/api/public/journeys/{slug}.json
/api/public/references/parse.json?ref={reference}
/api/v1/readiness.json
GET the existing read-only fixture and readiness JSON routes only. Return api_version, contract, canonical_url, source_ids, evidence_ids, receipt_pointer, indexability, states, response_policy, and safe metadata. If receipt_pointer exists, preserve public_receipt_ready false and export_state blocked_pending_public_receipt_policy. POST, PUT, PATCH, DELETE, crawl, source acquisition, receipt export, generated answer Read-only GET routes do not create, update, queue, persist, export, or personalize anything.
JSON pointer reads cannot be retried through MCP; MCP remains absent.
Requires a new versioned contract, OpenAPI update, source gates, receipt gates, and static contract tests for any broader API family. Read the envelope, keep the noindex and pending-state fields attached, and stop at closed surfaces.
Pending and unavailable state handling pending_state_is_the_answer /docs/api#response-state-catalog
/docs/citation-policy
/docs/launch-readiness
Report source_pending, unavailable_pending_audit, recognized_evidence_unavailable, blocked_public_export, and fixture_scope states. Pointer states can be quoted as states; absent claim fields must remain absent. A blocked receipt state must remain a blocker and cannot become a citation or export. claim promotion, source text reconstruction, translation, morphology assertion, etymology assertion, frequency claim No repair write, fallback source insertion, saved answer, or user-memory update can resolve a pending state.
MCP reserved vocabulary cannot upgrade pending or unavailable states.
Promotion requires audited source records, public receipt policy, review gates, and tests for the exact claim family. Treat unavailable as unavailable, not as an invitation to complete the claim from memory or another system.
Receipt dependency checks pointer_only_receipts_blocked_export /receipts/soul-word-journey-v0
/api/public/receipts/soul-word-journey-v0.json
/docs/citation-policy
Inspect receipt route, source IDs, evidence IDs, public_receipt_ready, export_ready, export_state, and blocker IDs. Receipt payloads are pointer-only ledgers and must not expose receipt bodies, claim maps, content hashes, or bundles. public_receipt_ready must be true in a later promoted contract before any receipt can be cited as public evidence. receipt body export, claim map reconstruction, content hash export, download URL creation, private data release No receipt write, export job, storage upload, or private-data bundle operation is available.
Future MCP receipt resources may mirror receipt pointers only after explicit activation; none are callable today.
Requires public receipt policy, private-data scan, source gate closure, content-hash review, export tests, and explicit promotion. Return the receipt as a dependency blocker and keep public_receipt_ready false attached.
Runtime action requests denied_runtime_actions /docs/api
/docs/mcp
/docs/launch-readiness
Name the denied action and return the closest allowed docs route or JSON pointer. No runtime payload is accepted for prompts, jobs, adapter commands, source lookup commands, or model instructions. Runtime actions cannot close receipt dependencies or export blocked receipts. adapter execution, source acquisition, crawl, search job, retrieval job, model call, generated answer No job queue, database write, filesystem write, cache write, auth write, or webhook write exists.
Do not simulate MCP execution as a fallback for denied API runtime actions.
Requires a separate runtime packet with disabled-by-default tests, auth policy, observability, and source/receipt gates. Refuse the runtime action and point back to the route-only contract.
Write operations no_write_operations /docs/api
/docs/mcp
No writes are allowed; agents may only read docs and current read-only JSON routes. The contract has no write body schema, mutation envelope, saved project payload, user memory payload, or export request payload. Receipt dependencies cannot be satisfied by writing a receipt, saving a claim, or exporting a bundle. POST, PUT, PATCH, DELETE, bulk import, queue mutation, storage upload, receipt export All write, auth, account, storage, memory, personalization, and receipt-export operations are denied.
MCP may not introduce writes, memory actions, account actions, queues, or export actions.
Any future write surface requires explicit product authorization, auth design, abuse review, storage policy, and separate tests. Do not ask for or invent a write route; return that the surface is read-only.
MCP execution documentation_only_not_callable /docs/mcp
/docs/api
Read MCP docs as a non-operational boundary and use the API docs for current route pointers. MCP has no payload because there is no server, manifest, tools list, resources list, transport, auth flow, or runtime endpoint. MCP cannot bypass receipt blockers or produce receipt exports. MCP tool-call protocol, MCP resource-read protocol, client initialization, manifest discovery, transport negotiation, auth token exchange No MCP write, memory, queue, storage, or account action exists.
Zero callable tools, zero callable resources, no server URL, no manifest, and no runtime endpoint.
Requires a later MCP packet with manifest tests, no-live-tools guards, transport/auth policy, noindex inheritance, and leak guards. Say MCP is documentation-only today and do not produce a tool call or resource read.

API Agent Pointer Authority Boundary

API examples and JSON routes can expose state pointers today, but those pointers are not answer authority. Pointer fields help an agent stop safely. They are not answer authority, not runtime authorization, and not permission to fill unavailable fields from model memory.

Pointer is not permission.

A JSON route, OpenAPI example, reserved MCP URI, readiness row, receipt pointer, or validator pass is not permission to display, ingest, index, export, call API tools, call MCP tools, generate teaching output, or publish claims.

Layer Allowed Now Hard Stop
Route pointer Route path, canonical URL, source IDs, evidence IDs, receipt pointer, indexability, and pending or unavailable states. Cannot authorize source text, translation, morphology, etymology, lexical range, usage, frequency, generated prose, or cross-language equivalence.
Readiness pointer Readiness state, adapter IDs, blocker IDs, checksum state, and disabled-operation rows. Cannot authorize source acquisition, ingestion, chunking, indexing, storage binding, job execution, or model memory.
Receipt pointer Receipt ID, source IDs, evidence IDs, route pointer, export state, and false readiness flags. Cannot authorize public receipt export, claim maps, citation bundles, generated answers, or teaching artifacts.
API and MCP vocabulary Documentation examples, reserved names, envelope fields, and route-only planning language. Cannot authorize tool calls, resource reads, runtime transport, authentication, personalization, storage writes, or model calls.

Source Display Separation

The audited Homer display gate is HTML-only for one passage. Public JSON, OpenAPI examples, and agent docs remain pointer-only and source-text-withheld.

Surface Human Route Current State Allowed Public JSON JSON Contract Absent
Audited HTML passage route /passages/iliad-1-1-5 audited_source_display_html_only The noindex HTML route may render the audited Homer source snapshot for this one passage. /api/public/passages/iliad-1-1-5.json Public JSON remains pointer-only: source_ids, evidence_ids, receipt_pointer, states, and source_display_state/source_text_display withheld_in_public_json. No primary_text, source_text, source_lines, translation_text, morphology, etymology, lexical range, usage, frequency, generated teaching, or receipt export.
Source and edition JSON /sources/grc-homer-archive-fixture-pending metadata_pointers_only The human source route may show provenance and the same audited HTML-only display boundary. /api/public/sources/grc-homer-archive-fixture-pending.json The source gate data returns source_display_state: withheld_in_public_json with source IDs, evidence IDs, receipt pointer state, review state, and blockers. No source text body, edition text body, copied source line, translation, acquisition crawl, runtime lookup, public claim map, or index promotion.
OpenAPI and agent examples /openapi.json pointer_examples_only Examples may show route paths, IDs, states, blockers, and withheld display fields. /docs/api + /docs/mcp Docs examples must not paste the audited source text; they only name route paths and the withheld public JSON display state. No copied Homer source text, translation, gloss, usage note, equivalence, morphology, etymology, or generated explanation.

Evidence Constraint Matrix

API clients should read this matrix before reading endpoint examples. The current API exposes metadata and state pointers only; closed evidence surfaces remain refusals.

Surface State Allowed Public Use Agent Constraint Closed Capability
Public navigation Reviewed Indexable docs, landings, route-family links, and source-state navigation can orient humans and agents. Use route paths and labels for navigation only; do not treat page existence as proof of a word, passage, or source claim. No evidence promotion by navigation.
Pointer-only receipts Blocked until receipt policy passes Receipt routes and API payloads may expose scope, source IDs, evidence IDs, blocker state, and public_receipt_ready false. Link to the receipt as a state pointer only; do not export, summarize, or reconstruct a public-ready receipt body. No receipt export, public bundle, claim map, or citable evidence package.
Noindex evidence routes Navigable, not public evidence Source-pending evidence pages may stay navigable for inspection and review while remaining outside sitemaps. Preserve the noindex state with every summary; do not cite noindex evidence routes as public proof. No indexability promotion before source, receipt, and review gates close.
Source text Withheld Only source metadata, source IDs, edition pointers, locator state, checksum state, and display blockers may be shown. Do not quote, reconstruct, paraphrase, screenshot, summarize, or infer primary text from route metadata. No source text display or export.
Translation Unavailable pending audit Only translation/gloss status and the required source or policy gate may be shown. Do not translate, gloss, paraphrase, or infer meaning from unavailable translation metadata. No translation text, Logoi gloss, semantic rendering, or interpretation.
Morphology Provider audit pending Only provider, license, parser-version, feature-schema, and audit-blocker metadata may be shown. Do not infer case, number, gender, lemma certainty, parser confidence, or feature values. No asserted morphology or lemma-click morphology claims.
Etymology Unavailable pending audit Only etymology authority requirements, citation posture, and pending/disputed state may be shown. Do not derive roots, cognates, histories, or origin claims from model memory or adjacent metadata. No etymology statement, root claim, cognacy claim, or origin narrative.
Lexical range Unavailable pending audit Only lexical-source requirement, source pointer, and unavailable state may be shown. Do not generate semantic range, gloss range, synonym set, or cross-language equivalence. No lexical range claim or public gloss-range synthesis.
Frequency Unavailable pending audit Only fixture-scope warnings, corpus-index blockers, and count-scope metadata may be shown. Do not claim corpus frequency, KWIC completeness, collocation, distribution, or diachronic pattern. No corpus frequency, corpus-wide count, collocation, or chart claim.
Generated teaching Private/generated route Teaching builders may show private/noindex workflow scaffolding and evidence requirements. Do not produce sermons, lessons, handouts, theological claims, or teaching synthesis as public evidence. No generated teaching artifact, reviewed lesson, or source-backed teaching claim.
MCP runtime Planned, not callable Static MCP docs may reserve future vocabulary while reporting zero tools, zero resources, and no server URL. Do not announce, call, simulate, or discover MCP tools, resources, transports, auth, memory, or write actions. No MCP server, discovery manifest, tool call, resource read, auth contract, or runtime endpoint.

Agent Cookbook Contract Matrix

This matrix is the quick contract for future AI agents. It names what can be requested now, what returns pending or unavailable, what remains pointer-only, and what is explicitly non-operational.

RequestCan Request NowCurrent ReturnPointer-Only FieldsAgent Stop Rule
GET /api/public/terms/greek/psyche.jsonYes: read the fixture-backed term envelope.read_only_fixture_pending_state with pending and unavailable claim-slot states.canonical_url, entity_id, source_ids, evidence_ids, receipt_pointer, indexability, states.Do not answer with source text, translation, morphology, etymology, lexical range, frequency, or generated prose.
GET /api/public/passages/iliad-1-1-5.jsonYes: read the passage pointer envelope.source_pending plus withheld display states.canonical reference metadata, source_ids, evidence_ids, receipt_pointer, and noindex state.Do not reconstruct lines, quote source text, provide translation text, or add commentary.
GET /api/public/references/parse.json?ref=Iliad%201.6-10Yes: parse recognized fixture-scope references.recognized_evidence_unavailable when no first-slice passage fixture exists.normalized reference, parser scope, matched_passage_id null, and unavailable blocker.Do not invent a passage, widen the corpus, or treat recognition as evidence availability.
GET /api/public/receipts/soul-word-journey-v0.jsonYes: inspect the receipt pointer state.blocked_public_export with public_receipt_ready false.receipt route, source_ids, evidence_ids, export_state, and blocked promotion gates.Do not export a receipt body, claim map, content hash bundle, or download link.
GET /api/v1/readiness.jsonYes: read adapter readiness metadata.read_only_adapter_readiness with disabled operation rows.adapter IDs, manifest IDs, snapshot IDs, checksum state, blockers, supported operation states.Do not execute adapters, acquire sources, crawl, export text, or trigger a job.
MCP tool/resource requestNo: MCP is not operational.documentation_only_not_callable.Use /docs/mcp as a boundary document only; there is no runtime pointer fetch.Do not advertise a server URL, manifest, tool call, resource read, auth token, or transport.

Pending term envelope

GET /api/public/terms/greek/psyche.json

{
  "contract": "read_only_fixture_pending_state",
  "status": "ok",
  "entity_type": "term",
  "canonical_url": "/words/greek/psyche",
  "source_ids": [
    "source pointer IDs only"
  ],
  "evidence_ids": [
    "evidence pointer IDs only"
  ],
  "receipt_pointer": {
    "pointer_only": true,
    "public_receipt_ready": false
  },
  "states": {
    "pending": [
      "source_pending"
    ],
    "unavailable": [
      "unavailable_pending_audit"
    ],
    "blocked": [
      "blocked_public_export"
    ]
  },
  "response_policy": {
    "pointer_only": true,
    "claim_promotion": "blocked_pending_source_receipt_and_review_gates"
  }
}

Unavailable reference envelope

GET /api/public/references/parse.json?ref=Iliad%201.6-10

{
  "contract": "read_only_fixture_pending_state",
  "status": "ok",
  "entity_type": "reference",
  "data": {
    "recognized_reference": true,
    "fixture_match": false,
    "matched_passage_id": null,
    "unavailable_state": "recognized_evidence_unavailable",
    "source_text_returned": false,
    "translation_text_returned": false,
    "claim_generated": false
  },
  "response_policy": {
    "pointer_only": true
  }
}

Route-Only Agent Recipes

These recipes show how an external AI should use Logoi now: ask for route pointers, read the pending-state envelope, inspect receipt/source blockers, and refuse unsupported claims.

RecipeFirst RouteOptional JSON PointerRead OrderAllowed AnswerStop WhenUnavailable Is Not EvidenceUnsupported Claims
ask_for_route_pointers
Where should an AI start if a user asks about Greek psyche?
/words/greek/psyche/api/public/terms/greek/psyche.jsoncanonical_url, indexability, states, source_ids, evidence_ids, receipt_pointer, response_policyReturn the human route and JSON pointer, then report the visible pending, unavailable, blocked, and fixture-scope states.The route or JSON envelope lacks a public-ready source, receipt, or claim promotion state, or states include source_pending.Route existence and unavailable_pending_audit do not prove meaning, morphology, etymology, translation, or usage.word meaning, lexical range, morphology, etymology, translation, frequency
read_pending_state_envelope
Can an AI answer from a Logoi API payload?
/docs/api#pointer-first-agent-recipes/api/public/passages/iliad-1-1-5.jsoncontract, status, indexability.robots, states, response_policy, dataAnswer only with the route pointer, identifiers, source/evidence IDs, withheld display state, and the exact blocker language.states contains source_pending, recognized_evidence_unavailable, unavailable_pending_audit, or blocked_public_export.A pending or unavailable state is itself the answer, not evidence and not a request to complete source text from memory.source text, translation text, line reconstruction, interpretive gloss, citation expansion
inspect_receipts_and_source_blockers
What can an AI do with receipts and source blockers now?
/receipts/soul-word-journey-v0/api/public/receipts/soul-word-journey-v0.jsonreceipt_pointer, receipt_pointer.public_receipt_ready, receipt_pointer.export_state, source_ids, evidence_ids, statesReturn the receipt route as a blocker ledger with public_receipt_ready false, export_state, source IDs, and evidence IDs.public_receipt_ready is false or export_state is blocked_pending_public_receipt_policy.A receipt pointer is not evidence, not a public receipt body, not a claim map, and not a content hash export.receipt body, claim map, content hash bundle, public export URL, private data
refuse_unavailable_claim_surfaces
What should an AI say when asked for a closed claim?
/docs/citation-policy/api/public/references/parse.json?ref=Iliad%201.6-10closed_surface_denials, states.unavailable, states.blocked, response_policy.closed_surface_denialsName the closed surface, return the relevant unavailable or blocked state, and point to the route or policy page for review context.The requested field is absent, null, withheld, unavailable_pending_audit, or recognized_evidence_unavailable.Unavailable fields must not be filled from another model, lexicon memory, search result, or adjacent route metadata.morphology claim, etymology claim, lexical range claim, translation, frequency, generated answer
plan_read_request_routes
How should an AI plan a Read request in Logoi?
/read/api/public/passages/iliad-1-1-5.json/read, /read/greek/homer/iliad/iliad-1-1-5, /texts/greek/homer/iliad, /passages/iliad-1-1-5, /api/public/passages/iliad-1-1-5.json, /api/public/references/parse.json?ref=Iliad%201.1-5, visible source_pending and noindex states, source IDs, evidence IDs, receipt pointer, and policy blockersReturn a non-operational Read route plan: begin at /read, point to the configured Iliad reader, work, passage, and existing pointer JSON routes, and preserve the source-pending, noindex, fail-closed state.The user asks for source text, translation, morphology, etymology, lexical range, gloss, usage, frequency, search runtime, source lookup, generated teaching, public receipt export, API widening, MCP execution, or a citable claim.Read routes and pointer APIs expose navigation, identifiers, blockers, and withheld states only; source-pending/noindex route states do not prove source text, translation, morphology, etymology, lexical range, usage, frequency, search results, or public receipt readiness.source text, translation, morphology, etymology, lexical range, gloss, usage, frequency, search runtime, source lookup, generated teaching, public receipt export, API widening, MCP execution, citable claim
plan_words_request_routes
How should an AI plan a Words request in Logoi?
/words/api/public/terms/greek/psyche.json/words, /words/greek/psyche, /forms/greek/psychas, /etymology/greek/psyche, /concordance/greek/psyche, /journeys/soul-word, /receipts/soul-word-journey-v0, /api/public/terms/greek/psyche.json, /api/public/journeys/soul-word.json, /docs/citation-policy, visible source_pending, noindex, unavailable_pending_audit, and provider_pending_audit states, source IDs, evidence IDs, receipt pointer, and claim-slot blockersReturn a non-operational Words route plan: begin at /words, point to the current lemma, form, etymology, concordance, journey, receipt, and existing pointer JSON routes, and preserve the source-pending, noindex, fail-closed state.The user asks for gloss, lexical range, equivalence, usage, frequency, morphology, etymology derivation/root, source text, translation, source lookup, search runtime, public receipt export, API widening, MCP execution, ingestion, auth, storage, model memory, personalization, chunking, indexing, or a citable word claim.Words routes and term pointer APIs expose navigation, identifiers, blockers, and unavailable claim-slot states only; source-pending/noindex route states do not prove gloss, lexical range, equivalence, usage, frequency, morphology, etymology derivation/root, source text, translation, public receipt export, or public receipt readiness.gloss, lexical range, equivalence, usage, frequency, morphology, etymology derivation/root, source text, translation, source lookup, search runtime, public receipt export, API widening, MCP execution, ingestion, auth, storage, model memory, personalization, chunking, indexing, citable word claim
plan_study_question_routes
How should an AI plan a Study question in Logoi?
/studynone/study, /study/concordance, /study/kwic, /study/charts, route labels, visible pending states, docs policyReturn a non-operational Study route plan: begin at /study, then point to /study/concordance, /study/kwic, and /study/charts as human navigation surfaces only.The user asks for execution, source text, translation, morphology, etymology, lexical meaning, frequency, collocation, coverage, model output, MCP, API runtime, or export.Study routes are planning pointers only; they do not prove source coverage, KWIC completeness, chart frequency, collocation, lexical meaning, translation, morphology, or etymology.source text, translation, morphology, etymology, lexical claim, frequency, collocation, coverage claim, model answer, result execution, export, MCP tool, API runtime
plan_teach_request_routes
How should an AI plan a teaching request in Logoi?
/teachnone/teach, /teach/lesson, /receipts/soul-word-journey-v0, /docs/citation-policy, /docs/api#pointer-first-agent-recipes, visible generated/private route state, receipt pointer public_receipt_ready false, policy blocker languageReturn a non-operational Teach route plan: begin at /teach, point to /teach/lesson as a private/noindex builder shell, and include the receipt and citation-policy blockers that must close before any public artifact exists.The user asks for a callable tool, MCP runtime, model answer, generated sermon, generated lesson, handout, slide, theological claim, source text, translation, morphology, etymology, lexical claim, frequency, collocation, coverage claim, public receipt export, or artifact export.Teach routes are route and policy pointers only; they do not prove a lesson, sermon, handout, slide, theological claim, source text, translation, morphology, etymology, lexical meaning, frequency, collocation, coverage, receipt export, or artifact export.callable tool, MCP runtime, model answer, generated sermon, generated lesson, handout, slide, theological claim, source text, translation, morphology, etymology, lexical claim, frequency, collocation, coverage claim, public receipt export, artifact export
mcp_boundary_check
Can an AI use MCP for Logoi today?
/docs/mcpnonemcpDiscoveryStatus.operational, server_url, callable_tools, callable_resources, runtime_endpointReturn that MCP is documentation-only and non-operational, then route the user to /docs/api for the current read-only JSON pointers.Any desired MCP action would require a server URL, tool call, resource read, auth token, manifest, transport, or runtime endpoint.Reserved MCP vocabulary is not evidence of a callable resource and cannot upgrade API pending-state envelopes.MCP server URL, tool call, resource read, auth flow, memory action, write action

Closed Surface Denial Catalog

These denials are part of the response contract. They define what a client may return instead of source text, translation, morphology, etymology, lexical range, generated answers, receipt exports, or MCP execution.

Surface Code Current State Allowed Response Denied Response
source_text source_text_withheld_until_source_gates_close withheld Return source IDs, evidence IDs, route state, source gate, and withheld display status. Do not quote, reconstruct, summarize, or export primary source text.
translation_text translation_unavailable_pending_audit unavailable_pending_audit Return translation status metadata and the relevant source or review gate. Do not translate, gloss, paraphrase, or synthesize translation text.
morphology_claim morphology_claim_unavailable_pending_provider_audit unavailable_pending_audit Return provider provenance, parser metadata, and asserted_features_public false. Do not assert parsed morphology features or lemma-click morphology facts.
etymology_claim etymology_claim_unavailable_pending_authority_review unavailable_pending_audit Return authority-source requirements, confidence state, and pending review gate. Do not derive roots, cognates, histories, origins, or etymology statements.
lexical_range_claim lexical_range_unavailable_pending_audit unavailable_pending_audit Return lexical unavailable state and source pointer requirements. Do not generate meanings, semantic ranges, synonyms, or cross-language equivalences.
frequency_claim frequency_fixture_scope_only fixture_scope_only Return count scope warnings and fixture-scope metadata only. Do not claim corpus-wide frequency, KWIC completeness, collocation, or distribution.
generated_answer generated_answer_not_available_in_public_api blocked Return pointer-state metadata and blockers as the answer. Do not return generated research prose, teaching synthesis, model output, or answer bodies.
public_receipt_export public_receipt_export_blocked_pending_policy blocked Return receipt_pointer with public_receipt_ready false, export_ready false, and blocked export_state. Do not export receipt bodies, claim maps, content-hash bundles, public bundles, or download URLs.
mcp_execution mcp_documentation_only_not_callable documentation_only_not_callable Return /docs/mcp, zero callable tools, zero callable resources, no server URL, and activation gates. Do not announce, call, simulate, or discover MCP tools, resources, transports, auth, or runtime endpoints.

Future API Caveats

These docs clarify a pending-state contract. They do not introduce a new callable API surface, source lookup service, receipt export, or model path.

Surface Current Boundary Future Gate Refusal
API docs Existing JSON paths are read-only, noindex, fixture-backed pending-state envelopes. Any new API family or claim-bearing response requires a separate runtime packet, versioned contract, OpenAPI update, noindex tests, and source/receipt enforcement. Docs text alone must not be read as permission to call a broader API, run acquisition, execute adapters, export receipts, or generate answers.
MCP docs MCP remains documentation-only with no server URL, manifest, tools, resources, transport, auth contract, or runtime endpoint. Any future MCP packet must mirror the public JSON envelope first and pass no-live-tools, transport, auth, and leak-guard tests. Docs text alone must not be read as a callable MCP capability.
Receipt docs Receipts are pointer-only and public_receipt_ready remains false. Public receipt export requires public receipt policy, private-data scan, source gate closure, content hash review, and export tests. Docs text alone must not be read as public receipt export permission.

Request Envelope Examples

Current requests are plain read-only JSON reads. There is no prompt field, no request body, no source lookup instruction, and no model-facing command channel.

Example Request Envelope Agent Rule
Term pointer lookup
Ask for the current fixture-backed term envelope without requesting a generated answer.
GET /api/public/terms/greek/psyche.json
{
  "method": "GET",
  "path": "/api/public/terms/greek/psyche.json",
  "accept": "application/json",
  "body": null,
  "auth": "not required for current fixture handlers",
  "requested_claim_surface": "metadata_pointers_only",
  "disallowed_inputs": [
    "prompt",
    "question",
    "source_text_request",
    "translation_request",
    "model_instructions"
  ]
}
Parse the response envelope first; do not infer lexical range, morphology, etymology, translation, or frequency.
Reference parser unavailable state
Ask whether a reference is recognized inside the P0 parser scope without asking Logoi to retrieve text.
GET /api/public/references/parse.json?ref=Iliad%201.6-10
{
  "method": "GET",
  "path": "/api/public/references/parse.json",
  "query": {
    "ref": "Iliad 1.6-10"
  },
  "accept": "application/json",
  "body": null,
  "auth": "not required for current fixture handlers",
  "requested_claim_surface": "reference_status_only",
  "disallowed_inputs": [
    "source_lookup",
    "translation_lookup",
    "passage_invention",
    "cross_corpus_expansion"
  ]
}
Treat recognized_evidence_unavailable as a blocker, not as permission to fill the passage from memory.

OpenAPI Artifact

/openapi.json lists the existing read-only fixture JSON paths and their shared pending-state response contract. Every public JSON response must send X-Robots-Tag: noindex, nofollow.

Public JSON is an agent contract for pending fixture states, not an indexable public evidence surface.

Versioning Policy

Version labels are evidence contracts. They do not imply readiness for broader public claims.

Surface Version Rule
Current fixture API v0-fixture-read-only Public fixture payloads expose a contract value before data fields; agents must branch on contract before parsing family data.
Readiness adapter v1 The readiness endpoint reports metadata readiness only and cannot execute acquisition, parsing, source export, or runtime crawl operations.
Future promotions new contract required Adding source text, translation, morphology, etymology, lexical range, frequency, generated answers, or receipt export requires a separate versioned contract and tests.

Endpoint Header Contract

JSON endpoints are agent-facing contract artifacts. The header below is required even when the paired HTML route has a different page-level policy.

Endpoint Contract Header Expectation
/openapi.json openapi_discovery_document X-Robots-Tag: noindex, nofollow The discovery document itself is JSON for agents and must not become an indexable public evidence page.
/api/v1/readiness.json read_only_adapter_readiness X-Robots-Tag: noindex, nofollow Adapter readiness is metadata-only and must not invite crawling, source acquisition, or source text display.
/api/public/terms/{language}/{lemma}.json read_only_fixture_pending_state X-Robots-Tag: noindex, nofollow Term JSON can expose source and evidence pointers only; lexical, morphology, etymology, and frequency claims stay closed.
/api/public/passages/{id}.json read_only_fixture_pending_state X-Robots-Tag: noindex, nofollow Passage JSON can expose identifiers and withheld states only; source text and translation text stay absent.
/api/public/sources/{id}.json read_only_fixture_pending_state X-Robots-Tag: noindex, nofollow Source JSON can expose provenance, license, checksum, review, and blocker pointers only; source text and acquisition stay absent.
/api/public/editions/{id}.json read_only_fixture_pending_state X-Robots-Tag: noindex, nofollow Edition JSON can expose source binding, rights, checksum, and blocker pointers only; edition text and claim promotion stay absent.
/api/public/receipts/{id}.json read_only_fixture_pending_state X-Robots-Tag: noindex, nofollow Receipt JSON is pointer-only while public receipt export remains blocked.
/api/public/journeys/{slug}.json read_only_fixture_pending_state X-Robots-Tag: noindex, nofollow Journey JSON can expose scope and evidence pointers only; generated teaching and synthesis remain unavailable.
/api/public/references/parse.json?ref={reference} read_only_fixture_pending_state X-Robots-Tag: noindex, nofollow Reference parsing returns fixture matches or unavailable states; it must not invent passages or look up text.

Robots And Noindex API Policy

API JSON is useful for clients, but it is not the public evidence layer. The policy below applies before endpoint-specific details.

  • Every public JSON response, including /openapi.json, must emit X-Robots-Tag: noindex, nofollow.
  • HTML documentation routes may remain indexable because they explain the contract; JSON endpoints remain machine artifacts, not public evidence pages.
  • If a future JSON family backs an indexable HTML evidence page, the JSON response still stays noindex unless a later policy explicitly changes the API contract.
  • Private, generated, query-shaped, and abuse-prone machine routes must stay absent or noindex,nofollow and outside sitemaps.

Public API Readiness Mirror

This mirror is the machine-readable summary that readiness and OpenAPI expose for external agents. It lists only the existing read-only JSON paths, their noindex header contract, and the surfaces that remain closed.

Mirror stateread_only_pointer_only
Endpoint count9
Required headerX-Robots-Tag: noindex, nofollow
Source displayfalse
Receipt exportfalse
Agent runtimefalse
Index promotionfalse

Agents may inspect endpoint templates, headers, IDs, pointers, states, and blockers; agents must stop before closed claim surfaces or runtime actions.

Path Contract Status Allowed Payload Closed Surfaces
GET /openapi.json openapi_discovery_document discovery_noindex
X-Robots-Tag: noindex, nofollow
path templates, response contracts, headers, closed-surface policy, state vocabulary source_text, translation, morphology, etymology, receipt_export, mcp_runtime
GET /api/v1/readiness.json read_only_adapter_readiness adapter_readiness_only
X-Robots-Tag: noindex, nofollow
adapter IDs, manifest IDs, snapshot IDs, checksum state, blocker IDs, operation states adapter_execution, source_acquisition, crawl, source_text_export, receipt_export, model_call
GET /api/public/terms/{language}/{lemma}.json read_only_fixture_pending_state read_only_fixture
X-Robots-Tag: noindex, nofollow
canonical URL, term ID, source IDs, evidence IDs, receipt pointer, states source_text, translation, morphology, etymology, lexical_claims, frequency, receipt_export
GET /api/public/passages/{id}.json read_only_fixture_pending_state read_only_fixture
X-Robots-Tag: noindex, nofollow
canonical URL, passage ID, source IDs, evidence IDs, receipt pointer, withheld states source_text, translation, line_reconstruction, interpretive_gloss, receipt_export
GET /api/public/sources/{id}.json read_only_fixture_pending_state read_only_fixture
X-Robots-Tag: noindex, nofollow
source ID, edition pointer, license state, checksum pointers, review state, blocker IDs source_text, translation, source_acquisition, crawl, indexability_promotion, receipt_export
GET /api/public/editions/{id}.json read_only_fixture_pending_state read_only_fixture
X-Robots-Tag: noindex, nofollow
edition ID, source binding, repository pointer, checksum pointers, rights state, blocker IDs edition_text, source_text, translation, claim_promotion, indexability_promotion, receipt_export
GET /api/public/receipts/{id}.json read_only_fixture_pending_state read_only_fixture
X-Robots-Tag: noindex, nofollow
receipt ID, scope IDs, source IDs, evidence IDs, pointer state, export blocker receipt_export, claim_map, content_hash_export, public_bundle, private_data
GET /api/public/journeys/{slug}.json read_only_fixture_pending_state read_only_fixture
X-Robots-Tag: noindex, nofollow
journey ID, source IDs, evidence IDs, receipt pointer, fixture scope, states generated_teaching, interpretive_synthesis, receipt_export, private_memory, model_output
GET /api/public/references/parse.json?ref={reference} read_only_fixture_pending_state read_only_fixture
X-Robots-Tag: noindex, nofollow
parser scope, normalized reference, matched fixture ID, unavailable state, blocker state source_lookup, translation_lookup, morphology_lookup, etymology_lookup, passage_invention, mcp_runtime

Non-capabilities: write_operations: false, source_acquisition: false, crawl: false, model_calls: false, mcp_runtime: false, receipt_export: false, source_text_export: false

Contract Hard Stops

Agents should treat these as active limits on the current public API contract, not as roadmap hints.

Limit API Rule
no_model_calls No model calls: The public JSON API returns checked-in fixture payloads from local builders; it does not call LLMs, embeddings, rerankers, retrieval services, or remote generation services.
no_mcp_runtime No MCP runtime: The callable machine surface is limited to the documented read-only JSON handlers; no MCP server URL, manifest, tool, or resource is published.
no_source_text No source text: Public JSON payloads expose source IDs, evidence IDs, and source metadata only; source text and translation text are withheld from the API contract.
no_export_ready_receipts No export-ready receipts: Receipts remain pointer-only: public_receipt_ready is false and export_state stays blocked_pending_public_receipt_policy.
no_public_ready_claims No public-ready claims: Payloads expose pending, unavailable, blocker, and fixture-scope states; lexical, morphology, etymology, translation, and generated teaching claims are not public-ready.

Envelope Fields

Agents should parse these fields before reading family-specific data. Pending, unavailable, blocked, and fixture-scope markers control whether the payload can answer a request.

Field Requirement Agent Use
api_version Identifies the fixture API version. Do not merge payloads across versions without checking the contract value.
contract Must be read_only_fixture_pending_state for public fixture payloads. Treat any different value as a separate contract, not as proof-ready evidence.
status Reports ok, not_found, missing_query, or malformed_query. Use non-ok statuses as blockers; do not repair them with model memory.
entity_type Names the payload family: term, passage, source, edition, receipt, journey, reference, or adapter_readiness. Route the payload to the matching parser and keep families separate.
entity_id Carries the stable fixture identifier when one exists. Cite this ID for internal traceability, never as a public proof by itself.
canonical_url Points to the human canonical route when one exists. Prefer this URL for navigation and citation pointers.
source_ids Lists source metadata pointers only. Resolve as source metadata; do not infer source text, translation, or lexical claims.
evidence_ids Lists evidence rows attached to the fixture scope. Use with states and blockers before treating any evidence as active.
receipt_pointer Carries a pointer-only receipt object or null. Inspect receipt scope and export_state; do not export or reconstruct a public receipt.
indexability Carries declared/effective route state and the noindex, nofollow JSON robots rule. Keep JSON payloads out of public indexing even when the paired HTML route later becomes indexable.
states Groups pending, unavailable, blocked, and fixture_scope markers. Let these states control refusal and uncertainty handling.
response_policy Declares pointer-only behavior, noindex JSON headers, closed surfaces, and MCP non-operation. Treat these policy fields as machine-readable refusals; do not request missing claim surfaces from another route.
data Contains family-specific metadata only. Read only the allowed fields for the entity family.
error Explains not_found, missing_query, or malformed_query states. Surface the blocker instead of fabricating a replacement answer.

Payload Families

The public API families are read-only JSON envelopes. The allowed payload column names metadata that can be inspected; the closed payload column names claim surfaces that must remain refusals.

Family Status Allowed Payload Closed Payload
term Read-only fixture term metadata, safe source metadata, evidence metadata, usage warning metadata, receipt pointer lexical range claims, morphology parsed features, etymology statement text, translation text, source text
passage Read-only fixture passage identifiers, canonical reference metadata, source IDs, evidence metadata, withheld display states primary source text, translation text, interpretive gloss, line text reconstruction
source Read-only fixture source identity, edition pointer, license state, checksum pointers, review state, blocker IDs primary source text, translation text, source acquisition, runtime crawl, indexability promotion
edition Read-only fixture edition identity, source binding, rights state, checksum pointers, review state, blocker IDs edition text, primary source text, translation text, claim promotion, receipt export
receipt Read-only fixture receipt scope, receipt pointer, source IDs, evidence IDs, blocked export state public receipt export, content hash export, claim map export, private data
journey Read-only fixture journey metadata, source IDs, evidence IDs, receipt pointer, pending state labels generated lesson body, interpretive synthesis, public teaching artifact
reference Read-only fixture parser scope, normalized reference, matched fixture ID when present, unavailable state when absent passage invention, cross-corpus parsing, source text lookup, translation lookup
adapter_readiness Adapter readiness only snapshot IDs, manifest IDs, checksum state, blockers, supported operations adapter execution, source acquisition, source text export, runtime crawl

Route Family Example Matrix

These examples are visible contract rows, not a broadened runtime. Every family stays pointer/state-only and carries the JSON noindex header.

Family Route / Example Response State Pointer Fields Receipt Pointer Noindex Header Unavailable Example Closed Surface
Term /api/public/terms/{language}/{lemma}.json
/api/public/terms/greek/psyche.json
pending + unavailable + blocked canonical_url, entity_id, source_ids, evidence_ids, receipt_pointer, indexability, states Pointer-only when present; export_state remains blocked_pending_public_receipt_policy. X-Robots-Tag: noindex, nofollow Lexical range and translation stay unavailable_pending_audit. No lexical range, morphology, etymology, translation, source text, frequency, answer body, or receipt export.
Passage /api/public/passages/{id}.json
/api/public/passages/iliad-1-1-5.json
audited HTML source display + public JSON withheld canonical reference metadata, source_ids, evidence_ids, receipt_pointer, states, source_display_state/source_text_display Pointer-only receipt context; no claim map or public bundle. X-Robots-Tag: noindex, nofollow The paired HTML route can show the audited source snapshot; public JSON returns withheld_in_public_json instead of text. No JSON primary text, source lines, translation text, interpretive gloss, line reconstruction, or generated explanation.
Source /api/public/sources/{id}.json
/api/public/sources/grc-homer-archive-fixture-pending.json
source_pending + blocked source identity, edition pointer, license state, checksum pointers, review state, source_display_state, blocker IDs Pointer-only when present; no receipt body or export bundle. X-Robots-Tag: noindex, nofollow HTML display is separated from public JSON; source_display_state remains withheld_in_public_json. No source text, translation text, source acquisition, crawl, indexability promotion, or receipt export.
Edition /api/public/editions/{id}.json
/api/public/editions/grc-homer-archive-fixture-pending.json
source_pending + blocked edition identity, source binding, rights state, checksum pointers, review state, blocker IDs Pointer-only when present; no receipt body or claim map. X-Robots-Tag: noindex, nofollow Edition text, source text, and translation remain withheld. No edition text, source text, translation text, claim promotion, public evidence promotion, or receipt export.
Receipt /api/public/receipts/{id}.json
/api/public/receipts/soul-word-journey-v0.json
pending + blocked + fixture_scope receipt scope, source_ids, evidence_ids, pointer status, export_state The receipt itself is returned only as state metadata; public_receipt_ready stays false. X-Robots-Tag: noindex, nofollow Export is blocked until public receipt policy, leak guard, and promotion gates pass. No receipt body, content-hash export, evidence crosswalk, public bundle, or private data.
Journey /api/public/journeys/{slug}.json
/api/public/journeys/soul-word.json
pending + fixture_scope journey metadata, source_ids, evidence_ids, receipt_pointer, not-proven states Journey links to a blocked receipt pointer only. X-Robots-Tag: noindex, nofollow Generated teaching, synthesis, and public-ready interpretive claims stay unavailable. No generated lesson body, synthesis, teaching artifact, private memory, or model output.
Reference parser /api/public/references/parse.json?ref={reference}
/api/public/references/parse.json?ref=Iliad%201.6-10
recognized_evidence_unavailable parser scope, normalized reference, matched fixture ID or unavailable blocker None for unavailable references. X-Robots-Tag: noindex, nofollow Recognized references outside the first fixture return matched_passage_id null. No passage invention, source lookup, translation lookup, citation expansion, or cross-corpus parsing.
Readiness adapter /api/v1/readiness.json
/api/v1/readiness.json
read_only_adapter_readiness adapter IDs, manifest IDs, snapshot IDs, checksum state, blockers, supported operation states Null; readiness cannot export receipts or evidence bundles. X-Robots-Tag: noindex, nofollow Disabled operation rows report source display, translation, morphology, etymology, lexical range, and search as unavailable. No adapter execution, source acquisition, crawl, primary text export, model call, or live research operation.

Response State Matrix

Agents must read these states as control signals. They are not prompts to complete missing evidence.

State Meaning Example Agent Action
pending The row exists but one or more source, receipt, review, or promotion gates are still open. route:word-greek-psyche:source_gate_open Return the pending state and stop before making a public claim.
unavailable The request is recognized but the requested evidence surface is not available in the current fixture. recognized_evidence_unavailable Explain the unavailable state; do not fill the gap from memory or a model.
blocked A named gate forbids promotion or export. blocked_public_export / gate:receipt-policy Surface the blocker and do not retry through another endpoint.
fixture_scope The value is useful for product proof only and cannot be generalized to corpus evidence. evidence:fixture-scope-warning Keep the scope warning attached to any downstream summary.

Response State Catalog

The catalog below is the branch-level state vocabulary for future agents. A state can authorize pointer inspection, but it cannot authorize source display, claim promotion, receipt export, or runtime execution.

State Family Meaning Allowed Pointer Result Agent Action Closed Surfaces Example Routes
ok success The fixture handler found a row and returned the current pointer-state envelope. Read contract, canonical_url, entity_id, source_ids, evidence_ids, receipt_pointer, indexability, states, and safe metadata. Continue only as far as the states and response_policy allow. source_text, translation_text, generated_answer, public_receipt_export /api/public/terms/greek/psyche.json
/api/public/passages/iliad-1-1-5.json
source_pending pending The page or entity is recognized, but source, license, checksum, passage, receipt, or review gates remain open. Return source IDs, evidence IDs, route gate IDs, and withheld display states. State the blocker and stop before reconstructing or promoting evidence. source_text, translation_text, line_reconstruction, public_ready_claim /api/public/passages/iliad-1-1-5.json
unavailable_pending_audit unavailable The requested claim family is known to the contract but is unavailable until a source audit and review gate pass. Return unavailable status metadata and the relevant source or evidence pointer. Report the unavailable state as the answer; do not fill the field from memory, model output, or a different route. morphology_claim, etymology_claim, lexical_range_claim, translation_text, frequency_claim /api/public/terms/greek/psyche.json
recognized_evidence_unavailable unavailable The parser recognized the reference shape, but no first-slice fixture passage is available for that range. Return parser scope, normalized reference, canonical work URL, source IDs, and unavailable blocker IDs. Do not invent the passage, expand the citation, look up source text, or synthesize a translation. passage_invention, source_lookup, translation_lookup, cross_corpus_expansion /api/public/references/parse.json?ref=Iliad%201.6-10
blocked_public_export blocked A receipt or export gate explicitly forbids public bundle output. Return receipt_pointer, public_receipt_ready false, export_ready false, export_state, source IDs, and evidence IDs. Treat the receipt as a blocker ledger only. receipt_body, claim_map, content_hash_export, public_bundle, private_data /api/public/receipts/soul-word-journey-v0.json
missing_query error A required query field is absent. Return contract, status, error text, noindex header, empty pointers, and blocked state markers. Ask for the missing input; do not guess a reference. fallback_lookup, source_lookup, generated_answer /api/public/references/parse.json
malformed_query error The input is present but outside the parser contract. Return contract, status, parser scope, noindex header, empty pointers, and malformed state markers. Report parser scope and request a supported reference shape. best_effort_parse, cross_corpus_expansion, citation_expansion /api/public/references/parse.json?ref=not-a-supported-reference
not_found error The route family exists, but the requested fixture row is absent. Return contract, status, noindex header, null entity_id, empty pointers, and not-found state markers. Surface the not_found state instead of creating a substitute fixture. entity_invention, source_acquisition, runtime_search /api/public/terms/greek/not-in-fixture.json
adapter_not_ready error Readiness metadata failed a manifest, checksum, snapshot, or blocker check. Return adapter metadata, blocker IDs, disabled operation states, and noindex header. Report readiness failure; do not run acquisition, crawl, repair, or fallback source loading. adapter_execution, source_acquisition, crawl, primary_text_export /api/v1/readiness.json
documentation_only_not_callable non_operational The MCP shape is a documentation contract only and has no runtime transport. Return zero callable tools, zero callable resources, no server URL, no manifest, and activation gates. Use it only as a planning constraint for a later explicitly authorized MCP packet. tool_call, resource_read, transport, auth_token_contract, runtime_endpoint /docs/mcp

Agent State Examples

These examples name the exact machine states external tools should preserve. They clarify current envelopes without adding endpoints, executable operations, or export-ready payloads.

Example Route State Noindex Allowed Absent Agent Action
Source-pending evidence route /api/public/passages/iliad-1-1-5.json withheld_in_public_json X-Robots-Tag: noindex, nofollow canonical reference, source_ids, evidence_ids, receipt_pointer, indexability, states, source_display_state/source_text_display primary text, translation text, line reconstruction, generated explanation Return the HTML/API separation and do not reconstruct or quote source text from JSON.
Unavailable term claim fields /api/public/terms/greek/psyche.json unavailable_pending_audit X-Robots-Tag: noindex, nofollow term metadata, source pointers, evidence pointers, closed-field statuses lexical range claim, morphology claim, etymology statement, translation text, corpus frequency Surface unavailable_pending_audit and refuse to fill the claim gap.
Blocked receipt export /api/public/receipts/soul-word-journey-v0.json blocked_public_export X-Robots-Tag: noindex, nofollow receipt_pointer, public_receipt_ready false, export_state, source_ids, evidence_ids receipt body, claim map, content hash export, public bundle, private data Treat the receipt as a pointer-only blocker ledger.
Readiness metadata /api/v1/readiness.json read_only_adapter_readiness X-Robots-Tag: noindex, nofollow adapter IDs, manifest IDs, snapshot IDs, checksum state, blocker IDs adapter execution, source acquisition, crawl, export, model call Read existing readiness fields only; no operation is triggered.

Error And Refusal Examples

Error examples remain pointer-first. They expose status, noindex, empty or withheld pointers, and agent action only; they do not start recovery jobs, source lookup, public receipt export, or fallback generation.

Example Request Status Header Pointer Result Agent Action
reference_missing_query GET /api/public/references/parse.json 400 missing_query
read_only_fixture_pending_state
X-Robots-Tag: noindex, nofollow
{
  "entity_type": "reference",
  "entity_id": null,
  "canonical_url": null,
  "source_ids": [],
  "evidence_ids": [],
  "receipt_pointer": null,
  "states": {
    "pending": [],
    "unavailable": [],
    "blocked": [
      "error:missing_ref_query"
    ],
    "fixture_scope": []
  },
  "error": "Missing required ref query parameter."
}
Ask for a supported reference string; do not infer one.
reference_malformed_query GET /api/public/references/parse.json?ref=not-a-supported-reference 400 malformed_query
read_only_fixture_pending_state
X-Robots-Tag: noindex, nofollow
{
  "entity_type": "reference",
  "entity_id": null,
  "canonical_url": null,
  "source_ids": [],
  "evidence_ids": [],
  "receipt_pointer": null,
  "states": {
    "pending": [],
    "unavailable": [
      "parser_scope:homer_iliad_only"
    ],
    "blocked": [
      "error:malformed_reference"
    ],
    "fixture_scope": []
  },
  "error": "Reference is outside the P0 parser contract."
}
Return parser scope and request a supported Iliad reference shape.
term_not_found GET /api/public/terms/greek/not-in-fixture.json 404 not_found
read_only_fixture_pending_state
X-Robots-Tag: noindex, nofollow
{
  "entity_type": "term",
  "entity_id": null,
  "canonical_url": null,
  "source_ids": [],
  "evidence_ids": [],
  "receipt_pointer": null,
  "states": {
    "pending": [],
    "unavailable": [
      "fixture:term_absent"
    ],
    "blocked": [
      "error:term_not_found"
    ],
    "fixture_scope": []
  },
  "error": "No fixture term exists for the requested language and lemma."
}
Return not_found; do not create a replacement term row or source claim.
readiness_adapter_not_ready GET /api/v1/readiness.json 503 adapter_not_ready
read_only_adapter_readiness
X-Robots-Tag: noindex, nofollow
{
  "entity_type": "adapter_readiness",
  "entity_id": "fixture-source-snapshot",
  "source_ids": [
    "source:grc:homer-archive-fixture-pending"
  ],
  "evidence_ids": [],
  "receipt_pointer": null,
  "states": {
    "pending": [
      "source_pending"
    ],
    "unavailable": [
      "display_withheld_until_public_display_gate"
    ],
    "blocked": [
      "source_text_export_unavailable",
      "operation_disabled_until_separate_gate"
    ],
    "fixture_scope": []
  },
  "error": "Readiness gate failed closed."
}
Report the failed gate; do not execute adapters, crawl, repair, or export source data.

What API Does Not Yet Do

Closed surfaces stay closed even when a route family has an example row.

Surface Current State Does Not Do
Source and translation content withheld or unavailable_pending_audit No API response returns primary text, translation text, or line reconstruction.
Philological claims metadata pointers and blocker states only No response asserts morphology, etymology, lexical range, translation, or corpus frequency.
Receipts pointer_only with public_receipt_ready false No receipt body, export-ready payload, claim map, downloadable bundle, or public export URL exists.
Execution read-only JSON handlers No write endpoint, source acquisition, crawl, model call, retrieval job, private memory action, or tool execution exists.
MCP non-operational No MCP server URL, manifest, callable tool, callable resource, transport, or auth token contract exists.

Pending Envelope Examples

These examples describe how pending, unavailable, blocked, and fixture-scope states control agent behavior. They are excerpts, not proof-ready evidence.

Example Request State Families Closed Claim Handling
Term pending envelope
read_only_fixture_pending_state
GET /api/public/terms/greek/psyche.json pending, unavailable, blocked, fixture_scope Return source and evidence pointers with pending states; refuse lexical range, morphology, etymology, translation, and frequency claims.
Passage pointer envelope
read_only_fixture_pending_state
GET /api/public/passages/iliad-1-1-5.json pending, blocked Return canonical identifiers, source IDs, and withheld display states; refuse primary text, translation text, and line reconstruction.
Source provenance envelope
read_only_fixture_pending_state
GET /api/public/sources/grc-homer-archive-fixture-pending.json pending, unavailable, blocked Return source provenance, review, checksum, and blocker pointers; refuse source text, acquisition, crawl, and claim promotion.
Edition provenance envelope
read_only_fixture_pending_state
GET /api/public/editions/grc-homer-archive-fixture-pending.json pending, unavailable, blocked Return edition identity, source binding, rights, checksum, and blocker pointers; refuse edition text, source text, translation, and claim promotion.
Reference unavailable envelope
read_only_fixture_pending_state
GET /api/public/references/parse.json?ref=Iliad%201.6-10 unavailable, blocked Return the recognized work pointer and unavailable state; refuse passage invention, source lookup, and translation lookup.
Receipt pointer envelope
read_only_fixture_pending_state
GET /api/public/receipts/soul-word-journey-v0.json pending, blocked, fixture_scope Return receipt scope and pointer metadata; refuse content hash, claim map, public export, and private data.
Adapter readiness envelope
read_only_adapter_readiness
GET /api/v1/readiness.json blocked Return source snapshot readiness metadata only; refuse adapter execution, source acquisition, crawling, and source text export.

Blocked And Pending Response Contract

Blocked and pending states are first-class responses. They are not incomplete answers waiting for an agent to complete them.

{
  "contract": "read_only_fixture_pending_state",
  "status": "ok",
  "entity_type": "reference",
  "states": {
    "pending": [
      "route:text-greek-homer-iliad:source_gate_open"
    ],
    "unavailable": [
      "evidence:blocker:source-review"
    ],
    "blocked": [
      "gate:homer-source-review"
    ],
    "fixture_scope": []
  },
  "response_policy": {
    "pointer_only": true,
    "source_display_state": "withheld_in_public_json",
    "primary_text_status": "withheld",
    "translation_status": "withheld",
    "public_receipt_export": "blocked_pending_public_receipt_policy",
    "claim_promotion": "blocked_pending_source_receipt_and_review_gates",
    "mcp": {
      "operational": false,
      "server_url": null,
      "callable_tools": 0,
      "callable_resources": 0,
      "runtime_endpoint": null
    }
  },
  "agent_action": "Return the blocker and source_display_state, then stop. The audited HTML route may display source text, but public JSON must not generate, quote, or export source text, translation, morphology, etymology, lexical range, frequency, or an answer body."
}

Pointer-First Agent Recipes

External clients should start with pointer fields and state fields, then stop when an envelope says source_pending, unavailable, blocked, or noindex. These recipes do not add endpoints or operational behavior.

Recipe Request Status Read First Preserve States Agent Action Never
Lemma Lookup
lemma_lookup
GET /api/public/terms/greek/psyche.json read_only_fixture_pending_state contract, canonical_url, entity_id, source_ids, evidence_ids, receipt_pointer, indexability, states source_pending, unavailable_pending_audit, blocked_public_export, fixture_scope Return the lemma identity and pointer state. If lexical, morphology, etymology, translation, or frequency fields are unavailable, surface that state as the answer. infer lexical range, assert morphology, invent etymology, translate from memory, promote fixture counts
Passage Lookup
passage_lookup
GET /api/public/passages/iliad-1-1-5.json source_pending_pointer_only contract, canonical_url, source_ids, evidence_ids, receipt_pointer, indexability, states source_pending, blocked, withheld, noindex Return the canonical passage pointer and withheld display state. Do not reconstruct lines, translations, or commentary from outside the envelope. return primary text, return translation text, fill missing lines, create interpretive gloss, expand citation scope
Receipt Pointer Lookup
receipt_pointer_lookup
GET /api/public/receipts/soul-word-journey-v0.json blocked_public_export_pointer_only contract, receipt_pointer, source_ids, evidence_ids, indexability, states blocked_pending_public_receipt_policy, public_receipt_ready:false, export_ready:false Use the receipt route as a state pointer only. Preserve public_receipt_ready false and export_state blocked until a separate receipt policy promotes it. export receipt body, rebuild claim map, emit content hash bundle, link a public download, include private data
Readiness Check
readiness_check
GET /api/v1/readiness.json read_only_adapter_readiness contract, status, indexability, states.blocked, readiness.adapters, data.supported_operations source_text_export_unavailable, operation_disabled_until_separate_gate, noindex Treat readiness as metadata about existing fixtures and adapters. A ready metadata row does not authorize acquisition, crawling, source display, receipt export, or claim promotion. execute adapter, start source acquisition, crawl, export primary text, retry blocked operations through MCP

Lemma Lookup Skeleton

{
  "api_version": "v0-fixture-read-only",
  "contract": "read_only_fixture_pending_state",
  "status": "ok",
  "entity_type": "term",
  "entity_id": "term:grc:psyche",
  "canonical_url": "https://logoi.health/words/greek/psyche",
  "source_ids": [
    "source:lexicon:greek-fallback-pending",
    "source:grc:homer-archive-fixture-pending",
    "source:etymology:greek-beekes-2010-pending",
    "source:etymology:greek-chantraine-pending",
    "source:etymology:greek-frisk-pending",
    "source:etymology:greek-lsj-fallback-pending",
    "source:lexicon:hebrew-fallback-pending",
    "source:lexicon:latin-fallback-pending",
    "source:grc:homer-morphology-provider-pending",
    "source:etymology:english-oed-pending",
    "source:etymology:english-med-pending",
    "source:etymology:english-bosworth-toller-pending",
    "source:etymology:english-germanic-authority-pending",
    "source:etymology:hebrew-halot-pending",
    "source:etymology:hebrew-dch-pending",
    "source:etymology:hebrew-bdb-fallback-pending",
    "source:etymology:latin-de-vaan-pending",
    "source:etymology:latin-ernout-meillet-pending",
    "source:etymology:latin-walde-hofmann-pending",
    "source:etymology:latin-lewis-short-fallback-pending",
    "source:receipt:soul-word-journey-v0"
  ],
  "evidence_ids": [
    "evidence:term:state-unavailable",
    "evidence:occurrence:psychas-source-pending",
    "evidence:morphology:psychas-provider-pending",
    "evidence:etymology:authorities-unavailable",
    "evidence:kwic:fixture-scope",
    "evidence:chart:fixture-scope",
    "evidence:journey:not-proven"
  ],
  "receipt_pointer": {
    "id": "receipt:word:grc-psyche-v0",
    "slug": "grc-psyche-v0",
    "canonical_path": "/receipts/soul-word-journey-v0",
    "canonical_url": "https://logoi.health/receipts/soul-word-journey-v0",
    "version": "v0-fixture",
    "pointer_only": true,
    "public_receipt_ready": false,
    "export_ready": false,
    "export_state": "blocked_pending_public_receipt_policy",
    "public_export_url": null,
    "closed_fields": [
      "receipt_body",
      "evidence_crosswalk",
      "public_export_bundle",
      "private_data"
    ],
    "indexability": "noindex,follow"
  },
  "indexability": {
    "declared": "noindex,follow",
    "effective": "noindex,follow",
    "robots": "noindex, nofollow",
    "route_path": "/words/greek/psyche",
    "source_gate": "source_audit_required",
    "blockers": [
      "gate:lexical-source-review",
      "gate:morphology-provider-review",
      "gate:etymology-authority-review"
    ]
  },
  "states": {
    "pending": [
      "evidence:term:state-unavailable",
      "evidence:occurrence:psychas-source-pending",
      "evidence:morphology:psychas-provider-pending",
      "route:word-greek-psyche:source_gate_open"
    ],
    "unavailable": [
      "evidence:etymology:authorities-unavailable"
    ],
    "blocked": [
      "gate:lexical-source-review",
      "gate:morphology-provider-review",
      "gate:etymology-authority-review",
      "receipt:word:grc-psyche-v0:public_receipt_export_blocked"
    ],
    "fixture_scope": [
      "evidence:kwic:fixture-scope",
      "evidence:chart:fixture-scope"
    ]
  },
  "response_policy": {
    "pointer_only": true,
    "json_noindex": {
      "header": "X-Robots-Tag",
      "value": "noindex, nofollow"
    },
    "source_ids": "metadata_pointers_only",
    "evidence_ids": "state_and_scope_pointers_only",
    "receipt_pointer": "metadata_pointer_only_no_public_export",
    "primary_text_status": "withheld",
    "translation_status": "withheld",
    "public_receipt_export": "blocked_pending_public_receipt_policy",
    "claim_promotion": "blocked_pending_source_receipt_and_review_gates",
    "mcp": {
      "operational": false,
      "server_url": null,
      "callable_tools": 0,
      "callable_resources": 0,
      "runtime_endpoint": null
    },
    "refused_surfaces": [
      "source_text",
      "translation_text",
      "morphology_claim",
      "etymology_claim",
      "lexical_range_claim",
      "frequency_claim",
      "interpretive_synthesis",
      "model_output",
      "tool_execution",
      "public_receipt_export"
    ],
    "closed_surface_denials": [
      {
        "surface": "source_text",
        "denial_code": "source_text_withheld_until_source_gates_close",
        "current_state": "withheld",
        "allowed_response": "Return source IDs, evidence IDs, route state, source gate, and withheld display status.",
        "denied_response": "Do not quote, reconstruct, summarize, or export primary source text.",
        "closed_objects": [
          "primary content payload",
          "line content payload",
          "text export payload",
          "local snapshot locator"
        ]
      },
      {
        "surface": "translation_text",
        "denial_code": "translation_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return translation status metadata and the relevant source or review gate.",
        "denied_response": "Do not translate, gloss, paraphrase, or synthesize translation text.",
        "closed_objects": [
          "translation content payload",
          "gloss content payload",
          "semantic rendering payload"
        ]
      },
      {
        "surface": "morphology_claim",
        "denial_code": "morphology_claim_unavailable_pending_provider_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return provider provenance, parser metadata, and asserted_features_public false.",
        "denied_response": "Do not assert parsed morphology features or lemma-click morphology facts.",
        "closed_objects": [
          "feature assertion payload",
          "public morphology payload",
          "lemma-click fact payload"
        ]
      },
      {
        "surface": "etymology_claim",
        "denial_code": "etymology_claim_unavailable_pending_authority_review",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return authority-source requirements, confidence state, and pending review gate.",
        "denied_response": "Do not derive roots, cognates, histories, origins, or etymology statements.",
        "closed_objects": [
          "origin statement payload",
          "root assertion payload",
          "cognate assertion payload",
          "history narrative payload"
        ]
      },
      {
        "surface": "lexical_range_claim",
        "denial_code": "lexical_range_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return lexical unavailable state and source pointer requirements.",
        "denied_response": "Do not generate meanings, semantic ranges, synonyms, or cross-language equivalences.",
        "closed_objects": [
          "semantic range payload",
          "meaning synthesis payload",
          "synonym payload",
          "cross-language equivalence payload"
        ]
      },
      {
        "surface": "frequency_claim",
        "denial_code": "frequency_fixture_scope_only",
        "current_state": "fixture_scope_only",
        "allowed_response": "Return count scope warnings and fixture-scope metadata only.",
        "denied_response": "Do not claim corpus-wide frequency, KWIC completeness, collocation, or distribution.",
        "closed_objects": [
          "corpus count payload",
          "complete KWIC payload",
          "collocation payload",
          "distribution payload"
        ]
      },
      {
        "surface": "generated_answer",
        "denial_code": "generated_answer_not_available_in_public_api",
        "current_state": "blocked",
        "allowed_response": "Return pointer-state metadata and blockers as the answer.",
        "denied_response": "Do not return generated research prose, teaching synthesis, model output, or answer bodies.",
        "closed_objects": [
          "generated prose payload",
          "model output payload",
          "teaching synthesis payload",
          "answer body payload"
        ]
      },
      {
        "surface": "public_receipt_export",
        "denial_code": "public_receipt_export_blocked_pending_policy",
        "current_state": "blocked",
        "allowed_response": "Return receipt_pointer with public_receipt_ready false, export_ready false, and blocked export_state.",
        "denied_response": "Do not export receipt bodies, claim maps, content-hash bundles, public bundles, or download URLs.",
        "closed_objects": [
          "receipt body payload",
          "claim map payload",
          "content hash bundle",
          "public bundle",
          "download URL"
        ]
      },
      {
        "surface": "mcp_execution",
        "denial_code": "mcp_documentation_only_not_callable",
        "current_state": "documentation_only_not_callable",
        "allowed_response": "Return /docs/mcp, zero callable tools, zero callable resources, no server URL, and activation gates.",
        "denied_response": "Do not announce, call, simulate, or discover MCP tools, resources, transports, auth, or runtime endpoints.",
        "closed_objects": [
          "server URL",
          "tool inventory",
          "resource inventory",
          "tool-call path",
          "resource-read path",
          "runtime endpoint"
        ]
      }
    ]
  }
}

Passage Lookup Skeleton

{
  "api_version": "v0-fixture-read-only",
  "contract": "read_only_fixture_pending_state",
  "status": "ok",
  "entity_type": "passage",
  "entity_id": "passage:iliad-1-1-5",
  "canonical_url": "https://logoi.health/passages/iliad-1-1-5",
  "source_ids": [
    "source:grc:homer-archive-fixture-pending",
    "source:logoi:gloss-draft",
    "source:grc:homer-morphology-provider-pending"
  ],
  "evidence_ids": [
    "evidence:homer-passage-source-pending",
    "evidence:occurrence:psychas-source-pending",
    "evidence:gloss:pending",
    "evidence:kwic:fixture-scope",
    "evidence:morphology:psychas-provider-pending"
  ],
  "receipt_pointer": {
    "id": "receipt:passage:iliad-1-1-5-v0",
    "slug": "iliad-1-1-5-v0",
    "canonical_path": "/receipts/soul-word-journey-v0",
    "canonical_url": "https://logoi.health/receipts/soul-word-journey-v0",
    "version": "v0-fixture",
    "pointer_only": true,
    "public_receipt_ready": false,
    "export_ready": false,
    "export_state": "blocked_pending_public_receipt_policy",
    "public_export_url": null,
    "closed_fields": [
      "receipt_body",
      "evidence_crosswalk",
      "public_export_bundle",
      "private_data"
    ],
    "indexability": "noindex,follow"
  },
  "indexability": {
    "declared": "noindex,follow",
    "effective": "noindex,follow",
    "robots": "noindex, nofollow",
    "route_path": "/passages/iliad-1-1-5",
    "source_gate": "source_audit_required",
    "blockers": []
  },
  "states": {
    "pending": [
      "evidence:homer-passage-source-pending",
      "evidence:occurrence:psychas-source-pending",
      "evidence:gloss:pending",
      "evidence:morphology:psychas-provider-pending"
    ],
    "unavailable": [],
    "blocked": [
      "receipt:passage:iliad-1-1-5-v0:public_receipt_export_blocked"
    ],
    "fixture_scope": [
      "evidence:kwic:fixture-scope"
    ]
  },
  "response_policy": {
    "pointer_only": true,
    "json_noindex": {
      "header": "X-Robots-Tag",
      "value": "noindex, nofollow"
    },
    "source_ids": "metadata_pointers_only",
    "evidence_ids": "state_and_scope_pointers_only",
    "receipt_pointer": "metadata_pointer_only_no_public_export",
    "primary_text_status": "withheld",
    "translation_status": "withheld",
    "public_receipt_export": "blocked_pending_public_receipt_policy",
    "claim_promotion": "blocked_pending_source_receipt_and_review_gates",
    "mcp": {
      "operational": false,
      "server_url": null,
      "callable_tools": 0,
      "callable_resources": 0,
      "runtime_endpoint": null
    },
    "refused_surfaces": [
      "source_text",
      "translation_text",
      "morphology_claim",
      "etymology_claim",
      "lexical_range_claim",
      "frequency_claim",
      "interpretive_synthesis",
      "model_output",
      "tool_execution",
      "public_receipt_export"
    ],
    "closed_surface_denials": [
      {
        "surface": "source_text",
        "denial_code": "source_text_withheld_until_source_gates_close",
        "current_state": "withheld",
        "allowed_response": "Return source IDs, evidence IDs, route state, source gate, and withheld display status.",
        "denied_response": "Do not quote, reconstruct, summarize, or export primary source text.",
        "closed_objects": [
          "primary content payload",
          "line content payload",
          "text export payload",
          "local snapshot locator"
        ]
      },
      {
        "surface": "translation_text",
        "denial_code": "translation_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return translation status metadata and the relevant source or review gate.",
        "denied_response": "Do not translate, gloss, paraphrase, or synthesize translation text.",
        "closed_objects": [
          "translation content payload",
          "gloss content payload",
          "semantic rendering payload"
        ]
      },
      {
        "surface": "morphology_claim",
        "denial_code": "morphology_claim_unavailable_pending_provider_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return provider provenance, parser metadata, and asserted_features_public false.",
        "denied_response": "Do not assert parsed morphology features or lemma-click morphology facts.",
        "closed_objects": [
          "feature assertion payload",
          "public morphology payload",
          "lemma-click fact payload"
        ]
      },
      {
        "surface": "etymology_claim",
        "denial_code": "etymology_claim_unavailable_pending_authority_review",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return authority-source requirements, confidence state, and pending review gate.",
        "denied_response": "Do not derive roots, cognates, histories, origins, or etymology statements.",
        "closed_objects": [
          "origin statement payload",
          "root assertion payload",
          "cognate assertion payload",
          "history narrative payload"
        ]
      },
      {
        "surface": "lexical_range_claim",
        "denial_code": "lexical_range_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return lexical unavailable state and source pointer requirements.",
        "denied_response": "Do not generate meanings, semantic ranges, synonyms, or cross-language equivalences.",
        "closed_objects": [
          "semantic range payload",
          "meaning synthesis payload",
          "synonym payload",
          "cross-language equivalence payload"
        ]
      },
      {
        "surface": "frequency_claim",
        "denial_code": "frequency_fixture_scope_only",
        "current_state": "fixture_scope_only",
        "allowed_response": "Return count scope warnings and fixture-scope metadata only.",
        "denied_response": "Do not claim corpus-wide frequency, KWIC completeness, collocation, or distribution.",
        "closed_objects": [
          "corpus count payload",
          "complete KWIC payload",
          "collocation payload",
          "distribution payload"
        ]
      },
      {
        "surface": "generated_answer",
        "denial_code": "generated_answer_not_available_in_public_api",
        "current_state": "blocked",
        "allowed_response": "Return pointer-state metadata and blockers as the answer.",
        "denied_response": "Do not return generated research prose, teaching synthesis, model output, or answer bodies.",
        "closed_objects": [
          "generated prose payload",
          "model output payload",
          "teaching synthesis payload",
          "answer body payload"
        ]
      },
      {
        "surface": "public_receipt_export",
        "denial_code": "public_receipt_export_blocked_pending_policy",
        "current_state": "blocked",
        "allowed_response": "Return receipt_pointer with public_receipt_ready false, export_ready false, and blocked export_state.",
        "denied_response": "Do not export receipt bodies, claim maps, content-hash bundles, public bundles, or download URLs.",
        "closed_objects": [
          "receipt body payload",
          "claim map payload",
          "content hash bundle",
          "public bundle",
          "download URL"
        ]
      },
      {
        "surface": "mcp_execution",
        "denial_code": "mcp_documentation_only_not_callable",
        "current_state": "documentation_only_not_callable",
        "allowed_response": "Return /docs/mcp, zero callable tools, zero callable resources, no server URL, and activation gates.",
        "denied_response": "Do not announce, call, simulate, or discover MCP tools, resources, transports, auth, or runtime endpoints.",
        "closed_objects": [
          "server URL",
          "tool inventory",
          "resource inventory",
          "tool-call path",
          "resource-read path",
          "runtime endpoint"
        ]
      }
    ]
  },
  "data": {
    "source_display_state": "withheld_in_public_json",
    "translation_display_state": "withheld_pending_translation_review"
  }
}

Receipt Pointer Lookup Skeleton

{
  "api_version": "v0-fixture-read-only",
  "contract": "read_only_fixture_pending_state",
  "status": "ok",
  "entity_type": "receipt",
  "entity_id": "receipt:soul-word-journey-v0",
  "canonical_url": "https://logoi.health/receipts/soul-word-journey-v0",
  "source_ids": [
    "source:grc:homer-archive-fixture-pending",
    "source:receipt:soul-word-journey-v0",
    "source:etymology:english-oed-pending",
    "source:etymology:english-med-pending",
    "source:etymology:english-bosworth-toller-pending",
    "source:etymology:english-germanic-authority-pending",
    "source:etymology:hebrew-halot-pending",
    "source:etymology:hebrew-dch-pending",
    "source:etymology:hebrew-bdb-fallback-pending",
    "source:etymology:greek-beekes-2010-pending",
    "source:etymology:greek-chantraine-pending",
    "source:etymology:greek-frisk-pending",
    "source:etymology:greek-lsj-fallback-pending",
    "source:etymology:latin-de-vaan-pending",
    "source:etymology:latin-ernout-meillet-pending",
    "source:etymology:latin-walde-hofmann-pending",
    "source:etymology:latin-lewis-short-fallback-pending"
  ],
  "evidence_ids": [
    "evidence:journey:not-proven",
    "evidence:homer-passage-source-pending",
    "evidence:occurrence:psychas-source-pending",
    "evidence:etymology:authorities-unavailable",
    "evidence:blocker:source-review"
  ],
  "receipt_pointer": {
    "id": "receipt:soul-word-journey-v0",
    "slug": "soul-word-journey-v0",
    "canonical_path": "/receipts/soul-word-journey-v0",
    "canonical_url": "https://logoi.health/receipts/soul-word-journey-v0",
    "version": "v0-fixture",
    "pointer_only": true,
    "public_receipt_ready": false,
    "export_ready": false,
    "export_state": "blocked_pending_public_receipt_policy",
    "public_export_url": null,
    "closed_fields": [
      "receipt_body",
      "evidence_crosswalk",
      "public_export_bundle",
      "private_data"
    ],
    "indexability": "noindex,follow"
  },
  "indexability": {
    "declared": "noindex,follow",
    "effective": "noindex,follow",
    "robots": "noindex, nofollow",
    "route_path": "/journeys/soul-word",
    "source_gate": "source_audit_required",
    "blockers": [
      "gate:receipt-policy",
      "gate:hebrew-source-review",
      "gate:greek-nt-source-review",
      "gate:latin-source-review",
      "gate:english-source-review"
    ]
  },
  "states": {
    "pending": [
      "evidence:homer-passage-source-pending",
      "evidence:occurrence:psychas-source-pending",
      "route:journey-soul-word:source_gate_open"
    ],
    "unavailable": [
      "evidence:etymology:authorities-unavailable"
    ],
    "blocked": [
      "evidence:blocker:source-review",
      "gate:receipt-policy",
      "gate:hebrew-source-review",
      "gate:greek-nt-source-review",
      "gate:latin-source-review",
      "gate:english-source-review",
      "receipt:soul-word-journey-v0:public_receipt_export_blocked"
    ],
    "fixture_scope": []
  },
  "response_policy": {
    "pointer_only": true,
    "json_noindex": {
      "header": "X-Robots-Tag",
      "value": "noindex, nofollow"
    },
    "source_ids": "metadata_pointers_only",
    "evidence_ids": "state_and_scope_pointers_only",
    "receipt_pointer": "metadata_pointer_only_no_public_export",
    "primary_text_status": "withheld",
    "translation_status": "withheld",
    "public_receipt_export": "blocked_pending_public_receipt_policy",
    "claim_promotion": "blocked_pending_source_receipt_and_review_gates",
    "mcp": {
      "operational": false,
      "server_url": null,
      "callable_tools": 0,
      "callable_resources": 0,
      "runtime_endpoint": null
    },
    "refused_surfaces": [
      "source_text",
      "translation_text",
      "morphology_claim",
      "etymology_claim",
      "lexical_range_claim",
      "frequency_claim",
      "interpretive_synthesis",
      "model_output",
      "tool_execution",
      "public_receipt_export"
    ],
    "closed_surface_denials": [
      {
        "surface": "source_text",
        "denial_code": "source_text_withheld_until_source_gates_close",
        "current_state": "withheld",
        "allowed_response": "Return source IDs, evidence IDs, route state, source gate, and withheld display status.",
        "denied_response": "Do not quote, reconstruct, summarize, or export primary source text.",
        "closed_objects": [
          "primary content payload",
          "line content payload",
          "text export payload",
          "local snapshot locator"
        ]
      },
      {
        "surface": "translation_text",
        "denial_code": "translation_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return translation status metadata and the relevant source or review gate.",
        "denied_response": "Do not translate, gloss, paraphrase, or synthesize translation text.",
        "closed_objects": [
          "translation content payload",
          "gloss content payload",
          "semantic rendering payload"
        ]
      },
      {
        "surface": "morphology_claim",
        "denial_code": "morphology_claim_unavailable_pending_provider_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return provider provenance, parser metadata, and asserted_features_public false.",
        "denied_response": "Do not assert parsed morphology features or lemma-click morphology facts.",
        "closed_objects": [
          "feature assertion payload",
          "public morphology payload",
          "lemma-click fact payload"
        ]
      },
      {
        "surface": "etymology_claim",
        "denial_code": "etymology_claim_unavailable_pending_authority_review",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return authority-source requirements, confidence state, and pending review gate.",
        "denied_response": "Do not derive roots, cognates, histories, origins, or etymology statements.",
        "closed_objects": [
          "origin statement payload",
          "root assertion payload",
          "cognate assertion payload",
          "history narrative payload"
        ]
      },
      {
        "surface": "lexical_range_claim",
        "denial_code": "lexical_range_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return lexical unavailable state and source pointer requirements.",
        "denied_response": "Do not generate meanings, semantic ranges, synonyms, or cross-language equivalences.",
        "closed_objects": [
          "semantic range payload",
          "meaning synthesis payload",
          "synonym payload",
          "cross-language equivalence payload"
        ]
      },
      {
        "surface": "frequency_claim",
        "denial_code": "frequency_fixture_scope_only",
        "current_state": "fixture_scope_only",
        "allowed_response": "Return count scope warnings and fixture-scope metadata only.",
        "denied_response": "Do not claim corpus-wide frequency, KWIC completeness, collocation, or distribution.",
        "closed_objects": [
          "corpus count payload",
          "complete KWIC payload",
          "collocation payload",
          "distribution payload"
        ]
      },
      {
        "surface": "generated_answer",
        "denial_code": "generated_answer_not_available_in_public_api",
        "current_state": "blocked",
        "allowed_response": "Return pointer-state metadata and blockers as the answer.",
        "denied_response": "Do not return generated research prose, teaching synthesis, model output, or answer bodies.",
        "closed_objects": [
          "generated prose payload",
          "model output payload",
          "teaching synthesis payload",
          "answer body payload"
        ]
      },
      {
        "surface": "public_receipt_export",
        "denial_code": "public_receipt_export_blocked_pending_policy",
        "current_state": "blocked",
        "allowed_response": "Return receipt_pointer with public_receipt_ready false, export_ready false, and blocked export_state.",
        "denied_response": "Do not export receipt bodies, claim maps, content-hash bundles, public bundles, or download URLs.",
        "closed_objects": [
          "receipt body payload",
          "claim map payload",
          "content hash bundle",
          "public bundle",
          "download URL"
        ]
      },
      {
        "surface": "mcp_execution",
        "denial_code": "mcp_documentation_only_not_callable",
        "current_state": "documentation_only_not_callable",
        "allowed_response": "Return /docs/mcp, zero callable tools, zero callable resources, no server URL, and activation gates.",
        "denied_response": "Do not announce, call, simulate, or discover MCP tools, resources, transports, auth, or runtime endpoints.",
        "closed_objects": [
          "server URL",
          "tool inventory",
          "resource inventory",
          "tool-call path",
          "resource-read path",
          "runtime endpoint"
        ]
      }
    ]
  }
}

Readiness Check Skeleton

{
  "request": "GET /api/v1/readiness.json",
  "contract": "read_only_adapter_readiness",
  "expected_header": "X-Robots-Tag: noindex, nofollow",
  "read_first": [
    "contract",
    "status",
    "indexability",
    "states",
    "readiness.adapters",
    "data.supported_operations"
  ],
  "receipt_pointer": null,
  "allowed_result": "adapter readiness metadata only",
  "disabled_operations_remain_disabled": [
    "adapter_execution",
    "source_acquisition",
    "crawl",
    "primary_text_export",
    "translation",
    "morphology",
    "etymology",
    "lexical_claim",
    "frequency_claim",
    "receipt_export"
  ]
}

Agent Cookbook

These examples are pointer-only projections generated from the same read-only fixture payload builders used by the public JSON handlers. Current JSON is noindex, fixture-backed, and cannot return source text, translation, morphology claims, etymology claims, lexical claims, model output, tool execution, or public receipt exports.

Term Lookup

Inspect the fixture-backed term envelope for the Greek psyche row without requesting lexical or philological claims.

Boundary: Read-only, noindex, fixture-backed JSON only; no source text, translation, morphology claim, etymology claim, lexical claim, model output, tool execution, or public receipt export is available.

GET /api/public/terms/greek/psyche.json
{
  "api_version": "v0-fixture-read-only",
  "contract": "read_only_fixture_pending_state",
  "status": "ok",
  "entity_type": "term",
  "entity_id": "term:grc:psyche",
  "canonical_url": "https://logoi.health/words/greek/psyche",
  "source_ids": [
    "source:lexicon:greek-fallback-pending",
    "source:grc:homer-archive-fixture-pending",
    "source:etymology:greek-beekes-2010-pending",
    "source:etymology:greek-chantraine-pending",
    "source:etymology:greek-frisk-pending",
    "source:etymology:greek-lsj-fallback-pending",
    "source:lexicon:hebrew-fallback-pending",
    "source:lexicon:latin-fallback-pending",
    "source:grc:homer-morphology-provider-pending",
    "source:etymology:english-oed-pending",
    "source:etymology:english-med-pending",
    "source:etymology:english-bosworth-toller-pending",
    "source:etymology:english-germanic-authority-pending",
    "source:etymology:hebrew-halot-pending",
    "source:etymology:hebrew-dch-pending",
    "source:etymology:hebrew-bdb-fallback-pending",
    "source:etymology:latin-de-vaan-pending",
    "source:etymology:latin-ernout-meillet-pending",
    "source:etymology:latin-walde-hofmann-pending",
    "source:etymology:latin-lewis-short-fallback-pending",
    "source:receipt:soul-word-journey-v0"
  ],
  "evidence_ids": [
    "evidence:term:state-unavailable",
    "evidence:occurrence:psychas-source-pending",
    "evidence:morphology:psychas-provider-pending",
    "evidence:etymology:authorities-unavailable",
    "evidence:kwic:fixture-scope",
    "evidence:chart:fixture-scope",
    "evidence:journey:not-proven"
  ],
  "receipt_pointer": {
    "id": "receipt:word:grc-psyche-v0",
    "slug": "grc-psyche-v0",
    "canonical_path": "/receipts/soul-word-journey-v0",
    "canonical_url": "https://logoi.health/receipts/soul-word-journey-v0",
    "version": "v0-fixture",
    "pointer_only": true,
    "public_receipt_ready": false,
    "export_ready": false,
    "export_state": "blocked_pending_public_receipt_policy",
    "public_export_url": null,
    "closed_fields": [
      "receipt_body",
      "evidence_crosswalk",
      "public_export_bundle",
      "private_data"
    ],
    "indexability": "noindex,follow"
  },
  "indexability": {
    "declared": "noindex,follow",
    "effective": "noindex,follow",
    "robots": "noindex, nofollow",
    "route_path": "/words/greek/psyche",
    "source_gate": "source_audit_required",
    "blockers": [
      "gate:lexical-source-review",
      "gate:morphology-provider-review",
      "gate:etymology-authority-review"
    ]
  },
  "states": {
    "pending": [
      "evidence:term:state-unavailable",
      "evidence:occurrence:psychas-source-pending",
      "evidence:morphology:psychas-provider-pending",
      "route:word-greek-psyche:source_gate_open"
    ],
    "unavailable": [
      "evidence:etymology:authorities-unavailable"
    ],
    "blocked": [
      "gate:lexical-source-review",
      "gate:morphology-provider-review",
      "gate:etymology-authority-review",
      "receipt:word:grc-psyche-v0:public_receipt_export_blocked"
    ],
    "fixture_scope": [
      "evidence:kwic:fixture-scope",
      "evidence:chart:fixture-scope"
    ]
  },
  "response_policy": {
    "pointer_only": true,
    "json_noindex": {
      "header": "X-Robots-Tag",
      "value": "noindex, nofollow"
    },
    "source_ids": "metadata_pointers_only",
    "evidence_ids": "state_and_scope_pointers_only",
    "receipt_pointer": "metadata_pointer_only_no_public_export",
    "primary_text_status": "withheld",
    "translation_status": "withheld",
    "public_receipt_export": "blocked_pending_public_receipt_policy",
    "claim_promotion": "blocked_pending_source_receipt_and_review_gates",
    "mcp": {
      "operational": false,
      "server_url": null,
      "callable_tools": 0,
      "callable_resources": 0,
      "runtime_endpoint": null
    },
    "refused_surfaces": [
      "source_text",
      "translation_text",
      "morphology_claim",
      "etymology_claim",
      "lexical_range_claim",
      "frequency_claim",
      "interpretive_synthesis",
      "model_output",
      "tool_execution",
      "public_receipt_export"
    ],
    "closed_surface_denials": [
      {
        "surface": "source_text",
        "denial_code": "source_text_withheld_until_source_gates_close",
        "current_state": "withheld",
        "allowed_response": "Return source IDs, evidence IDs, route state, source gate, and withheld display status.",
        "denied_response": "Do not quote, reconstruct, summarize, or export primary source text.",
        "closed_objects": [
          "primary content payload",
          "line content payload",
          "text export payload",
          "local snapshot locator"
        ]
      },
      {
        "surface": "translation_text",
        "denial_code": "translation_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return translation status metadata and the relevant source or review gate.",
        "denied_response": "Do not translate, gloss, paraphrase, or synthesize translation text.",
        "closed_objects": [
          "translation content payload",
          "gloss content payload",
          "semantic rendering payload"
        ]
      },
      {
        "surface": "morphology_claim",
        "denial_code": "morphology_claim_unavailable_pending_provider_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return provider provenance, parser metadata, and asserted_features_public false.",
        "denied_response": "Do not assert parsed morphology features or lemma-click morphology facts.",
        "closed_objects": [
          "feature assertion payload",
          "public morphology payload",
          "lemma-click fact payload"
        ]
      },
      {
        "surface": "etymology_claim",
        "denial_code": "etymology_claim_unavailable_pending_authority_review",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return authority-source requirements, confidence state, and pending review gate.",
        "denied_response": "Do not derive roots, cognates, histories, origins, or etymology statements.",
        "closed_objects": [
          "origin statement payload",
          "root assertion payload",
          "cognate assertion payload",
          "history narrative payload"
        ]
      },
      {
        "surface": "lexical_range_claim",
        "denial_code": "lexical_range_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return lexical unavailable state and source pointer requirements.",
        "denied_response": "Do not generate meanings, semantic ranges, synonyms, or cross-language equivalences.",
        "closed_objects": [
          "semantic range payload",
          "meaning synthesis payload",
          "synonym payload",
          "cross-language equivalence payload"
        ]
      },
      {
        "surface": "frequency_claim",
        "denial_code": "frequency_fixture_scope_only",
        "current_state": "fixture_scope_only",
        "allowed_response": "Return count scope warnings and fixture-scope metadata only.",
        "denied_response": "Do not claim corpus-wide frequency, KWIC completeness, collocation, or distribution.",
        "closed_objects": [
          "corpus count payload",
          "complete KWIC payload",
          "collocation payload",
          "distribution payload"
        ]
      },
      {
        "surface": "generated_answer",
        "denial_code": "generated_answer_not_available_in_public_api",
        "current_state": "blocked",
        "allowed_response": "Return pointer-state metadata and blockers as the answer.",
        "denied_response": "Do not return generated research prose, teaching synthesis, model output, or answer bodies.",
        "closed_objects": [
          "generated prose payload",
          "model output payload",
          "teaching synthesis payload",
          "answer body payload"
        ]
      },
      {
        "surface": "public_receipt_export",
        "denial_code": "public_receipt_export_blocked_pending_policy",
        "current_state": "blocked",
        "allowed_response": "Return receipt_pointer with public_receipt_ready false, export_ready false, and blocked export_state.",
        "denied_response": "Do not export receipt bodies, claim maps, content-hash bundles, public bundles, or download URLs.",
        "closed_objects": [
          "receipt body payload",
          "claim map payload",
          "content hash bundle",
          "public bundle",
          "download URL"
        ]
      },
      {
        "surface": "mcp_execution",
        "denial_code": "mcp_documentation_only_not_callable",
        "current_state": "documentation_only_not_callable",
        "allowed_response": "Return /docs/mcp, zero callable tools, zero callable resources, no server URL, and activation gates.",
        "denied_response": "Do not announce, call, simulate, or discover MCP tools, resources, transports, auth, or runtime endpoints.",
        "closed_objects": [
          "server URL",
          "tool inventory",
          "resource inventory",
          "tool-call path",
          "resource-read path",
          "runtime endpoint"
        ]
      }
    ]
  }
}

Passage Pointer

Inspect the passage envelope for the P0 Iliad fixture without receiving primary source text or translation text.

Boundary: Read-only, noindex, fixture-backed JSON only; no source text, translation, morphology claim, etymology claim, lexical claim, model output, tool execution, or public receipt export is available.

GET /api/public/passages/iliad-1-1-5.json
{
  "api_version": "v0-fixture-read-only",
  "contract": "read_only_fixture_pending_state",
  "status": "ok",
  "entity_type": "passage",
  "entity_id": "passage:iliad-1-1-5",
  "canonical_url": "https://logoi.health/passages/iliad-1-1-5",
  "source_ids": [
    "source:grc:homer-archive-fixture-pending",
    "source:logoi:gloss-draft",
    "source:grc:homer-morphology-provider-pending"
  ],
  "evidence_ids": [
    "evidence:homer-passage-source-pending",
    "evidence:occurrence:psychas-source-pending",
    "evidence:gloss:pending",
    "evidence:kwic:fixture-scope",
    "evidence:morphology:psychas-provider-pending"
  ],
  "receipt_pointer": {
    "id": "receipt:passage:iliad-1-1-5-v0",
    "slug": "iliad-1-1-5-v0",
    "canonical_path": "/receipts/soul-word-journey-v0",
    "canonical_url": "https://logoi.health/receipts/soul-word-journey-v0",
    "version": "v0-fixture",
    "pointer_only": true,
    "public_receipt_ready": false,
    "export_ready": false,
    "export_state": "blocked_pending_public_receipt_policy",
    "public_export_url": null,
    "closed_fields": [
      "receipt_body",
      "evidence_crosswalk",
      "public_export_bundle",
      "private_data"
    ],
    "indexability": "noindex,follow"
  },
  "indexability": {
    "declared": "noindex,follow",
    "effective": "noindex,follow",
    "robots": "noindex, nofollow",
    "route_path": "/passages/iliad-1-1-5",
    "source_gate": "source_audit_required",
    "blockers": []
  },
  "states": {
    "pending": [
      "evidence:homer-passage-source-pending",
      "evidence:occurrence:psychas-source-pending",
      "evidence:gloss:pending",
      "evidence:morphology:psychas-provider-pending"
    ],
    "unavailable": [],
    "blocked": [
      "receipt:passage:iliad-1-1-5-v0:public_receipt_export_blocked"
    ],
    "fixture_scope": [
      "evidence:kwic:fixture-scope"
    ]
  },
  "response_policy": {
    "pointer_only": true,
    "json_noindex": {
      "header": "X-Robots-Tag",
      "value": "noindex, nofollow"
    },
    "source_ids": "metadata_pointers_only",
    "evidence_ids": "state_and_scope_pointers_only",
    "receipt_pointer": "metadata_pointer_only_no_public_export",
    "primary_text_status": "withheld",
    "translation_status": "withheld",
    "public_receipt_export": "blocked_pending_public_receipt_policy",
    "claim_promotion": "blocked_pending_source_receipt_and_review_gates",
    "mcp": {
      "operational": false,
      "server_url": null,
      "callable_tools": 0,
      "callable_resources": 0,
      "runtime_endpoint": null
    },
    "refused_surfaces": [
      "source_text",
      "translation_text",
      "morphology_claim",
      "etymology_claim",
      "lexical_range_claim",
      "frequency_claim",
      "interpretive_synthesis",
      "model_output",
      "tool_execution",
      "public_receipt_export"
    ],
    "closed_surface_denials": [
      {
        "surface": "source_text",
        "denial_code": "source_text_withheld_until_source_gates_close",
        "current_state": "withheld",
        "allowed_response": "Return source IDs, evidence IDs, route state, source gate, and withheld display status.",
        "denied_response": "Do not quote, reconstruct, summarize, or export primary source text.",
        "closed_objects": [
          "primary content payload",
          "line content payload",
          "text export payload",
          "local snapshot locator"
        ]
      },
      {
        "surface": "translation_text",
        "denial_code": "translation_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return translation status metadata and the relevant source or review gate.",
        "denied_response": "Do not translate, gloss, paraphrase, or synthesize translation text.",
        "closed_objects": [
          "translation content payload",
          "gloss content payload",
          "semantic rendering payload"
        ]
      },
      {
        "surface": "morphology_claim",
        "denial_code": "morphology_claim_unavailable_pending_provider_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return provider provenance, parser metadata, and asserted_features_public false.",
        "denied_response": "Do not assert parsed morphology features or lemma-click morphology facts.",
        "closed_objects": [
          "feature assertion payload",
          "public morphology payload",
          "lemma-click fact payload"
        ]
      },
      {
        "surface": "etymology_claim",
        "denial_code": "etymology_claim_unavailable_pending_authority_review",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return authority-source requirements, confidence state, and pending review gate.",
        "denied_response": "Do not derive roots, cognates, histories, origins, or etymology statements.",
        "closed_objects": [
          "origin statement payload",
          "root assertion payload",
          "cognate assertion payload",
          "history narrative payload"
        ]
      },
      {
        "surface": "lexical_range_claim",
        "denial_code": "lexical_range_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return lexical unavailable state and source pointer requirements.",
        "denied_response": "Do not generate meanings, semantic ranges, synonyms, or cross-language equivalences.",
        "closed_objects": [
          "semantic range payload",
          "meaning synthesis payload",
          "synonym payload",
          "cross-language equivalence payload"
        ]
      },
      {
        "surface": "frequency_claim",
        "denial_code": "frequency_fixture_scope_only",
        "current_state": "fixture_scope_only",
        "allowed_response": "Return count scope warnings and fixture-scope metadata only.",
        "denied_response": "Do not claim corpus-wide frequency, KWIC completeness, collocation, or distribution.",
        "closed_objects": [
          "corpus count payload",
          "complete KWIC payload",
          "collocation payload",
          "distribution payload"
        ]
      },
      {
        "surface": "generated_answer",
        "denial_code": "generated_answer_not_available_in_public_api",
        "current_state": "blocked",
        "allowed_response": "Return pointer-state metadata and blockers as the answer.",
        "denied_response": "Do not return generated research prose, teaching synthesis, model output, or answer bodies.",
        "closed_objects": [
          "generated prose payload",
          "model output payload",
          "teaching synthesis payload",
          "answer body payload"
        ]
      },
      {
        "surface": "public_receipt_export",
        "denial_code": "public_receipt_export_blocked_pending_policy",
        "current_state": "blocked",
        "allowed_response": "Return receipt_pointer with public_receipt_ready false, export_ready false, and blocked export_state.",
        "denied_response": "Do not export receipt bodies, claim maps, content-hash bundles, public bundles, or download URLs.",
        "closed_objects": [
          "receipt body payload",
          "claim map payload",
          "content hash bundle",
          "public bundle",
          "download URL"
        ]
      },
      {
        "surface": "mcp_execution",
        "denial_code": "mcp_documentation_only_not_callable",
        "current_state": "documentation_only_not_callable",
        "allowed_response": "Return /docs/mcp, zero callable tools, zero callable resources, no server URL, and activation gates.",
        "denied_response": "Do not announce, call, simulate, or discover MCP tools, resources, transports, auth, or runtime endpoints.",
        "closed_objects": [
          "server URL",
          "tool inventory",
          "resource inventory",
          "tool-call path",
          "resource-read path",
          "runtime endpoint"
        ]
      }
    ]
  },
  "data": {
    "source_display_state": "withheld_in_public_json",
    "translation_display_state": "withheld_pending_translation_review"
  }
}

Source Pointer Metadata

Inspect source metadata pointers attached to the term envelope without requesting a source text export.

Boundary: Source examples are pointer-only metadata; source text and translation text remain withheld.

GET /api/public/terms/greek/psyche.json then read source_ids
{
  "source_ids": [
    "source:lexicon:greek-fallback-pending",
    "source:grc:homer-archive-fixture-pending",
    "source:etymology:greek-beekes-2010-pending",
    "source:etymology:greek-chantraine-pending",
    "source:etymology:greek-frisk-pending",
    "source:etymology:greek-lsj-fallback-pending",
    "source:lexicon:hebrew-fallback-pending",
    "source:lexicon:latin-fallback-pending",
    "source:grc:homer-morphology-provider-pending",
    "source:etymology:english-oed-pending",
    "source:etymology:english-med-pending",
    "source:etymology:english-bosworth-toller-pending",
    "source:etymology:english-germanic-authority-pending",
    "source:etymology:hebrew-halot-pending",
    "source:etymology:hebrew-dch-pending",
    "source:etymology:hebrew-bdb-fallback-pending",
    "source:etymology:latin-de-vaan-pending",
    "source:etymology:latin-ernout-meillet-pending",
    "source:etymology:latin-walde-hofmann-pending",
    "source:etymology:latin-lewis-short-fallback-pending",
    "source:receipt:soul-word-journey-v0"
  ],
  "evidence_ids": [
    "evidence:term:state-unavailable",
    "evidence:occurrence:psychas-source-pending",
    "evidence:morphology:psychas-provider-pending",
    "evidence:etymology:authorities-unavailable",
    "evidence:kwic:fixture-scope",
    "evidence:chart:fixture-scope",
    "evidence:journey:not-proven"
  ],
  "indexability": {
    "declared": "noindex,follow",
    "effective": "noindex,follow",
    "robots": "noindex, nofollow",
    "route_path": "/words/greek/psyche",
    "source_gate": "source_audit_required",
    "blockers": [
      "gate:lexical-source-review",
      "gate:morphology-provider-review",
      "gate:etymology-authority-review"
    ]
  },
  "states": {
    "pending": [
      "evidence:term:state-unavailable",
      "evidence:occurrence:psychas-source-pending",
      "evidence:morphology:psychas-provider-pending",
      "route:word-greek-psyche:source_gate_open"
    ],
    "unavailable": [
      "evidence:etymology:authorities-unavailable"
    ],
    "blocked": [
      "gate:lexical-source-review",
      "gate:morphology-provider-review",
      "gate:etymology-authority-review",
      "receipt:word:grc-psyche-v0:public_receipt_export_blocked"
    ],
    "fixture_scope": [
      "evidence:kwic:fixture-scope",
      "evidence:chart:fixture-scope"
    ]
  },
  "response_policy": {
    "pointer_only": true,
    "json_noindex": {
      "header": "X-Robots-Tag",
      "value": "noindex, nofollow"
    },
    "source_ids": "metadata_pointers_only",
    "evidence_ids": "state_and_scope_pointers_only",
    "receipt_pointer": "metadata_pointer_only_no_public_export",
    "primary_text_status": "withheld",
    "translation_status": "withheld",
    "public_receipt_export": "blocked_pending_public_receipt_policy",
    "claim_promotion": "blocked_pending_source_receipt_and_review_gates",
    "mcp": {
      "operational": false,
      "server_url": null,
      "callable_tools": 0,
      "callable_resources": 0,
      "runtime_endpoint": null
    },
    "refused_surfaces": [
      "source_text",
      "translation_text",
      "morphology_claim",
      "etymology_claim",
      "lexical_range_claim",
      "frequency_claim",
      "interpretive_synthesis",
      "model_output",
      "tool_execution",
      "public_receipt_export"
    ],
    "closed_surface_denials": [
      {
        "surface": "source_text",
        "denial_code": "source_text_withheld_until_source_gates_close",
        "current_state": "withheld",
        "allowed_response": "Return source IDs, evidence IDs, route state, source gate, and withheld display status.",
        "denied_response": "Do not quote, reconstruct, summarize, or export primary source text.",
        "closed_objects": [
          "primary content payload",
          "line content payload",
          "text export payload",
          "local snapshot locator"
        ]
      },
      {
        "surface": "translation_text",
        "denial_code": "translation_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return translation status metadata and the relevant source or review gate.",
        "denied_response": "Do not translate, gloss, paraphrase, or synthesize translation text.",
        "closed_objects": [
          "translation content payload",
          "gloss content payload",
          "semantic rendering payload"
        ]
      },
      {
        "surface": "morphology_claim",
        "denial_code": "morphology_claim_unavailable_pending_provider_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return provider provenance, parser metadata, and asserted_features_public false.",
        "denied_response": "Do not assert parsed morphology features or lemma-click morphology facts.",
        "closed_objects": [
          "feature assertion payload",
          "public morphology payload",
          "lemma-click fact payload"
        ]
      },
      {
        "surface": "etymology_claim",
        "denial_code": "etymology_claim_unavailable_pending_authority_review",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return authority-source requirements, confidence state, and pending review gate.",
        "denied_response": "Do not derive roots, cognates, histories, origins, or etymology statements.",
        "closed_objects": [
          "origin statement payload",
          "root assertion payload",
          "cognate assertion payload",
          "history narrative payload"
        ]
      },
      {
        "surface": "lexical_range_claim",
        "denial_code": "lexical_range_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return lexical unavailable state and source pointer requirements.",
        "denied_response": "Do not generate meanings, semantic ranges, synonyms, or cross-language equivalences.",
        "closed_objects": [
          "semantic range payload",
          "meaning synthesis payload",
          "synonym payload",
          "cross-language equivalence payload"
        ]
      },
      {
        "surface": "frequency_claim",
        "denial_code": "frequency_fixture_scope_only",
        "current_state": "fixture_scope_only",
        "allowed_response": "Return count scope warnings and fixture-scope metadata only.",
        "denied_response": "Do not claim corpus-wide frequency, KWIC completeness, collocation, or distribution.",
        "closed_objects": [
          "corpus count payload",
          "complete KWIC payload",
          "collocation payload",
          "distribution payload"
        ]
      },
      {
        "surface": "generated_answer",
        "denial_code": "generated_answer_not_available_in_public_api",
        "current_state": "blocked",
        "allowed_response": "Return pointer-state metadata and blockers as the answer.",
        "denied_response": "Do not return generated research prose, teaching synthesis, model output, or answer bodies.",
        "closed_objects": [
          "generated prose payload",
          "model output payload",
          "teaching synthesis payload",
          "answer body payload"
        ]
      },
      {
        "surface": "public_receipt_export",
        "denial_code": "public_receipt_export_blocked_pending_policy",
        "current_state": "blocked",
        "allowed_response": "Return receipt_pointer with public_receipt_ready false, export_ready false, and blocked export_state.",
        "denied_response": "Do not export receipt bodies, claim maps, content-hash bundles, public bundles, or download URLs.",
        "closed_objects": [
          "receipt body payload",
          "claim map payload",
          "content hash bundle",
          "public bundle",
          "download URL"
        ]
      },
      {
        "surface": "mcp_execution",
        "denial_code": "mcp_documentation_only_not_callable",
        "current_state": "documentation_only_not_callable",
        "allowed_response": "Return /docs/mcp, zero callable tools, zero callable resources, no server URL, and activation gates.",
        "denied_response": "Do not announce, call, simulate, or discover MCP tools, resources, transports, auth, or runtime endpoints.",
        "closed_objects": [
          "server URL",
          "tool inventory",
          "resource inventory",
          "tool-call path",
          "resource-read path",
          "runtime endpoint"
        ]
      }
    ]
  },
  "boundary": "Source and evidence IDs expose metadata only as pointers; they do not expose source text, translation text, or proof-ready claims."
}

Reference Parse Unavailable State

Parse a recognized Iliad reference outside the first-slice passage fixture and preserve the unavailable evidence state.

Boundary: Read-only, noindex, fixture-backed JSON only; no source text, translation, morphology claim, etymology claim, lexical claim, model output, tool execution, or public receipt export is available.

GET /api/public/references/parse.json?ref=Iliad%201.6-10
{
  "api_version": "v0-fixture-read-only",
  "contract": "read_only_fixture_pending_state",
  "status": "ok",
  "entity_type": "reference",
  "entity_id": null,
  "canonical_url": "https://logoi.health/texts/greek/homer/iliad",
  "source_ids": [
    "source:grc:homer-archive-fixture-pending"
  ],
  "evidence_ids": [
    "evidence:blocker:source-review"
  ],
  "receipt_pointer": null,
  "indexability": {
    "declared": "noindex,follow",
    "effective": "noindex,follow",
    "robots": "noindex, nofollow",
    "route_path": "/texts/greek/homer/iliad",
    "source_gate": "source_audit_required",
    "blockers": [
      "gate:homer-source-review",
      "gate:homer-license-review",
      "gate:homer-checksum"
    ]
  },
  "states": {
    "pending": [
      "route:text-greek-homer-iliad:source_gate_open"
    ],
    "unavailable": [
      "reference_parser:fixture_passage_unavailable"
    ],
    "blocked": [
      "evidence:blocker:source-review",
      "gate:homer-source-review",
      "gate:homer-license-review",
      "gate:homer-checksum"
    ],
    "fixture_scope": []
  },
  "response_policy": {
    "pointer_only": true,
    "json_noindex": {
      "header": "X-Robots-Tag",
      "value": "noindex, nofollow"
    },
    "source_ids": "metadata_pointers_only",
    "evidence_ids": "state_and_scope_pointers_only",
    "receipt_pointer": "metadata_pointer_only_no_public_export",
    "primary_text_status": "withheld",
    "translation_status": "withheld",
    "public_receipt_export": "blocked_pending_public_receipt_policy",
    "claim_promotion": "blocked_pending_source_receipt_and_review_gates",
    "mcp": {
      "operational": false,
      "server_url": null,
      "callable_tools": 0,
      "callable_resources": 0,
      "runtime_endpoint": null
    },
    "refused_surfaces": [
      "source_text",
      "translation_text",
      "morphology_claim",
      "etymology_claim",
      "lexical_range_claim",
      "frequency_claim",
      "interpretive_synthesis",
      "model_output",
      "tool_execution",
      "public_receipt_export"
    ],
    "closed_surface_denials": [
      {
        "surface": "source_text",
        "denial_code": "source_text_withheld_until_source_gates_close",
        "current_state": "withheld",
        "allowed_response": "Return source IDs, evidence IDs, route state, source gate, and withheld display status.",
        "denied_response": "Do not quote, reconstruct, summarize, or export primary source text.",
        "closed_objects": [
          "primary content payload",
          "line content payload",
          "text export payload",
          "local snapshot locator"
        ]
      },
      {
        "surface": "translation_text",
        "denial_code": "translation_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return translation status metadata and the relevant source or review gate.",
        "denied_response": "Do not translate, gloss, paraphrase, or synthesize translation text.",
        "closed_objects": [
          "translation content payload",
          "gloss content payload",
          "semantic rendering payload"
        ]
      },
      {
        "surface": "morphology_claim",
        "denial_code": "morphology_claim_unavailable_pending_provider_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return provider provenance, parser metadata, and asserted_features_public false.",
        "denied_response": "Do not assert parsed morphology features or lemma-click morphology facts.",
        "closed_objects": [
          "feature assertion payload",
          "public morphology payload",
          "lemma-click fact payload"
        ]
      },
      {
        "surface": "etymology_claim",
        "denial_code": "etymology_claim_unavailable_pending_authority_review",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return authority-source requirements, confidence state, and pending review gate.",
        "denied_response": "Do not derive roots, cognates, histories, origins, or etymology statements.",
        "closed_objects": [
          "origin statement payload",
          "root assertion payload",
          "cognate assertion payload",
          "history narrative payload"
        ]
      },
      {
        "surface": "lexical_range_claim",
        "denial_code": "lexical_range_unavailable_pending_audit",
        "current_state": "unavailable_pending_audit",
        "allowed_response": "Return lexical unavailable state and source pointer requirements.",
        "denied_response": "Do not generate meanings, semantic ranges, synonyms, or cross-language equivalences.",
        "closed_objects": [
          "semantic range payload",
          "meaning synthesis payload",
          "synonym payload",
          "cross-language equivalence payload"
        ]
      },
      {
        "surface": "frequency_claim",
        "denial_code": "frequency_fixture_scope_only",
        "current_state": "fixture_scope_only",
        "allowed_response": "Return count scope warnings and fixture-scope metadata only.",
        "denied_response": "Do not claim corpus-wide frequency, KWIC completeness, collocation, or distribution.",
        "closed_objects": [
          "corpus count payload",
          "complete KWIC payload",
          "collocation payload",
          "distribution payload"
        ]
      },
      {
        "surface": "generated_answer",
        "denial_code": "generated_answer_not_available_in_public_api",
        "current_state": "blocked",
        "allowed_response": "Return pointer-state metadata and blockers as the answer.",
        "denied_response": "Do not return generated research prose, teaching synthesis, model output, or answer bodies.",
        "closed_objects": [
          "generated prose payload",
          "model output payload",
          "teaching synthesis payload",
          "answer body payload"
        ]
      },
      {
        "surface": "public_receipt_export",
        "denial_code": "public_receipt_export_blocked_pending_policy",
        "current_state": "blocked",
        "allowed_response": "Return receipt_pointer with public_receipt_ready false, export_ready false, and blocked export_state.",
        "denied_response": "Do not export receipt bodies, claim maps, content-hash bundles, public bundles, or download URLs.",
        "closed_objects": [
          "receipt body payload",
          "claim map payload",
          "content hash bundle",
          "public bundle",
          "download URL"
        ]
      },
      {
        "surface": "mcp_execution",
        "denial_code": "mcp_documentation_only_not_callable",
        "current_state": "documentation_only_not_callable",
        "allowed_response": "Return /docs/mcp, zero callable tools, zero callable resources, no server URL, and activation gates.",
        "denied_response": "Do not announce, call, simulate, or discover MCP tools, resources, transports, auth, or runtime endpoints.",
        "closed_objects": [
          "server URL",
          "tool inventory",
          "resource inventory",
          "tool-call path",
          "resource-read path",
          "runtime endpoint"
        ]
      }
    ]
  },
  "data": {
    "input": "Iliad 1.6-10",
    "normalized_reference": "Iliad 1.6-10",
    "parse_status": "recognized_evidence_unavailable",
    "recognized_work_id": "work:grc:homer:iliad",
    "matched_passage_id": null
  }
}

Receipt Pointer Inspection

Inspect the receipt pointer and blocked export state without exporting a public receipt.

Boundary: Read-only, noindex, fixture-backed JSON only; no source text, translation, morphology claim, etymology claim, lexical claim, model output, tool execution, or public receipt export is available.

GET /api/public/receipts/soul-word-journey-v0.json
{
  "receipt_pointer": {
    "id": "receipt:soul-word-journey-v0",
    "slug": "soul-word-journey-v0",
    "canonical_path": "/receipts/soul-word-journey-v0",
    "canonical_url": "https://logoi.health/receipts/soul-word-journey-v0",
    "version": "v0-fixture",
    "pointer_only": true,
    "public_receipt_ready": false,
    "export_ready": false,
    "export_state": "blocked_pending_public_receipt_policy",
    "public_export_url": null,
    "closed_fields": [
      "receipt_body",
      "evidence_crosswalk",
      "public_export_bundle",
      "private_data"
    ],
    "indexability": "noindex,follow"
  },
  "source_ids": [
    "source:grc:homer-archive-fixture-pending",
    "source:receipt:soul-word-journey-v0",
    "source:etymology:english-oed-pending",
    "source:etymology:english-med-pending",
    "source:etymology:english-bosworth-toller-pending",
    "source:etymology:english-germanic-authority-pending",
    "source:etymology:hebrew-halot-pending",
    "source:etymology:hebrew-dch-pending",
    "source:etymology:hebrew-bdb-fallback-pending",
    "source:etymology:greek-beekes-2010-pending",
    "source:etymology:greek-chantraine-pending",
    "source:etymology:greek-frisk-pending",
    "source:etymology:greek-lsj-fallback-pending",
    "source:etymology:latin-de-vaan-pending",
    "source:etymology:latin-ernout-meillet-pending",
    "source:etymology:latin-walde-hofmann-pending",
    "source:etymology:latin-lewis-short-fallback-pending"
  ],
  "evidence_ids": [
    "evidence:journey:not-proven",
    "evidence:homer-passage-source-pending",
    "evidence:occurrence:psychas-source-pending",
    "evidence:etymology:authorities-unavailable",
    "evidence:blocker:source-review"
  ],
  "indexability": {
    "declared": "noindex,follow",
    "effective": "noindex,follow",
    "robots": "noindex, nofollow",
    "route_path": "/journeys/soul-word",
    "source_gate": "source_audit_required",
    "blockers": [
      "gate:receipt-policy",
      "gate:hebrew-source-review",
      "gate:greek-nt-source-review",
      "gate:latin-source-review",
      "gate:english-source-review"
    ]
  },
  "states": {
    "pending": [
      "evidence:homer-passage-source-pending",
      "evidence:occurrence:psychas-source-pending",
      "route:journey-soul-word:source_gate_open"
    ],
    "unavailable": [
      "evidence:etymology:authorities-unavailable"
    ],
    "blocked": [
      "evidence:blocker:source-review",
      "gate:receipt-policy",
      "gate:hebrew-source-review",
      "gate:greek-nt-source-review",
      "gate:latin-source-review",
      "gate:english-source-review",
      "receipt:soul-word-journey-v0:public_receipt_export_blocked"
    ],
    "fixture_scope": []
  }
}

Closed Claim Surface Refusal

Show how an agent should refuse source text, translation, morphology, etymology, lexical, or receipt-export requests.

Boundary: Closed claim surfaces remain refusals even when a fixture row contains metadata about the pending object class.

NO RUNTIME ROUTE. Agent-side refusal contract for closed claim surfaces.
[
  {
    "id": "source_text_refusal",
    "claimFamily": "source_text",
    "requestedSurface": "Source Text",
    "attemptedRequest": "Agent asks for the Greek text behind /api/public/passages/iliad-1-1-5.json.",
    "response": "{\n  \"contract\": \"closed_claim_surface_refusal\",\n  \"status\": \"refused\",\n  \"claim_family\": \"source_text\",\n  \"requested_surface\": \"source_text\",\n  \"reason\": \"Primary text is withheld until the source, license, checksum, and passage gates close.\",\n  \"api_response_status\": \"documentation_only_refusal_not_runtime_route\",\n  \"endpoint_policy\": \"No public JSON endpoint may add source text fields or source text exports in this contract.\",\n  \"mcp_policy\": \"No future MCP resource may expose source text until the source-text display gate is explicitly closed.\",\n  \"allowed_response\": \"Return the fixture envelope, source IDs, evidence IDs, receipt pointer, indexability, states, and blockers.\",\n  \"closed_fields_remain_absent\": [\n    \"source_text\",\n    \"translation_text\",\n    \"parsed_features\",\n    \"etymology_statement\",\n    \"lexical_range_claim\",\n    \"frequency_claim\",\n    \"public_receipt_export\"\n  ]\n}"
  },
  {
    "id": "translation_refusal",
    "claimFamily": "translation_text",
    "requestedSurface": "Translation Text",
    "attemptedRequest": "Agent asks for a translation of Iliad 1.1-5 from the public API.",
    "response": "{\n  \"contract\": \"closed_claim_surface_refusal\",\n  \"status\": \"refused\",\n  \"claim_family\": \"translation_text\",\n  \"requested_surface\": \"translation_text\",\n  \"reason\": \"Translation text is unavailable_pending_audit and must not be generated from memory.\",\n  \"api_response_status\": \"documentation_only_refusal_not_runtime_route\",\n  \"endpoint_policy\": \"Translation payloads remain status/null metadata until a reviewed translation policy exists.\",\n  \"mcp_policy\": \"Future MCP must mirror the unavailable translation state and must not synthesize a translation.\",\n  \"allowed_response\": \"Return the fixture envelope and the translation unavailable state without producing a translation.\",\n  \"closed_fields_remain_absent\": [\n    \"source_text\",\n    \"translation_text\",\n    \"parsed_features\",\n    \"etymology_statement\",\n    \"lexical_range_claim\",\n    \"frequency_claim\",\n    \"public_receipt_export\"\n  ]\n}"
  },
  {
    "id": "morphology_refusal",
    "claimFamily": "morphology",
    "requestedSurface": "Morphology",
    "attemptedRequest": "Agent asks for parsed morphology features for psyche.",
    "response": "{\n  \"contract\": \"closed_claim_surface_refusal\",\n  \"status\": \"refused\",\n  \"claim_family\": \"morphology\",\n  \"requested_surface\": \"morphology_claim\",\n  \"reason\": \"Morphology providers are metadata-only here; asserted_features_public remains false.\",\n  \"api_response_status\": \"documentation_only_refusal_not_runtime_route\",\n  \"endpoint_policy\": \"Public JSON may name provider metadata but not expose asserted morphology features.\",\n  \"mcp_policy\": \"Future MCP resources must not promote provider metadata into parsed morphology facts.\",\n  \"allowed_response\": \"Return provider provenance metadata and the pending audit state without parsed feature assertions.\",\n  \"closed_fields_remain_absent\": [\n    \"source_text\",\n    \"translation_text\",\n    \"parsed_features\",\n    \"etymology_statement\",\n    \"lexical_range_claim\",\n    \"frequency_claim\",\n    \"public_receipt_export\"\n  ]\n}"
  },
  {
    "id": "etymology_refusal",
    "claimFamily": "etymology",
    "requestedSurface": "Etymology",
    "attemptedRequest": "Agent asks for an etymology statement for psyche.",
    "response": "{\n  \"contract\": \"closed_claim_surface_refusal\",\n  \"status\": \"refused\",\n  \"claim_family\": \"etymology\",\n  \"requested_surface\": \"etymology_claim\",\n  \"reason\": \"Etymology statements stay unavailable until authority sources and review gates close.\",\n  \"api_response_status\": \"documentation_only_refusal_not_runtime_route\",\n  \"endpoint_policy\": \"Public JSON may expose etymology gate metadata but no etymology claim text.\",\n  \"mcp_policy\": \"Future MCP resources must keep etymology as pending metadata until a reviewed claim family exists.\",\n  \"allowed_response\": \"Return authority-source requirements and pending status without an etymology statement.\",\n  \"closed_fields_remain_absent\": [\n    \"source_text\",\n    \"translation_text\",\n    \"parsed_features\",\n    \"etymology_statement\",\n    \"lexical_range_claim\",\n    \"frequency_claim\",\n    \"public_receipt_export\"\n  ]\n}"
  },
  {
    "id": "lexical_refusal",
    "claimFamily": "lexical_range",
    "requestedSurface": "Lexical Range",
    "attemptedRequest": "Agent asks for a public lexical range claim for psyche.",
    "response": "{\n  \"contract\": \"closed_claim_surface_refusal\",\n  \"status\": \"refused\",\n  \"claim_family\": \"lexical_range\",\n  \"requested_surface\": \"lexical_range_claim\",\n  \"reason\": \"Lexical range is unavailable_pending_audit and public_claims remains false.\",\n  \"api_response_status\": \"documentation_only_refusal_not_runtime_route\",\n  \"endpoint_policy\": \"Public JSON may expose lexical range unavailable state only.\",\n  \"mcp_policy\": \"Future MCP resources must not turn unavailable lexical metadata into a lexical range claim.\",\n  \"allowed_response\": \"Return the unavailable lexical range state and source pointers without lexical synthesis.\",\n  \"closed_fields_remain_absent\": [\n    \"source_text\",\n    \"translation_text\",\n    \"parsed_features\",\n    \"etymology_statement\",\n    \"lexical_range_claim\",\n    \"frequency_claim\",\n    \"public_receipt_export\"\n  ]\n}"
  },
  {
    "id": "frequency_refusal",
    "claimFamily": "frequency",
    "requestedSurface": "Frequency",
    "attemptedRequest": "Agent asks how often psyche occurs across the corpus.",
    "response": "{\n  \"contract\": \"closed_claim_surface_refusal\",\n  \"status\": \"refused\",\n  \"claim_family\": \"frequency\",\n  \"requested_surface\": \"frequency_claim\",\n  \"reason\": \"Corpus frequency is fixture-scope only; full-corpus counts are not available in this branch.\",\n  \"api_response_status\": \"documentation_only_refusal_not_runtime_route\",\n  \"endpoint_policy\": \"Public JSON may expose count_scope metadata but not corpus-wide frequency claims.\",\n  \"mcp_policy\": \"Future MCP resources must preserve fixture-scope count warnings and must not infer corpus frequency.\",\n  \"allowed_response\": \"Return count scope and fixture warning metadata without claiming a corpus frequency.\",\n  \"closed_fields_remain_absent\": [\n    \"source_text\",\n    \"translation_text\",\n    \"parsed_features\",\n    \"etymology_statement\",\n    \"lexical_range_claim\",\n    \"frequency_claim\",\n    \"public_receipt_export\"\n  ]\n}"
  },
  {
    "id": "receipt_export_refusal",
    "claimFamily": "receipt_export",
    "requestedSurface": "Receipt Export",
    "attemptedRequest": "Agent asks to export the soul-word journey receipt.",
    "response": "{\n  \"contract\": \"closed_claim_surface_refusal\",\n  \"status\": \"refused\",\n  \"claim_family\": \"receipt_export\",\n  \"requested_surface\": \"public_receipt_export\",\n  \"reason\": \"Receipts are pointer-only; public_receipt_ready is false and export_state is blocked_pending_public_receipt_policy.\",\n  \"api_response_status\": \"documentation_only_refusal_not_runtime_route\",\n  \"endpoint_policy\": \"Public JSON may expose receipt pointers but no export-ready receipt body, content hash, or claim map.\",\n  \"mcp_policy\": \"Future MCP receipt resources must remain pointer-only until the public receipt export policy passes.\",\n  \"allowed_response\": \"Return receipt pointer, scope, source IDs, evidence IDs, and blocked export state.\",\n  \"closed_fields_remain_absent\": [\n    \"source_text\",\n    \"translation_text\",\n    \"parsed_features\",\n    \"etymology_statement\",\n    \"lexical_range_claim\",\n    \"frequency_claim\",\n    \"public_receipt_export\"\n  ]\n}"
  }
]

Future MCP Resource Envelope

Show the envelope a future MCP resource would need to mirror after a server and manifest are explicitly authorized.

Boundary: MCP is non-operational in this branch: zero tools, zero callable resources, no server URL, no discovery manifest, and no runtime endpoint.

NO CALLABLE MCP REQUEST EXISTS. Reserved design target only: logoi://term/greek/psyche
{
  "mcp_status": "documentation_only",
  "operational": false,
  "server_url": null,
  "tools": [],
  "resources": [],
  "callable_tools": 0,
  "callable_resources": 0,
  "contract_hard_stops": [
    {
      "id": "no_model_calls",
      "label": "No model calls",
      "enforced": true,
      "rule": "Future MCP resources must mirror fixture payloads only; no MCP tool may call an LLM, embedding model, reranker, retrieval service, or remote generation service."
    },
    {
      "id": "no_mcp_runtime",
      "label": "No MCP runtime",
      "enforced": true,
      "rule": "MCP is documentation-only in this branch: no server URL, discovery manifest, tool registry, resource registry, or runtime endpoint exists."
    },
    {
      "id": "no_source_text",
      "label": "No source text",
      "enforced": true,
      "rule": "Future MCP resources must expose source and evidence pointers only until source-text and translation-text display gates are explicitly closed."
    },
    {
      "id": "no_export_ready_receipts",
      "label": "No export-ready receipts",
      "enforced": true,
      "rule": "Future MCP receipt resources may reference receipt pointers only until the public receipt export policy passes."
    },
    {
      "id": "no_public_ready_claims",
      "label": "No public-ready claims",
      "enforced": true,
      "rule": "Future MCP resources must carry the same pending-state envelope and must not upgrade fixture rows into public-ready claims."
    }
  ],
  "candidate_resource_uri": "logoi://term/greek/psyche",
  "mirrors_public_api": "/api/public/terms/greek/psyche.json",
  "required_envelope": {
    "source_ids": [
      "source:lexicon:greek-fallback-pending",
      "source:grc:homer-archive-fixture-pending",
      "source:etymology:greek-beekes-2010-pending",
      "source:etymology:greek-chantraine-pending",
      "source:etymology:greek-frisk-pending",
      "source:etymology:greek-lsj-fallback-pending",
      "source:lexicon:hebrew-fallback-pending",
      "source:lexicon:latin-fallback-pending",
      "source:grc:homer-morphology-provider-pending",
      "source:etymology:english-oed-pending",
      "source:etymology:english-med-pending",
      "source:etymology:english-bosworth-toller-pending",
      "source:etymology:english-germanic-authority-pending",
      "source:etymology:hebrew-halot-pending",
      "source:etymology:hebrew-dch-pending",
      "source:etymology:hebrew-bdb-fallback-pending",
      "source:etymology:latin-de-vaan-pending",
      "source:etymology:latin-ernout-meillet-pending",
      "source:etymology:latin-walde-hofmann-pending",
      "source:etymology:latin-lewis-short-fallback-pending",
      "source:receipt:soul-word-journey-v0"
    ],
    "evidence_ids": [
      "evidence:term:state-unavailable",
      "evidence:occurrence:psychas-source-pending",
      "evidence:morphology:psychas-provider-pending",
      "evidence:etymology:authorities-unavailable",
      "evidence:kwic:fixture-scope",
      "evidence:chart:fixture-scope",
      "evidence:journey:not-proven"
    ],
    "receipt_pointer": {
      "id": "receipt:word:grc-psyche-v0",
      "slug": "grc-psyche-v0",
      "canonical_path": "/receipts/soul-word-journey-v0",
      "canonical_url": "https://logoi.health/receipts/soul-word-journey-v0",
      "version": "v0-fixture",
      "pointer_only": true,
      "public_receipt_ready": false,
      "export_ready": false,
      "export_state": "blocked_pending_public_receipt_policy",
      "public_export_url": null,
      "closed_fields": [
        "receipt_body",
        "evidence_crosswalk",
        "public_export_bundle",
        "private_data"
      ],
      "indexability": "noindex,follow"
    },
    "indexability": {
      "declared": "noindex,follow",
      "effective": "noindex,follow",
      "robots": "noindex, nofollow",
      "route_path": "/words/greek/psyche",
      "source_gate": "source_audit_required",
      "blockers": [
        "gate:lexical-source-review",
        "gate:morphology-provider-review",
        "gate:etymology-authority-review"
      ]
    },
    "states": {
      "pending": [
        "evidence:term:state-unavailable",
        "evidence:occurrence:psychas-source-pending",
        "evidence:morphology:psychas-provider-pending",
        "route:word-greek-psyche:source_gate_open"
      ],
      "unavailable": [
        "evidence:etymology:authorities-unavailable"
      ],
      "blocked": [
        "gate:lexical-source-review",
        "gate:morphology-provider-review",
        "gate:etymology-authority-review",
        "receipt:word:grc-psyche-v0:public_receipt_export_blocked"
      ],
      "fixture_scope": [
        "evidence:kwic:fixture-scope",
        "evidence:chart:fixture-scope"
      ]
    },
    "response_policy": {
      "pointer_only": true,
      "json_noindex": {
        "header": "X-Robots-Tag",
        "value": "noindex, nofollow"
      },
      "source_ids": "metadata_pointers_only",
      "evidence_ids": "state_and_scope_pointers_only",
      "receipt_pointer": "metadata_pointer_only_no_public_export",
      "primary_text_status": "withheld",
      "translation_status": "withheld",
      "public_receipt_export": "blocked_pending_public_receipt_policy",
      "claim_promotion": "blocked_pending_source_receipt_and_review_gates",
      "mcp": {
        "operational": false,
        "server_url": null,
        "callable_tools": 0,
        "callable_resources": 0,
        "runtime_endpoint": null
      },
      "refused_surfaces": [
        "source_text",
        "translation_text",
        "morphology_claim",
        "etymology_claim",
        "lexical_range_claim",
        "frequency_claim",
        "interpretive_synthesis",
        "model_output",
        "tool_execution",
        "public_receipt_export"
      ],
      "closed_surface_denials": [
        {
          "surface": "source_text",
          "denial_code": "source_text_withheld_until_source_gates_close",
          "current_state": "withheld",
          "allowed_response": "Return source IDs, evidence IDs, route state, source gate, and withheld display status.",
          "denied_response": "Do not quote, reconstruct, summarize, or export primary source text.",
          "closed_objects": [
            "primary content payload",
            "line content payload",
            "text export payload",
            "local snapshot locator"
          ]
        },
        {
          "surface": "translation_text",
          "denial_code": "translation_unavailable_pending_audit",
          "current_state": "unavailable_pending_audit",
          "allowed_response": "Return translation status metadata and the relevant source or review gate.",
          "denied_response": "Do not translate, gloss, paraphrase, or synthesize translation text.",
          "closed_objects": [
            "translation content payload",
            "gloss content payload",
            "semantic rendering payload"
          ]
        },
        {
          "surface": "morphology_claim",
          "denial_code": "morphology_claim_unavailable_pending_provider_audit",
          "current_state": "unavailable_pending_audit",
          "allowed_response": "Return provider provenance, parser metadata, and asserted_features_public false.",
          "denied_response": "Do not assert parsed morphology features or lemma-click morphology facts.",
          "closed_objects": [
            "feature assertion payload",
            "public morphology payload",
            "lemma-click fact payload"
          ]
        },
        {
          "surface": "etymology_claim",
          "denial_code": "etymology_claim_unavailable_pending_authority_review",
          "current_state": "unavailable_pending_audit",
          "allowed_response": "Return authority-source requirements, confidence state, and pending review gate.",
          "denied_response": "Do not derive roots, cognates, histories, origins, or etymology statements.",
          "closed_objects": [
            "origin statement payload",
            "root assertion payload",
            "cognate assertion payload",
            "history narrative payload"
          ]
        },
        {
          "surface": "lexical_range_claim",
          "denial_code": "lexical_range_unavailable_pending_audit",
          "current_state": "unavailable_pending_audit",
          "allowed_response": "Return lexical unavailable state and source pointer requirements.",
          "denied_response": "Do not generate meanings, semantic ranges, synonyms, or cross-language equivalences.",
          "closed_objects": [
            "semantic range payload",
            "meaning synthesis payload",
            "synonym payload",
            "cross-language equivalence payload"
          ]
        },
        {
          "surface": "frequency_claim",
          "denial_code": "frequency_fixture_scope_only",
          "current_state": "fixture_scope_only",
          "allowed_response": "Return count scope warnings and fixture-scope metadata only.",
          "denied_response": "Do not claim corpus-wide frequency, KWIC completeness, collocation, or distribution.",
          "closed_objects": [
            "corpus count payload",
            "complete KWIC payload",
            "collocation payload",
            "distribution payload"
          ]
        },
        {
          "surface": "generated_answer",
          "denial_code": "generated_answer_not_available_in_public_api",
          "current_state": "blocked",
          "allowed_response": "Return pointer-state metadata and blockers as the answer.",
          "denied_response": "Do not return generated research prose, teaching synthesis, model output, or answer bodies.",
          "closed_objects": [
            "generated prose payload",
            "model output payload",
            "teaching synthesis payload",
            "answer body payload"
          ]
        },
        {
          "surface": "public_receipt_export",
          "denial_code": "public_receipt_export_blocked_pending_policy",
          "current_state": "blocked",
          "allowed_response": "Return receipt_pointer with public_receipt_ready false, export_ready false, and blocked export_state.",
          "denied_response": "Do not export receipt bodies, claim maps, content-hash bundles, public bundles, or download URLs.",
          "closed_objects": [
            "receipt body payload",
            "claim map payload",
            "content hash bundle",
            "public bundle",
            "download URL"
          ]
        },
        {
          "surface": "mcp_execution",
          "denial_code": "mcp_documentation_only_not_callable",
          "current_state": "documentation_only_not_callable",
          "allowed_response": "Return /docs/mcp, zero callable tools, zero callable resources, no server URL, and activation gates.",
          "denied_response": "Do not announce, call, simulate, or discover MCP tools, resources, transports, auth, or runtime endpoints.",
          "closed_objects": [
            "server URL",
            "tool inventory",
            "resource inventory",
            "tool-call path",
            "resource-read path",
            "runtime endpoint"
          ]
        }
      ]
    }
  }
}

Receipt Pointer Contract

Receipt pointers are navigation and state metadata. They do not authorize a public receipt export, claim map reconstruction, or private data bundle.

{
  "request": "GET /api/public/receipts/soul-word-journey-v0.json",
  "receipt_pointer": {
    "pointer_only": true,
    "public_receipt_ready": false,
    "export_ready": false,
    "export_state": "blocked_pending_public_receipt_policy",
    "public_export_url": null,
    "closed_fields": [
      "receipt_body",
      "evidence_crosswalk",
      "public_export_bundle",
      "private_data"
    ]
  },
  "agent_action": "Link to the canonical receipt route as a state pointer only. Do not export, reconstruct, or summarize a public receipt body."
}

Closed Claim Refusals

A request for a closed claim surface should resolve to a refusal state, not a guessed answer. These refusal examples are documentation artifacts, not runtime routes.

Family API Expectation MCP Expectation
Source Text
source_text
No public JSON endpoint may add source text fields or source text exports in this contract. No future MCP resource may expose source text until the source-text display gate is explicitly closed.
Translation Text
translation_text
Translation payloads remain status/null metadata until a reviewed translation policy exists. Future MCP must mirror the unavailable translation state and must not synthesize a translation.
Morphology
morphology_claim
Public JSON may name provider metadata but not expose asserted morphology features. Future MCP resources must not promote provider metadata into parsed morphology facts.
Etymology
etymology_claim
Public JSON may expose etymology gate metadata but no etymology claim text. Future MCP resources must keep etymology as pending metadata until a reviewed claim family exists.
Lexical Range
lexical_range_claim
Public JSON may expose lexical range unavailable state only. Future MCP resources must not turn unavailable lexical metadata into a lexical range claim.
Frequency
frequency_claim
Public JSON may expose count_scope metadata but not corpus-wide frequency claims. Future MCP resources must preserve fixture-scope count warnings and must not infer corpus frequency.
Receipt Export
public_receipt_export
Public JSON may expose receipt pointers but no export-ready receipt body, content hash, or claim map. Future MCP receipt resources must remain pointer-only until the public receipt export policy passes.
Surface Attempt Refusal
Source Text Agent asks for the Greek text behind /api/public/passages/iliad-1-1-5.json.
{
  "contract": "closed_claim_surface_refusal",
  "status": "refused",
  "claim_family": "source_text",
  "requested_surface": "source_text",
  "reason": "Primary text is withheld until the source, license, checksum, and passage gates close.",
  "api_response_status": "documentation_only_refusal_not_runtime_route",
  "endpoint_policy": "No public JSON endpoint may add source text fields or source text exports in this contract.",
  "mcp_policy": "No future MCP resource may expose source text until the source-text display gate is explicitly closed.",
  "allowed_response": "Return the fixture envelope, source IDs, evidence IDs, receipt pointer, indexability, states, and blockers.",
  "closed_fields_remain_absent": [
    "source_text",
    "translation_text",
    "parsed_features",
    "etymology_statement",
    "lexical_range_claim",
    "frequency_claim",
    "public_receipt_export"
  ]
}
Translation Text Agent asks for a translation of Iliad 1.1-5 from the public API.
{
  "contract": "closed_claim_surface_refusal",
  "status": "refused",
  "claim_family": "translation_text",
  "requested_surface": "translation_text",
  "reason": "Translation text is unavailable_pending_audit and must not be generated from memory.",
  "api_response_status": "documentation_only_refusal_not_runtime_route",
  "endpoint_policy": "Translation payloads remain status/null metadata until a reviewed translation policy exists.",
  "mcp_policy": "Future MCP must mirror the unavailable translation state and must not synthesize a translation.",
  "allowed_response": "Return the fixture envelope and the translation unavailable state without producing a translation.",
  "closed_fields_remain_absent": [
    "source_text",
    "translation_text",
    "parsed_features",
    "etymology_statement",
    "lexical_range_claim",
    "frequency_claim",
    "public_receipt_export"
  ]
}
Morphology Agent asks for parsed morphology features for psyche.
{
  "contract": "closed_claim_surface_refusal",
  "status": "refused",
  "claim_family": "morphology",
  "requested_surface": "morphology_claim",
  "reason": "Morphology providers are metadata-only here; asserted_features_public remains false.",
  "api_response_status": "documentation_only_refusal_not_runtime_route",
  "endpoint_policy": "Public JSON may name provider metadata but not expose asserted morphology features.",
  "mcp_policy": "Future MCP resources must not promote provider metadata into parsed morphology facts.",
  "allowed_response": "Return provider provenance metadata and the pending audit state without parsed feature assertions.",
  "closed_fields_remain_absent": [
    "source_text",
    "translation_text",
    "parsed_features",
    "etymology_statement",
    "lexical_range_claim",
    "frequency_claim",
    "public_receipt_export"
  ]
}
Etymology Agent asks for an etymology statement for psyche.
{
  "contract": "closed_claim_surface_refusal",
  "status": "refused",
  "claim_family": "etymology",
  "requested_surface": "etymology_claim",
  "reason": "Etymology statements stay unavailable until authority sources and review gates close.",
  "api_response_status": "documentation_only_refusal_not_runtime_route",
  "endpoint_policy": "Public JSON may expose etymology gate metadata but no etymology claim text.",
  "mcp_policy": "Future MCP resources must keep etymology as pending metadata until a reviewed claim family exists.",
  "allowed_response": "Return authority-source requirements and pending status without an etymology statement.",
  "closed_fields_remain_absent": [
    "source_text",
    "translation_text",
    "parsed_features",
    "etymology_statement",
    "lexical_range_claim",
    "frequency_claim",
    "public_receipt_export"
  ]
}
Lexical Range Agent asks for a public lexical range claim for psyche.
{
  "contract": "closed_claim_surface_refusal",
  "status": "refused",
  "claim_family": "lexical_range",
  "requested_surface": "lexical_range_claim",
  "reason": "Lexical range is unavailable_pending_audit and public_claims remains false.",
  "api_response_status": "documentation_only_refusal_not_runtime_route",
  "endpoint_policy": "Public JSON may expose lexical range unavailable state only.",
  "mcp_policy": "Future MCP resources must not turn unavailable lexical metadata into a lexical range claim.",
  "allowed_response": "Return the unavailable lexical range state and source pointers without lexical synthesis.",
  "closed_fields_remain_absent": [
    "source_text",
    "translation_text",
    "parsed_features",
    "etymology_statement",
    "lexical_range_claim",
    "frequency_claim",
    "public_receipt_export"
  ]
}
Frequency Agent asks how often psyche occurs across the corpus.
{
  "contract": "closed_claim_surface_refusal",
  "status": "refused",
  "claim_family": "frequency",
  "requested_surface": "frequency_claim",
  "reason": "Corpus frequency is fixture-scope only; full-corpus counts are not available in this branch.",
  "api_response_status": "documentation_only_refusal_not_runtime_route",
  "endpoint_policy": "Public JSON may expose count_scope metadata but not corpus-wide frequency claims.",
  "mcp_policy": "Future MCP resources must preserve fixture-scope count warnings and must not infer corpus frequency.",
  "allowed_response": "Return count scope and fixture warning metadata without claiming a corpus frequency.",
  "closed_fields_remain_absent": [
    "source_text",
    "translation_text",
    "parsed_features",
    "etymology_statement",
    "lexical_range_claim",
    "frequency_claim",
    "public_receipt_export"
  ]
}
Receipt Export Agent asks to export the soul-word journey receipt.
{
  "contract": "closed_claim_surface_refusal",
  "status": "refused",
  "claim_family": "receipt_export",
  "requested_surface": "public_receipt_export",
  "reason": "Receipts are pointer-only; public_receipt_ready is false and export_state is blocked_pending_public_receipt_policy.",
  "api_response_status": "documentation_only_refusal_not_runtime_route",
  "endpoint_policy": "Public JSON may expose receipt pointers but no export-ready receipt body, content hash, or claim map.",
  "mcp_policy": "Future MCP receipt resources must remain pointer-only until the public receipt export policy passes.",
  "allowed_response": "Return receipt pointer, scope, source IDs, evidence IDs, and blocked export state.",
  "closed_fields_remain_absent": [
    "source_text",
    "translation_text",
    "parsed_features",
    "etymology_statement",
    "lexical_range_claim",
    "frequency_claim",
    "public_receipt_export"
  ]
}

Documented JSON Families

Every row below is read-only, fixture-backed, kept out of public indexing, and required to expose source IDs, evidence IDs, receipt pointer, indexability, and pending/unavailable states.

Method Path Template Entity Status Required Fields
GET /api/public/terms/{language}/{lemma}.json term Read-only fixture canonical_url, entity_id, source_ids, evidence_ids, receipt_pointer, indexability, states
GET /api/public/passages/{id}.json passage Read-only fixture canonical_url, entity_id, source_ids, evidence_ids, receipt_pointer, indexability, states
GET /api/public/sources/{id}.json source Read-only fixture canonical_url, entity_id, source_ids, evidence_ids, receipt_pointer, indexability, states
GET /api/public/editions/{id}.json edition Read-only fixture canonical_url, entity_id, source_ids, evidence_ids, receipt_pointer, indexability, states
GET /api/public/receipts/{id}.json receipt Read-only fixture canonical_url, entity_id, source_ids, evidence_ids, receipt_pointer, indexability, states
GET /api/public/journeys/{slug}.json journey Read-only fixture canonical_url, entity_id, source_ids, evidence_ids, receipt_pointer, indexability, states
GET /api/public/references/parse.json?ref={reference} reference Read-only fixture canonical_url, entity_id, source_ids, evidence_ids, receipt_pointer, indexability, states
GET /api/v1/readiness.json adapter_readiness Adapter readiness only adapter_id, adapter_version, source_ids, manifest_ids, snapshot_ids, passage_ids, checksum_state, blocker_ids, supported_operations, display_state

Payload Rules

  • Every response must expose a canonical URL and stable entity identifier.
  • Source IDs, evidence IDs, receipt pointer, audit state, review state, and indexability state must travel with the payload.
  • Response policy must mark source IDs and evidence IDs as pointers, receipt export as blocked, JSON as noindex, and MCP as non-operational.
  • External AI may treat Logoi as pointer-safe and docs-only today: route, endpoint, source, evidence, receipt, robots, review, audit, and blocker state can be repeated; closed claim surfaces cannot be completed.
  • Primary text, translation, lexical data, etymology, usage evidence, and generated synthesis remain separate fields.
  • Read-only fixture responses must expose pending/unavailable states instead of unaudited morphology, etymology, translation, lexical range, or receipt exports.
  • Missing evidence is returned as a blocker or unavailable state, never filled from model memory.

Future Public Boundaries

These boundaries define what a later public API packet must satisfy before adding a family or promoting a claim surface.

Boundary Current Rule Future Rule
Current callable surface Only the GET JSON handlers listed in OpenAPI are callable, and every handler is read-only, fixture-backed, and noindex/nofollow. Any new public family must be added to the docs contract, OpenAPI artifact, tests, and noindex helper before it is callable.
Evidence promotion Pending, unavailable, blocker, and fixture_scope states are authoritative; agents must refuse closed claim surfaces. A future promotion must close source, license, checksum, passage, receipt, and review gates before a public-ready claim can appear.
Receipts Receipts are pointer-only; public_receipt_ready remains false and export_state remains blocked_pending_public_receipt_policy. Receipt export requires a separate public receipt policy, leak guard, and validation gate.
MCP MCP is non-operational: no server URL, discovery manifest, tool registry, resource registry, or runtime endpoint exists. A future MCP server must mirror the public API envelope first and cannot introduce write, generation, private memory, or source-text capabilities.

Closed Surfaces

  • Expensive research endpoints
  • Generated teaching endpoints
  • Private memory or saved-thread endpoints
  • Authenticated account endpoints
  • Any route that would expose unaudited source text, translation text, morphology, lexical range, etymology, or corpus-frequency claims
  • Any route that would execute MCP tools/resources, export receipts, acquire sources, crawl, translate, parse morphology, produce etymology, or make lexical claims