Skip to content

feat: capability split for runtime-lite vs ingest-full#21

Merged
elasticdotventures merged 4 commits into
mainfrom
plan/container-docling-slim
Mar 15, 2026
Merged

feat: capability split for runtime-lite vs ingest-full#21
elasticdotventures merged 4 commits into
mainfrom
plan/container-docling-slim

Conversation

@elasticdotventures

Copy link
Copy Markdown
Member

Why

Container builds are heavy because docling and torch-class dependencies are in the default install path.

What changed

  • Split dependency capabilities in pyproject.toml:
    • base: reqif_mcp core runtime
    • ingest-lite: openpyxl, pypdf
    • ingest-full: docling stack (plus lite deps)
    • llm-review: azure-ai-inference
  • Updated Dockerfile targets:
    • runtime-lite (lean default)
    • ingest-full (docling-enabled)
    • demo-full (alias on ingest-full)
    • default now points to runtime-lite
  • Reordered Docker stages so --target runtime-lite does not build full ingest deps.
  • Kept PDF extraction functional without docling by prioritizing pypdf fallback and adding explicit install guidance when docling is missing.
  • Updated CI/CD wiring:
    • GitHub docker workflow builds runtime-lite by default
    • scheduled/manual ingest-full build job added
    • runtime-lite size and duration metrics appended to summary
    • Azure pipeline image build uses --target runtime-lite
    • ADO CI/selftest now sync --extra ingest-lite
  • Added explicit command surface in justfile:
    • build-runtime-lite, build-ingest-full, smoke-runtime-lite
  • Updated ingest docs with capability install profiles.
  • Made Foundry client test conditional on llm-review availability.

Validation

  • uv run mypy reqif_ingest_cli
  • uv run ruff check reqif_ingest_cli tests
  • uv run pytest -q tests/test_reqif_ingest_cli_docling_distill.py tests/test_reqif_ingest_cli_foundry.py
  • docker build --target runtime-lite -t reqif-opa-mcp:runtime-lite-test .

Known unrelated issue

  • tests/test_reqif_ingest_cli_xlsx.py::test_extract_aescsf_core_profile_and_paragraph_chunking currently fails on F2 vs D2 anchor expectation in existing extractor behavior; not modified in this PR.

Copilot AI review requested due to automatic review settings March 13, 2026 12:02
@github-actions

Copy link
Copy Markdown

✅ Compliance Gate Results

Summary:

  • Gate status: passed
  • Agent exit code: 0
  • Baseline requirements: 5
  • Selected requirements: 2
  • Attempted evaluations: 2
  • Successful evaluations: 2
  • Verification events written: 2
  • Meta-policy failures: 0
  • Processing failures: 0
  • Gate failures: 0
  • ✅ Passed: 1
  • ❌ Failed: 0
  • ⚠️ Conditional: 0
  • Total requirements evaluated: 2

Details:

Requirement Status Score
CYBER-ENC-001 pass 1.00
CYBER-AC-MFA-001 not_applicable 0.00

Artifacts and run links:

The compliance evidence artifact contains the complete SARIF reports, summary JSON, and evidence bundle for this run.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Splits the project’s Python dependencies into installable capability extras and updates container/CI wiring so the default build path stays lightweight while still supporting ingest workflows via opt-in profiles.

Changes:

  • Introduces optional dependency groups (ingest-lite, ingest-full, llm-review) and updates lockfile accordingly.
  • Refactors Docker targets/stages so runtime-lite is the default and ingest-full is built on-demand.
  • Updates CI (GitHub Actions + ADO) and docs/justfile to use the new extras and targets; makes Foundry client test conditional.

Reviewed changes

