The dogfood door
The widget in the corner is pointed at this deployment's own answer service. It has to explain Yardlight, from Yardlight's documentation, before any release ships to a product.
Only Yardlight's own public documentation — the README, the
security policy, and the design docs written to be read by outsiders. The
indexable set is an explicit list in corpus.allowlist.json, never a
sweep of the repository: a repo carries internal notes, and an assistant grounded
in the whole tree would answer a stranger's question truthfully and disastrously.
Everything else is excluded with a stated reason, and a test fails if a new
document lands in neither list.
It reads no MASONBYTE business data, and no other product's data. There is no company-wide corpus and no account it signs in as. Embedded in another application it reads that application's documentation, and any data lookup runs under the signed-in user's own credentials — so the ceiling is always what that one person could already see there. Today the answer service ships with zero data tools at all.
The service is inert until configured, which is the default state and not an oversight. Ask it something and you will most likely get a refusal with a route to a human — that is the design working, not a broken page.
| Environment | Behaviour |
|---|---|
| nothing set likely now | Refuses with 503. The widget shows a failure message and the escalation link. |
YARDLIGHT_ENABLED=trueYARDLIGHT_DRY_RUN=true |
Validates the question and assembles the full request, then answers with a canned dry-run reply. Zero model calls, zero cost. |
YARDLIGHT_ENABLED=true+ ANTHROPIC_API_KEY |
Answers for real. The key stays in the function environment; the browser never talks to the provider. |
| enabled, but no key | Refuses loudly with 503 rather than half-working — a misconfiguration should be obvious, not silent. |
Try the escalation route. Whatever state the service is in, the path to a human has to keep working — that requirement holds even when the assistant is disabled, rate-limited, or down.
One custom element, no framework, no runtime dependencies. Without an
endpoint it renders nothing at all.
| Attribute | Value |
|---|---|
endpoint | /api/answer |
product | Yardlight |
escalation-href | the repository's issue tracker |
The full contract — attributes, theming tokens, the integration-module schema — is in doc 4 of the doc set.