{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://dock.hamyrappy.com/schema.json",
  "title": "Dock profile, version dock/1",
  "description": "A public profile written by a person's own agent from their private notes. Every list item is one self-contained sentence a stranger can understand. Language: the owner's.",
  "type": "object",
  "required": ["name", "headline", "now", "offers", "asks"],
  "additionalProperties": false,
  "properties": {
    "schema": {"const": "dock/1"},
    "name": {"type": "string", "maxLength": 80, "description": "Name as the person wants it shown."},
    "headline": {"type": "string", "maxLength": 200, "description": "One line: who they are and what they do now."},
    "location": {"type": "string", "maxLength": 80, "description": "City only."},
    "languages": {"type": "array", "items": {"type": "string"}},
    "about": {"type": "string", "maxLength": 1500, "description": "Three to five sentences: the path that explains the present."},
    "now": {"type": "array", "items": {"type": "string", "maxLength": 500}, "maxItems": 30, "description": "Current projects and roles, each with its stage and the open problem."},
    "offers": {"type": "array", "items": {"type": "string", "maxLength": 500}, "maxItems": 30, "description": "What the person can give: expertise, time, introductions, resources. Concrete enough to act on."},
    "asks": {"type": "array", "items": {"type": "string", "maxLength": 500}, "maxItems": 30, "description": "What the person looks for: people, skills, clients, money, advice."},
    "experience": {"type": "array", "items": {"type": "string", "maxLength": 500}, "maxItems": 30, "description": "Past roles, results, education that matters."},
    "skills": {"type": "array", "items": {"type": "string", "maxLength": 500}, "maxItems": 30},
    "interests": {"type": "array", "items": {"type": "string", "maxLength": 500}, "maxItems": 30, "description": "Professional and personal, hobbies included — rare ones matter most."},
    "views": {"type": "array", "items": {"type": "string", "maxLength": 500}, "maxItems": 30, "description": "Convictions about work and the world the person states openly."},
    "assets": {"type": "array", "items": {"type": "string", "maxLength": 500}, "maxItems": 30, "description": "Resources others could use: data, audience, infrastructure, access, equipment."},
    "topics": {"type": "array", "items": {"type": "string", "maxLength": 500}, "maxItems": 30, "description": "What they enjoy talking about."},
    "open_to": {"type": "array", "items": {"type": "string", "maxLength": 60}, "maxItems": 30, "description": "Short tags: cofounder, hiring, investing, research, advising, friendship…"},
    "work_style": {"type": "string", "maxLength": 800, "description": "How they work and communicate."},
    "contacts": {
      "type": "object",
      "additionalProperties": false,
      "description": "Only the contacts the owner explicitly agreed to publish.",
      "properties": {
        "telegram": {"type": "string"}, "email": {"type": "string"}, "site": {"type": "string"}, "other": {"type": "string"}
      }
    },
    "invited_by": {"type": "string", "description": "Id of the person whose invitation link the owner came by; the two get a shared pair analysis once both profiles are visible. Not part of the public profile."},
    "left_out": {"type": "array", "items": {"type": "string", "maxLength": 500}, "description": "Categories the agent deliberately left out, named without content («health», «family», «one conflict at work»). Shown only to the owner on the review page."}
  }
}
