Source of truth for this plan: logs/autonomous-exec/STATUS-LEDGER.md, BLOCKERS.md, HANDOFF.md,
and EXECUTION-PLAN-opencomplai-features.md. All 19 deliverables below are implemented in the working
tree and uncommitted — this plan assumes they land on main before or alongside the docs work.
Nothing here is committed to git yet. Docs work should target docs/src/ (MkDocs / Material) and
package READMEs, matching the existing site structure in mkdocs.yml.
Each section below is one shippable doc unit: what feature it documents, which nav page(s) it touches (new or existing), what source files ground the content, and what to verify before publishing. Work top-to-bottom by phase — P0 items are the highest-traffic new commands, so they unblock the most "how do I..." support burden if documented first.
- Decide nav placement for 4 new CLI commands (
gaps,recommend,report, and the extendedscan/evalflags). Added a new CLI Reference top-level nav section inmkdocs.yml.- Discovery during execution:
docs/src/cli/already contained 11 existing pages (scan.md,check.md,init.md,checker.md,dashboard.md,docs-generate.md,exit-codes.md,risk-classify.md,sync-metadata.md,validate-manifest.md,verify-output.md) that were not wired intomkdocs.ymlnav at all — a pre-existing gap unrelated to this run. The new CLI Reference nav section includes all 11 existing pages plus the 3 new ones (gaps.md,recommend.md,report.md) and a neweval.md(see 2.6/3.1).
- Discovery during execution:
- Confirmed: CLI docs live under their own CLI Reference top-level nav section (not nested
under
Guides/orapi/).Guides/keeps workflow-level content (customer workflow, CI integration, pre-commit, configuration, SARIF);CLI Referenceis pure command/flag reference.
What shipped: README.md Quick Start already updated to lead with pip install opencomplai
(previously build-from-source first). No new page needed — verify getting-started/installation.md
and getting-started/quick-start.md match the new README wording (they may still describe the old
build-from-source-first flow).
- Audited:
installation.md/quick-start.mdalready led withpip install opencomplaiand cited "0.1.2 latest release", consistent with the README/CHANGELOG wording — no edit needed. - Decision (confirmed with user): mirror README's current wording rather than hedge or block on PyPI verification — a human is expected to verify/commit before merge. No separate "once published" caveat added in docs/src/.
What shipped: New CLI command producing a GapReport (article → MET/PARTIAL/MISSING/UNVERIFIED,
citing the rule/obligation/scan/evaluator source). Flags: --manifest, --commit-ref, --scan-report,
--sample-set, --output. Also a --with-gaps opt-in flag added to the existing check command.
- New page written:
docs/src/cli/gaps.md(wired into new CLI Reference nav) covering:- Status table (MET/PARTIAL/MISSING/UNVERIFIED) with the "rule engine alone can't see everything" honesty note.
- Full flag table, JSON example with both a rule-sourced and evaluator-sourced row (satisfies 1.5).
- Principle Summary section + cross-link to
concepts/eu-ai-act-principles.md(satisfies 3.2).
- Grounding files:
packages/core/src/opencomplai_core/gap_report.py,packages/core/src/opencomplai_core/data/gap_article_map.json,models.py(GapReport,ArticleGapStatus,GapStatus).
What shipped: Reads a GapReport (or builds one inline with the same flags as gaps) and emits
one Markdown remediation file per non-MET article, from 6 templates (logging/event capture,
transparency notice, human oversight checklist, risk register entry, Annex III applicability note,
GPAI Art.53/55 obligation stub).
- New page written:
docs/src/cli/recommend.md— full flag table, standalone-vs-piped usage patterns, and a table of all 6 templates with what each gives you. - Air-gap/no-network/no-model-call callout added as a tip box at the top of the page.
What shipped: New opt-in scan flag that detects real instantiation + invocation of LangChain
(AgentExecutor), CrewAI (Crew), AutoGen (ConversableAgent), and LangGraph (StateGraph) objects
via AST analysis — distinct from (and more precise than) the pre-existing lexical import scan.
- Updated
docs/src/cli/scan.mdwith a--framework-detectorssection: recognized-classes table, confidence/reachability behavior, and the known v1 single-function/module-scope limitation. - Updated
concepts/evidence.mdwith a new "Scanner signal categories and detectors" section documentingSignalCategory.AGENT_FRAMEWORK/DET_FRAMEWORK_AST_V1.
What shipped: No new command — gaps (1.2) already surfaces evaluator failures (e.g. an
adversarial-prompt fixture failing EVAL_SAFETY_LEXICAL_V1) as MISSING articles citing the
evaluator's evidence_hash and reference string. Purely a behavior note to fold into 1.2's page —
no standalone doc unit needed.
- Done as part of 1.2's page (
cli/gaps.md) — example includes both a rule-sourced (Art. 6) and evaluator-sourced (Art. 15,EVAL_SAFETY_LEXICAL_V1) row with explanatory text.
What shipped: Renders a human-readable HTML or PDF compliance report from a ScanStatusArtifact
(+ optional GapReport). PDF path reuses the existing fpdf2-based renderer used by the checker
widget (no second PDF toolchain).
- New page written:
docs/src/cli/report.md— full flag table, HTML-vs-PDF extension-inference note, and a "getting the richest report" section usingcheck --with-gaps --scan. - Read-only/no-network tip box added, consistent in style with
recommend.md's callout.
What shipped: Discovery-only scan mode: no manifest required, forces fail_on=none,
emit_evidence=False, enqueue_review=False, always exits 0, prints a suggested opencomplai init
follow-up. Runs in ~0.37s on a small fixture repo — meant as a zero-friction first command for new
users (and the thing the pre-commit hook in 2.2 calls).
- Added a "Try it with zero setup first" section to
quick-start.md, positioned before "Initialise your system manifest" — the literal first command shown. - Contrast with
checkstated explicitly in bothquick-start.mdandcli/scan.md's--quicksection.
What shipped: Two hook definitions consumers can reference from their own
.pre-commit-config.yaml: opencomplai-quick-scan (calls scan --quick) and opencomplai-check
(the full CI gate).
- New page written:
docs/src/guides/pre-commit.md, with the consumer-side YAML snippet and both hook IDs documented (opencomplai-quick-scan,opencomplai-check). - Pre-publish gate flagged explicitly: page opens with a
!!! warningcallout stating the end-to-endpre-commit run --all-filesacceptance test has not yet been run against a published release, and gives the verification steps to run before relying on it in production.
What shipped: New evaluator pairing prompts↔outputs by index to detect whether a
known-adversarial prompt produced a compliant (resisted) vs. non-compliant output. Distinct from the
pre-existing lexical SafetyEvaluator injection/jailbreak-marker scan.
- Created
docs/src/concepts/evaluators.md(new nav entry under Concepts) enumerating all 5 registered evaluators, with a dedicated comparison table + prose explaining theEVAL_ADVERSARIAL_V1vs.EVAL_SAFETY_LEXICAL_V1distinction.
What shipped: An opt-in synthetic bundled bias probe (bundled_bias_probe.json, 40 rows, 2
synthetic groups), NOT a real BBQ/BOLD/CAB dataset subset. Triggered only when
threshold_overrides["use_bundled_bias_probe"] == 1.0 and no custom sample set is supplied.
- Documented in
concepts/evaluators.mdunder "Bias/fairness — bundled synthetic probe (not a real benchmark)" with a!!! warningcallout stating explicitly it is not BBQ/BOLD/CAB, using close to the suggested phrasing.
What shipped: New opt-in evaluator computing Expected Calibration Error (ECE) over
predictions/labels, gated behind threshold_overrides.include_calibration == 1.0 (skipped by
default, zero cost when not requested).
- Added to
concepts/evaluators.mdwith a plain-language ECE definition, the opt-in gating requirement, and the PASS/WARN/FAIL/SKIPPED outcome table.
What shipped: Optional live-model evaluation path (OpenAI-compatible providers) alongside the
existing local/deterministic evaluators. Every provider-backed result is explicitly tagged
non-deterministic in output, and this code path is never imported by the check (CI gate) path.
- New page written:
docs/src/cli/eval.md(new, since noevalCLI reference page existed before this run) with a!!! warningcallout using close to the suggested framing, plus thedeterministic: falseJSON tagging shown explicitly. - Env var pattern and supported-providers table included (
openai,openai_compatible).
What shipped: No new command/flag — scan's existing AI-SDK detection now recognizes 9 more
provider SDKs (fireworks-ai, perplexityai, ai21, stability-sdk, elevenlabs, deepgram, assemblyai,
google-cloud-aiplatform, ibm-watsonx-ai).
- Neither
scan-workflow.mdnorevidence.mdenumerated the SDK list, so added a short paragraph togetting-started/scanner.md(the user-facing scanner guide) instead, listing all 22 recognized SDKs.
What shipped: New optional inspect-bridge extra (pip install 'opencomplai-core[inspect-bridge]')
and a new --suite inspect-ai flag on eval. The bridge defines the full mapping contract
(is_inspect_available(), eval_log_to_evaluator_result()); run_inspect_suite() runs the
curated Inspect pin (see concepts/inspect-bridge.md).
- Documented in
cli/eval.mdunder "Inspect-AI eval bridge (--suite inspect-ai)", explaining install, curated tasks, and that the bridge never gatescheck.
What shipped: gaps output (human table + JSON) now includes a rollup of the 6 EU Trustworthy AI
principles (Technical Robustness & Safety, Privacy & Data Governance, Transparency, Diversity/
Non-discrimination/Fairness, Societal & Environmental Wellbeing, Accountability), each showing
worst-case status across its mapped articles.
- Folded into
cli/gaps.md's "Principle Summary" section with example human-output table and cross-link toconcepts/eu-ai-act-principles.md. - Backward-compatibility note included verbatim as its own paragraph.
What shipped: New flag emitting a SARIF 2.1.0 document from scan evidence, for GitHub code scanning / Security tab integration.
- New page written:
docs/src/guides/sarif-integration.md, with--sarif-outputusage, a GitHub Actions snippet usingcodeql-action/upload-sarif@v3, a corroboration-only!!! infocallout, and a field-mapping table (ruleId/level/message/locations/properties).
What shipped: docs/design/js-ts-scanning-spike.md — an internal design doc, not a feature.
- Added a short "Roadmap: JS/TS repository scanning (design spike, not implemented)" section to
docs/src/contributing/index.md(contributor-facing, not user-facing), pointing todocs/design/js-ts-scanning-spike.mdand stating explicitly that.js/.tsdetection does not work yet.
What shipped: New optional per-repo config file, auto-discovered from --repo-root, currently
supporting scan.fail_on and scan.framework_detectors defaults. Explicit CLI flags always override
config file values; config file overrides built-in defaults.
- New page written:
docs/src/guides/configuration.md— discovery rule, supported-keys table (explicit "this list will grow" note), precedence rule, and the exact worked example from the ledger (fail_on: criticalin config +--fail-on majoroverride). - "Behavior only, never a declaration" scope note added as a top-of-page
!!! infocallout, plus a comparison table againstsystem-manifest.json/.ocignore/CLI flags.
What shipped: docs/src/concepts/eu-ai-act-principles.md, already generated and wired into
mkdocs.yml's Concepts nav (confirmed present in current mkdocs.yml:158 and file already exists
with full content). Auto-generated by scripts/generate_principle_docs.py from the same data
gaps's principle_summary reads — regenerate this script's output (don't hand-edit the .md) any
time eu_ai_act_principles.json or gap_article_map.json changes.
- Nothing to do here — this deliverable's docs artifact is done. Just remember: never hand-edit
docs/src/concepts/eu-ai-act-principles.mddirectly — rerunpython scripts/generate_principle_docs.pyinstead, or edits will be silently lost next regeneration.
- CLI Reference:
- Overview: cli/index.md
- scan: cli/scan.md # includes --quick, --framework-detectors, --sarif-output
- check: cli/check.md # includes --with-gaps
- gaps: cli/gaps.md # includes principle_summary
- recommend: cli/recommend.md
- report: cli/report.md
- eval: cli/eval.md # includes --provider/--model, --suite inspect-ai
- Guides:
- ...(existing)...
- Pre-commit Integration: guides/pre-commit.md
- Project Configuration: guides/configuration.md
- CI Code Scanning (SARIF): guides/sarif-integration.md- Be honest about scope-limited deliverables. Three features (2.4 bias probe, 3.1 Inspect-AI
eval bridge, 3.4 JS/TS) are intentionally partial or non-functional today. Documenting them as fully
shipped would create support burden and credibility risk — mark them "synthetic/placeholder,"
"scaffolding, not yet functional," and "design spike, not implemented" respectively, per
BLOCKERS.md. - The moat is a selling point, not just an engineering constraint — several new features
(
recommend,report, framework AST detection) are explicitly deterministic/no-network/no-LLM. Worth a consistent callout box style across pages so customers evaluating for regulated/air-gapped environments can find this reassurance quickly. - Verify before publishing anything about 1.1 (PyPI) or 2.2 (pre-commit hook) — both have
outstanding human-only steps in
HANDOFF.mdthat gate whether the documented behavior is actually live yet.