Add Ask ETPL, meeting change requests and the knowledge ingestion path
Ask ETPL answers questions across a project's own requirements, meetings, mail and ERPNext records. Retrieval is scoped to one project and client so evidence from another customer cannot reach the answer, and every citation is validated against the retrieved set before it is shown, so an invented evidence id is rejected rather than rendered.
The conversation UI puts the model picker in the composer beside the question box instead of a header column, because the model is a property of the question rather than a third piece of project data. The picker is a real listbox grouped by provider with one colour per provider, keyboard navigation and a check on the current choice; a native select could show none of that.
Meetings can now raise change requests, and meeting transcripts, FRDs, implementation plans and library BRDs each have an ingestion path into the knowledge base. Caddy now listens on the port Docker actually publishes, which was resetting every browser request.