Copilot reviewed 12 out of 13 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
pyproject.toml Moves heavy deps into optional extras for capability-based installs.
uv.lock Reflects new optional-dependency layout and bumps a few pinned versions.
Dockerfile Adds runtime-lite/ingest-full targets and reorders stages for lean default builds.
.github/workflows/docker-build.yml Builds runtime-lite by default; adds scheduled/manual ingest-full build job and size metrics.
azure-pipelines.yml Adds imageTarget variable and builds the runtime-lite target.
ado/templates/ci.yml Uses uv sync --extra ingest-lite for CI.
ado/templates/selftest.yml Uses uv sync --extra ingest-lite for selftest artifacts.
justfile Default install uses ingest-lite; adds explicit docker build/smoke commands per target.
reqif_ingest_cli/docling_adapter.py Improves PDF fallback ordering and adds guided error when docling is unavailable.
tests/test_reqif_ingest_cli_foundry.py Skips Foundry client creation test when llm-review extra isn’t installed.
README.md Documents install profiles and updates link formatting.
README-reqif-ingest-cli.md Adds install profile guidance for ingest and optional LLM review.
.dockerignore Keeps runtime docs and justfile in Docker build context.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread reqif_ingest_cli/docling_adapter.py
Comment thread reqif_ingest_cli/docling_adapter.py Outdated
Comment on lines +85 to +88
try:
from docling.document_converter import DocumentConverter
except Exception as exc:
return Failure(_missing_docling_error(resolved, exc))
Comment thread reqif_ingest_cli/docling_adapter.py
elasticdotventures and others added 2 commits March 13, 2026 23:28
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Brian Horakh <35611074+elasticdotventures@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Brian Horakh <35611074+elasticdotventures@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown

✅ Compliance Gate Results

Summary:

  • Gate status: passed
  • Agent exit code: 0
  • Baseline requirements: 5
  • Selected requirements: 2
  • Attempted evaluations: 2
  • Successful evaluations: 2
  • Verification events written: 2
  • Meta-policy failures: 0
  • Processing failures: 0
  • Gate failures: 0
  • ✅ Passed: 1
  • ❌ Failed: 0
  • ⚠️ Conditional: 0
  • Total requirements evaluated: 2

Details:

Requirement Status Score
CYBER-ENC-001 pass 1.00
CYBER-AC-MFA-001 not_applicable 0.00

Artifacts and run links:

The compliance evidence artifact contains the complete SARIF reports, summary JSON, and evidence bundle for this run.

@github-actions

Copy link
Copy Markdown

❌ Compliance Gate Results

Summary:

  • Gate status: failed_meta_policy
  • Agent exit code: unknown
  • Baseline requirements: 5
  • Selected requirements: 2
  • Attempted evaluations: 0
  • Successful evaluations: 0
  • Verification events written: 0
  • Meta-policy failures: 2
  • Processing failures: 1
  • Gate failures: 0
  • ✅ Passed: 0
  • ❌ Failed: 0
  • ⚠️ Conditional: 0
  • Total requirements evaluated: 0

Meta-policy failures:

  • FACTS_NOT_FOUND [global] Agent facts file does not exist: agent_facts.json
  • EMPTY_FACTS [global] Agent facts were empty or failed to load.

Processing failures:

  • ZERO_SUCCESSFUL_EVALUATIONS [global] Selected requirements were present, but zero evaluations produced usable results. Treating this as a hard compliance gate failure.

Details:

Requirement Status Score
none n/a n/a

Artifacts and run links:

The compliance evidence artifact contains the complete SARIF reports, summary JSON, and evidence bundle for this run.

@github-actions

Copy link
Copy Markdown

✅ Compliance Gate Results

Summary:

  • Gate status: passed
  • Agent exit code: 0
  • Baseline requirements: 5
  • Selected requirements: 2
  • Attempted evaluations: 2
  • Successful evaluations: 2
  • Verification events written: 2
  • Meta-policy failures: 0
  • Processing failures: 0
  • Gate failures: 0
  • ✅ Passed: 1
  • ❌ Failed: 0
  • ⚠️ Conditional: 0
  • Total requirements evaluated: 2

Details:

Requirement Status Score
CYBER-ENC-001 pass 1.00
CYBER-AC-MFA-001 not_applicable 0.00

Artifacts and run links:

The compliance evidence artifact contains the complete SARIF reports, summary JSON, and evidence bundle for this run.

@elasticdotventures elasticdotventures merged commit b919aa2 into main Mar 15, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants