Metadata standard
One title. One description. American English. bun run meta:audit fails when a doc, the document head, or package.json drifts from src/lib/og/site.json.
Identity
| Field | Value | Where it is written |
|---|---|---|
| Title | Sports Operations | src/lib/og/site.json title. The document <title>, application-name, and src/lib/brand.ts BRAND (which imports it) use that string. |
| Description | The one sentence in site.json | og:description (injector), <meta name="description">, package.json description, and the first paragraph of README.md. |
| Theme | 07090E | site.json color, six hex digits and no hash. The document theme-color is # plus that value. |
| Install name | Sports Operations | public/manifest.webmanifest name and short_name, with theme_color and background_color from site.json color. src/routes/__root.tsx links it ahead of the platform's /__grok/manifest.webmanifest, which names an app from a *.grok.me host and says "Grok App" anywhere else. bun run cli contract --write writes it. |
| Machine-readable | public/llms.txt, public/docs/manifest.json | Both open with the site.json title and description and list the published docs. bun run cli contract --write writes them. |
| Language | en | <html lang="en">. Spelling is American (color, favor, behavior). |
| Live URL | https://desk.bookdeskops.com | Worker hostname. The GitHub repository description and homepage should use the same sentence and this URL. |
The description is one sentence, 50 to 160 characters, with the only period at the end. The title is 2 to 60 characters and does not end with a period.
Share-card tags (og:title, og:description, og:image, twitter:card) are not written in src/routes/__root.tsx. The platform injector reads site.json and writes them on every HTML response. This desk is an operations dashboard, so site.json does not set type and does not set card to custom. The placeholder card is the right card.
What the audit checks
bun run meta:audit
- Title, description, and color match across
site.json, the document head,package.json,BRAND, and the README opening paragraph. - The install manifest,
llms.txtand the docs manifest carry that identity, every icon the install manifest names is inpublic/, and the document head links/manifest.webmanifestrather than the platform's. README.md,docs/*.md, andAGENTS.project.mdspellcheck against the American dictionary plusdocs/meta-glossary.txt.- Fenced code, inline code, and URLs are not spellchecked. An acronym in all capitals is allowed. A word the dictionary does not know, and that is a real term, goes in the glossary in lowercase.
- Relative links and code paths (
docs/standing.md,src/desk/grading.ts) resolve to a file or directory. - Visible JSX text, literal child expressions, and static accessible labels, titles, image descriptions, and input hints in
src/**/*.tsxspellcheck against the same dictionary. Code identifiers and HTML entities are excluded; computed copy still needs review. - British spellings in
src/,scripts/,bun/, and the docs are rejected..grok/is platform text and is not part of this audit.
Docs
| File | What it is |
|---|---|
docs/standing.md | What is landed, what is not, and the next steps |
docs/infra-backlog.md | Live cron, R2, and fantasy402 coverage, and what is still open |
docs/goal.md | Routes, endpoints, and the field names that may render |
docs/endpoints.md | Every route, sidecar path, and env var |
docs/secrets.md | Secret names, placeholders, and the 4C token |
docs/r2-storage.md | Archive layout, retention, and the R2 bucket |
docs/design.md | Design tokens for every theme, proven by bun run cli design |
docs/site.md | Pages, themes, hotkeys, URL state, sections, tables, columns, messages, settings and flags, proven and generated by bun run cli site |
docs/dashboard.md | Repo screenshots, proven by bun run cli proof |
docs/workflow.md | How a change goes from branch to deploy, and which proof covers what |
docs/execution-todo.md | Closed October 8 reliability ledger |
docs/meta.md | This standard |
Outside this repo
Closed in this pass:
- The document head had a title and no description.
site.jsonis now the source, and the head copies the title, description, and theme color. package.jsonhad no description. It now matches the sentence above.- The README opening paragraph is that same sentence, and the command list includes the scripts that already existed (
cf:secrets,db:migrate,4c:token,ticker:spool,weblog:extract,cron,status,meta:audit). - The README said tests need Node 22.15. The alias loader uses
module.registerso Node 22.14 runs them. The 22.15 note now applies only to the syncregisterHooksAPI, which this repo does not use. - Project comments and on-screen notes used British spellings (
colorandfavorwere written the British way, and so wasacknowledgment). They now use the American spellings.
Left open, on purpose:
- The GitHub About description and homepage could not be written. This token cannot edit repository settings. An owner sets the description to the
site.jsonsentence and the homepage to https://desk.bookdeskops.com. - The issues API is not available to this token. Pull requests #25 and #30 are already on
main. #29 (wager feed) and #31 (snapshot diff) are still open product work, so they stay open.
Image proof identity
bun run cli proof --json includes a sha256 fingerprint for each local image that decodes. Bun.file().bytes() reads one snapshot; Bun.Image checks those bytes and Bun.CryptoHasher fingerprints the same snapshot. A fingerprint identifies the checked file; it does not assert that the pictured data is current or accurate. Remote images remain unverified.
Tool contract checks
The Workbench sample checks the exact response and requires a schema error for invalid input. Tool definitions can declare an outputSchema to reject missing fields, wrong types, extra fields, and fractional amounts where integer cents are required. Existing definitions without an output schema still require separate output review.
The tool tests also cover failed registration rollback, pending registrations, legacy signature fallback, and cancellation during registration or execution. Canceling a registration stops both host callbacks and local calls; a canceled operation cannot return a successful result.
IP investigation view
/ip ranks the saved shared-address groups by distinct customer count, then recurring customers. Customer IDs are trimmed and matched exactly; search ignores letter case. Sampled login names remain separate. Clicking a customer applies an exact match (=customer); typing ordinary text searches all displayed identifiers by partial text. Repeated rows for one address are merged before counting.
The distribution chart counts customer IDs per address. Related addresses require an exact customer-ID overlap. Neither chart claims coordinated behavior, ownership, session counts, or wager matches. The extract stores at most four sampled login names per address and has no event timestamps. Detailed search results supply the optional activity chart: returned log records by Central report day, with unusable dates counted separately and missing days left unknown. Source extraction time is shown separately from activity time.