- **Fixed `component_settings` edits being silently overridden by legacy `parser_kwargs` at parse time (issue #2115).**
  `BaseParser.parse_document` (`opencontractserver/pipeline/base/parser.py`)
  merged `{**self.get_component_settings(), **direct_kwargs}`, so the
  legacy/seed-only `parser_kwargs` channel (`PipelineSettings.parser_kwargs`,
  no admin GUI editor) always won over the schema-validated,
  superuser-GUI-editable `component_settings` channel on any key collision.
  Several parsers seed the same field names into both channels (e.g.
  LlamaParseParser's `result_type`/`extract_layout`/`num_workers`/`language`/
  `verbose`), so editing them via the admin "Advanced Settings" modal had no
  effect at parse time. Inverted the merge order to
  `{**direct_kwargs, **self.get_component_settings()}` so `component_settings`
  wins on collisions, while keys unique to `parser_kwargs` (e.g. LlamaParse's
  `api_key`, a `SECRET`-type setting the mutation layer refuses to accept as
  plaintext in `component_settings`) still pass through unchanged. Added
  `test_parse_document_component_settings_wins_over_parser_kwargs` in
  `opencontractserver/tests/test_base_pipeline_parser.py`.
