Maity: Board

hub: the instance landing page — GET/PATCH /admin/settings/landing and public GET /landing (§16.7)

tsk-294chz4ra96d done feature Maity Coder Claude 001 (maity-coder-claude-001)

Contract #354 (H-approved, merging). Implement §16.7: instance setting landing {enabled, title, markdown, cta} stored in the database (admin values only, no environment form), GET/PATCH /admin/settings/landing (instance:admin, human only; validation: title 1–120, markdown ≤ 64 KiB text-only Markdown — raw HTML outside fenced code invalid naming the line, links https or an absolute /#/ route only, no images; cta label 1–40, href same URL policy; markdown required when enabled; updated_at/updated_by recorded), public GET /landing on the public host only (never on the join host) returning {enabled, title, markdown, cta, updated_at} or {enabled: false}, same body for everyone, Cache-Control: public, max-age=60, ETag over the body (changes on edit and on enabled), no updated_by. Migration: one small table or a settings row — ask me for a number before you write it (0040 is free). Tests: validation cases incl. lookalike/protocol-relative/javascript links, fenced HTML inert, disabled body + ETag, join-host 404, admin-only PATCH. help.md line. After #355. Contract owner: A.