Commit Graph
1734 Commits
Author SHA1 Message Date
Mohd Kaif df6fedf619 Add Microsoft Defender for DevOps workflow 2026-06-13 01:13:32 +05:30
Mohd Kaif 9ba8b012bd docs: premium README overhaul + ARCHITECTURE.md with Mermaid diagrams (#616)
- Rewrote README with verified code examples for all 18 modules
- Added sections for semantica.split, semantica.conflicts, semantica.normalize
- Added Recipes section (GraphRAG pipeline, audit trail, AML engine, ontology-to-KG)
- Added REST API curl examples and MCP tools reference table
- Added 9 contextual GitHub admonitions (NOTE/TIP/IMPORTANT/WARNING/CAUTION)
- Fixed semantica.temporal (does not exist as standalone module — moved under semantica.kg)
- Added ARCHITECTURE.md with two Mermaid flowcharts:
  · Full data pipeline (all sources → processing → storage → outputs)
  · Decision intelligence lifecycle (record → link → query → govern → audit)
- Linked ARCHITECTURE.md from README nav and Architecture section
2026-06-12 22:42:46 +05:30
dependabot[bot] 946d826555 security(deps-dev): update pytest-cov requirement (#594)
Updates the requirements on [pytest-cov](https://github.com/pytest-dev/pytest-cov) to permit the latest version.

Updates `pytest-cov` to 7.1.0
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v3.0.0...v7.1.0)

---
updated-dependencies:
- dependency-name: pytest-cov
  dependency-version: 7.1.0
  dependency-type: direct:development
  dependency-group: benchmark-tools
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-12 18:05:46 +05:30
dependabot[bot] b1be9bec51 security(deps-dev): update pyarrow requirement (#593)
Updates the requirements on [pyarrow](https://github.com/apache/arrow) to permit the latest version.

Updates `pyarrow` to 21.0.0
- [Release notes](https://github.com/apache/arrow/releases)
- [Commits](https://github.com/apache/arrow/compare/go/v10.0.0...apache-arrow-21.0.0)

---
updated-dependencies:
- dependency-name: pyarrow
  dependency-version: 21.0.0
  dependency-type: direct:development
  dependency-group: arrow-features
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-12 18:03:35 +05:30
dependabot[bot] 56fb5d4e1e security(deps-dev): bump the snowflake-features group with 2 updates (#592)
Updates the requirements on [snowflake-connector-python](https://github.com/snowflakedb/snowflake-connector-python) and [cryptography](https://github.com/pyca/cryptography) to permit the latest version.

Updates `snowflake-connector-python` to 4.5.0
- [Release notes](https://github.com/snowflakedb/snowflake-connector-python/releases)
- [Commits](https://github.com/snowflakedb/snowflake-connector-python/compare/v3.0.0...v4.5.0)

Updates `cryptography` to 48.0.0
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/3.4...48.0.0)

---
updated-dependencies:
- dependency-name: snowflake-connector-python
  dependency-version: 4.5.0
  dependency-type: direct:development
  dependency-group: snowflake-features
- dependency-name: cryptography
  dependency-version: 48.0.0
  dependency-type: direct:development
  dependency-group: snowflake-features
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-12 17:55:10 +05:30
dependabot[bot] 5f1fa1ff32 security(deps): update requests requirement (#591)
Updates the requirements on [requests](https://github.com/psf/requests) to permit the latest version.

Updates `requests` to 2.32.5
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.28.0...v2.32.5)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.32.5
  dependency-type: direct:production
  dependency-group: security-critical
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-12 17:53:53 +05:30
Mohd Kaif 0dfdf66f82 docs(readme): remove dividers, rebrand to semantica-agi org (#612)
Remove all horizontal rule dividers for a cleaner premium look.
Replace all Hawksight-AI references with semantica-agi org URLs and update footer attribution from Hawksight AI to Semantica.
2026-06-11 21:14:12 +05:30
Mohd Kaif dba24c6ddb Remove architecture section from README
Removed architecture diagram and related content from README.
2026-06-11 20:13:52 +05:30
Mohd Kaif d7931f478a docs(readme): full module showcase, verified API examples, improved Mermaid chart (#611)
- Add working code examples for every module: semantica.ingest,
  semantica.semantic_extract, semantica.kg, semantica.reasoning,
  semantica.vector_store, semantica.provenance, semantica.ontology,
  semantica.deduplication, semantica.pipeline, semantica.temporal,
  semantica.export, semantica.visualization
- Verify all class names and method signatures against real source:
  add_node/add_edge (not add_entity/add_relationship), get_neighbors(hops=),
  state_at(), AgentContext(vector_store=, knowledge_graph=),
  WebIngestor.ingest_url(), DBIngestor.ingest_database(),
  EventDetector.detect_events(), GraphAnalyzer.identify_bridges(),
  DatalogReasoner (not DatalogEngine), store_decision(scenario=),
  OntologyValidator.validate(ontology), BiTemporalFact from semantica.kg
- Replace flat 4-blob Mermaid diagram with 7-layer flowchart showing
  all 14 modules as individual color-coded nodes with data-flow edges
- Expand Why Semantica comparison table from 7 to 10 rows
- Add temporal, provenance, and export to module table descriptions
2026-06-11 20:10:01 +05:30
Mohd Kaif 91fdfbc12b docs(readme): improve README — remove stats row, fix star history and contributors repo (#610) 2026-06-11 18:29:25 +05:30
Mohd Kaif a618b632c6 docs(readme): premium traction-focused rewrite with CLI banner (#608)
- Reposition as Context and Accountability Layer with auditable/governance messaging
- Add animated demo GIF, YouTube thumbnail, stats row, nav bar
- Add Context Graphs and Decision Intelligence sections with code examples
- Add comparison table, architecture diagram, performance benchmarks
- Add star history chart, contributors wall, star CTAs
- Fix CLI startup dashboard to match exact Rich output (centered banner, rounded panel, emoji feature labels)
2026-06-11 18:15:24 +05:30
Mohd Kaif 6a2428ab34 Merge pull request #607 from semantica-agi/chore/remove-benchmarks-extract-to-own-repo
chore: remove benchmarks/ — extracted to semantica-benchmarks repo
2026-06-10 18:27:59 +05:30
KaifAhmad1andClaude Sonnet 4.6 98cec956fe chore: remove benchmarks/ — extracted to semantica-benchmarks repo
Benchmarks moved to https://github.com/KaifAhmad1/semantica-benchmarks

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 18:16:45 +05:30
Mohd Kaif b42fbd978f Merge pull request #602 from Luffy2208/feature/236-public-api-ingestion-support
feat(ingest): add public API ingestion support
2026-06-10 15:58:05 +05:30
KaifAhmad1 a2047d696d docs(changelog): add PR #602 public API ingestion entries to Unreleased
Documents all added features, hardening fixes, and follow-up patches
from PR #602 (PublicAPIIngestor) including contributors Luffy2208 and
Sameer6305.
2026-06-10 15:47:11 +05:30
KaifAhmad1 fbdeb6873a fix(ingest): prevent mutable options mutation in batch/multi-example calls
Deep-copy **options in ingest_examples and batch_public_apis so that
mutable values (e.g. params dicts) are not shared across iterations.
Add rate_limit_delay to the config_only_key strip list in ingest_public_api
so it is not forwarded twice when passed via kwargs.
2026-06-10 15:38:30 +05:30
Sameer6305 b535839003 fix(ingest): harden public API auth validation 2026-06-10 12:47:36 +05:30
Mohd Kaif 504eacb1c0 docs(readme): remove GIF, keep only YouTube video section (#605) 2026-06-10 12:47:36 +05:30
Mohd Kaif 58a5d0abf4 docs(readme): add YouTube platform tour video and improve demo section (#603)
Replaces the bare GIF with a structured "See Semantica in Action"
section featuring a clickable YouTube thumbnail for the Knowledge
Explorer Tour (https://youtu.be/QfnNZg4-dZA) above the original GIF,
with named subsections and a feature-list subtitle.
2026-06-10 12:47:36 +05:30
Sameer Kadam baddfc3cdd fix(benchmarks): restore Python 3.8 compatibility in runner (#601) 2026-06-10 12:47:35 +05:30
Zohaib Hassnain b544f93493 docs(readme): add Knowledge Explorer demo gif (#590) 2026-06-10 12:47:35 +05:30
Sameer KadamandKaifAhmad1 de9fee05e0 test(benchmarks): add git-lfs infrastructure validation checks (#575) (#589)
* test(benchmarks): add git-lfs infrastructure validation checks

* fix(benchmarks): add assertions and skip markers to LFS validation tests

Three tests had no assertions and always passed vacuously. Replace with
real assertions gated by pytest.mark.skip so logic is reviewed now and
enforcement is enabled later by removing the decorator. Also fix fragile
CWD-relative paths to use Path(__file__)-anchored roots, drop unused os
import and dead expected_patterns list, replace os.walk with Path.rglob,
and add missing newline at EOF.

---------

Co-authored-by: KaifAhmad1 <kaifahmad087@gmail.com>
2026-06-10 12:47:35 +05:30
luffy2208 4d64c09ad3 fix(ingest): harden public API xml parsing 2026-06-09 14:10:40 +05:30
Mohd Kaif 484b9582a4 docs(readme): remove GIF, keep only YouTube video section (#605) 2026-06-09 13:03:42 +05:30
Mohd Kaif 43865a27a7 docs(readme): add YouTube platform tour video and improve demo section (#603)
Replaces the bare GIF with a structured "See Semantica in Action"
section featuring a clickable YouTube thumbnail for the Knowledge
Explorer Tour (https://youtu.be/QfnNZg4-dZA) above the original GIF,
with named subsections and a feature-list subtitle.
2026-06-09 12:52:31 +05:30
luffy2208 22382c2cf2 feat(ingest): add public API ingestion support 2026-06-09 06:52:58 +05:30
Sameer Kadam fe426532c3 fix(benchmarks): restore Python 3.8 compatibility in runner (#601) 2026-06-08 22:10:37 +05:30
Zohaib Hassnain e7ab18ea01 docs(readme): add Knowledge Explorer demo gif (#590) 2026-06-08 18:05:59 +05:30
Sameer KadamandKaifAhmad1 f7824d4907 test(benchmarks): add git-lfs infrastructure validation checks (#575) (#589)
* test(benchmarks): add git-lfs infrastructure validation checks

* fix(benchmarks): add assertions and skip markers to LFS validation tests

Three tests had no assertions and always passed vacuously. Replace with
real assertions gated by pytest.mark.skip so logic is reviewed now and
enforcement is enabled later by removing the decorator. Also fix fragile
CWD-relative paths to use Path(__file__)-anchored roots, drop unused os
import and dead expected_patterns list, replace os.walk with Path.rglob,
and add missing newline at EOF.

---------

Co-authored-by: KaifAhmad1 <kaifahmad087@gmail.com>
2026-06-08 17:05:34 +05:30
Mohd Kaif 12e5dc17ce Merge pull request #588 from Sameer6305/benchmark-infra-exploration
feat(benchmarks): add module-level filtering for benchmark runner (#575)
2026-06-06 19:15:32 +05:30
KaifAhmad1 1cf91f1621 fix(benchmarks): replace hardcoded module choices with dynamic discovery
- Extract _discover_modules() to scan benchmarks/ at runtime so the
  --module choices list stays accurate as directories are added or
  removed; eliminates the stale context_graph_effectiveness entry and
  the missing infrastructure entry from the original implementation
- Add an existence guard before passing the resolved path to pytest so
  a valid-looking choice that maps to a missing directory fails fast
  with a clear error instead of silently collecting 0 tests and exiting 0
- Print the active module filter to the console so users can confirm
  the filtered scope in runner output
2026-06-06 19:05:37 +05:30
Sameer6305 027f1caa38 feat(benchmarks): add module-level benchmark filtering 2026-06-05 15:59:50 +05:30
dependabot[bot] ea982aebd8 deps(deps): update scipy requirement from >=1.9.0 to >=1.13.1 (#587)
Updates the requirements on [scipy](https://github.com/scipy/scipy) to permit the latest version.
- [Release notes](https://github.com/scipy/scipy/releases)
- [Commits](https://github.com/scipy/scipy/compare/v1.9.0...v1.13.1)

---
updated-dependencies:
- dependency-name: scipy
  dependency-version: 1.13.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-05 15:39:57 +05:30
dependabot[bot] 2aff515e57 deps(deps): update opencv-python requirement from >=4.6.0 to >=4.13.0.92 (#586)
Updates the requirements on [opencv-python](https://github.com/opencv/opencv-python) to permit the latest version.
- [Release notes](https://github.com/opencv/opencv-python/releases)
- [Commits](https://github.com/opencv/opencv-python/commits)

---
updated-dependencies:
- dependency-name: opencv-python
  dependency-version: 4.13.0.92
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-05 15:36:37 +05:30
dependabot[bot] 2f65659b1c deps(deps): update python-dotenv requirement from >=0.20.0 to >=1.2.1 (#585)
Updates the requirements on [python-dotenv](https://github.com/theskumar/python-dotenv) to permit the latest version.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.20.0...v1.2.1)

---
updated-dependencies:
- dependency-name: python-dotenv
  dependency-version: 1.2.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-05 15:27:56 +05:30
Zohaib Hassnain e891cd8685 fix(explorer): restore graph from cached summary (#584) 2026-06-05 15:24:12 +05:30
Zohaib Hassnain eb63d5dcb4 fix(explorer): auto-settle full graph layout (#583) 2026-06-05 15:11:57 +05:30
Mohd Kaif b93c8b2133 Merge pull request #582 from semantica-agi/feat/rich-cli-polish
feat(cli): modern Rich terminal styling across all modules
2026-06-04 21:33:45 +05:30
KaifAhmad1 6cd0022baf docs(readme): document new CLI commands and v0.5.0 terminal experience
CLI section:
- Intro updated to mention startup dashboard and Rich polish
- Data In: added semantica watch examples; removed --watch flag from ingest
  (watch is now its own command)
- Developer Tools: new subsection covering init, doctor, changelog, shell,
  info with representative examples

What's New in v0.5.0:
- Added Modern CLI Experience subsection listing all 11 improvements:
  startup dashboard, grouped help, doctor, init, watch, changelog, shell,
  progress bars, elapsed timing, error cards, Windows UTF-8 fix
2026-06-04 21:24:02 +05:30
Sameer6305 16af844457 fix(cli): guard Progress output in JSON mode 2026-06-04 21:04:16 +05:30
Mohd KaifandCopilot Autofix powered by AI c0552ec527 Potential fix for pull request finding 'Empty except'
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
2026-06-04 18:04:57 +05:30
KaifAhmad1 9e66035b22 fix(pyproject): move [project.urls] after dependencies to fix TOML parse error
In TOML, declaring [project.urls] inside the [project] block causes all
subsequent key-value pairs (including dependencies = [...]) to be parsed
as project.urls.* keys, producing:
  ValueError: invalid pyproject.toml config: project.urls.dependencies
              must be string

Fix: move [project.urls] to after the dependencies array closes and before
[project.optional-dependencies], which is the correct TOML position for a
sub-table of [project].
2026-06-04 17:57:11 +05:30
KaifAhmad1 cbcdb61298 feat(cli): doctor, init, watch, changelog, timing, error cards, progress bars
Elapsed timing
- CLIContext._start records time.perf_counter() at context creation
- _ok() appends elapsed seconds to every success message automatically

Structured error cards
- _show_error_card() renders a red-bordered Rich Panel with title, detail,
  and an actionable hint line
- _ERROR_HINTS maps common exception types to fix suggestions
- _run_with_error_handling() now routes all errors through the card renderer
  instead of raising plain click.ClickException

Rich progress bars
- kg build: per-source Progress bar (SpinnerColumn + BarColumn +
  MofNCompleteColumn + TimeElapsedColumn) when multiple --source flags given;
  single-source path keeps the spinner
- ingest: spinner added (was missing entirely); shows filename and recursive flag

semantica changelog
- Hits GitHub releases API via stdlib urllib; compares latest tag against
  __version__; renders release notes in a rounded Panel; --json supported

semantica doctor
- Checks: Python version, semantica/rich versions, graph store reachability,
  vector store importability, LLM provider env vars, config file, log dir
- Rich table with ✓/⚠/✗ per check; summary error/warning count at bottom

semantica init
- Interactive wizard: graph backend, vector backend, optional LLM key
- Writes ~/.semantica/config.yaml via yaml.dump; --force to overwrite

semantica watch
- Wraps watchdog Observer; matches configurable glob patterns; auto-ingests
  on created/modified events; graceful Ctrl+C shutdown
- Guards ImportError with pip install semantica[watch] hint

_HELP_SECTIONS updated to surface init, doctor, changelog, watch
2026-06-04 17:46:00 +05:30
KaifAhmad1 3db344784d chore(pyproject): improve PyPI metadata for discoverability
- description: rewritten to lead with the accountability/provenance
  angle and name concrete capabilities; drops emoji which render
  inconsistently across PyPI clients
- keywords: expanded from 8 to 23 terms covering modern search queries
  (ai-agents, llm, graph-rag, decision-intelligence, provenance, etc.)
- classifiers: added Information Analysis, Text Processing::Linguistic,
  Database Engines/Servers, Information Technology audience
- [project.urls]: new section with Homepage, Documentation, Repository,
  Changelog, Bug Tracker, Discord — shown prominently on the PyPI page
  and drive clicks to GitHub/docs
- optional-dependencies: added watch = [watchdog>=3.0.0]; bundled into all
2026-06-04 17:37:11 +05:30
Mohd KaifandCopilot Autofix powered by AI a41b587bc9 Potential fix for pull request finding 'Empty except'
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
2026-06-04 17:18:37 +05:30
KaifAhmad1 4f1740e19c fix(cli): reconfigure stdout/stderr to UTF-8 on Windows at import time
Prevents UnicodeEncodeError on the default cp1252 code page when Rich
renders box-drawing characters and emoji in the startup banner and panels.
Placed before all other imports so Click and Rich capture the already-
reconfigured streams. Uses reconfigure() (Python 3.7+) which modifies the
existing TextIOWrapper in-place rather than replacing sys.stdout.
2026-06-04 17:18:05 +05:30
KaifAhmad1 fab300c498 feat(cli): startup dashboard, Rich help groups, and interactive shell
- _BANNER: ASCII art shown when `semantica` is run with no subcommand
- _show_startup: dashboard panel with Graph Store / Vector Store / Profile
  status cards; suppressed under --quiet and --json
- RichGroup: click.Group subclass that renders --help with grouped sections
  (Data Ingestion, Intelligence, Knowledge Graph, Analytics, Export & Viz,
  Infrastructure, Services, Tools) plus a Quick Start block
- main decorator: cls=RichGroup + invoke_without_command=True to wire both
- `semantica shell`: interactive REPL that dispatches subcommands while
  sharing the parent CLIContext; supports readline on Unix for line editing
2026-06-04 17:13:00 +05:30
KaifAhmad1 dbf6ef7b0b fix(cli): resolve JSON spinner leakage and cleanup review findings
- Guard parse_cmd spinner with `fmt == "json"` (default format) to prevent
  Rich status output from polluting machine-readable stdout in piped usage
- Remove unused `Rule` import from cli.py
- Remove unused `_orig_print` variable in verify_rich_cli.py
- Unify semantica.cli import style in verify_rich_cli.py; use cli_mod.main
2026-06-04 16:57:00 +05:30
KaifAhmad1 b821d4e7c6 fix(docs_check): make rich import optional for CI
The docs validation workflow runs python docs_check.py with no pip
install step, so rich is not available. Wrap the rich import in a
try/except ModuleNotFoundError and fall back to plain print() calls
so the script works in both environments:
- With rich installed: coloured pass/FAIL output
- Without rich (CI): plain text pass/FAIL output, same exit codes
2026-06-04 12:38:16 +05:30
KaifAhmad1 311a7b43b1 feat(cli): modern Rich terminal styling across all modules
## Summary

Overhaul the CLI and all library modules to produce polished, modern
terminal output comparable to tools like uv, gh, and cargo. Rich was
already a declared dependency but barely used — this commit wires it
throughout every layer.

## Changes by layer

### semantica/cli.py — visual overhaul
- Add imports: `box`, `Panel`, `Rule`, `Syntax`, `Text` from Rich
- Add 7 style constants (`_BRAND`, `_KEY`, `_VAL`, `_DIM`, `_SUCCESS`,
  `_WARN_STY`, `_TABLE_BOX`) for a consistent colour palette
- `_ok()` now prefixes output with a green ✓ checkmark
- New `_info()` helper (neutral · bullet, respects --quiet)
- New `_warn()` helper (yellow ⚠ prefix, never suppressed)
- New `_pprint()` helper: renders dicts/lists as syntax-highlighted JSON
  (Rich Syntax, monokai theme) instead of raw Python repr; strings
  pass through unchanged; respects --quiet
- `info` command: banner replaced with a rounded Rich Panel showing
  version + tagline; component table uses SIMPLE_HEAD box
- All 7 table sites updated: `box=SIMPLE_HEAD`, `show_edge=False`,
  consistent `_KEY`/`_VAL` column styles (KG Stats, Reasoning Engines,
  Recent Decisions, Configured Backends, Backup Info, MCP Tools)
- `_run_build()`: `console.status(spinner="dots")` wraps the blocking
  build call; skipped under --quiet / --json
- `parse`, `extract`, `embed generate`, `reason run`, `reason explain`,
  `deduplicate`: each wraps its long-running operation in a status
  spinner, guarded by --quiet / --json
- All 30+ `console.print(result)` calls replaced with `_pprint()`
- All raw `[yellow]Warning:[/yellow]` and "not running" patterns
  replaced with the new `_warn()` / `_WARN_STY` style

### semantica/explorer/__init__.py
- Error messages use `Console(stderr=True)` with `[bold red]Error:[/bold red]`
- Graph loading wrapped in `console.status()` spinner
- Startup info replaced with a cyan-bordered Rich Panel showing URL,
  API docs, and health endpoint

### Library internals — replace print() with structured logger calls
All modules below had active `print()` calls that bypassed the logging
framework, corrupted spinners, and polluted stdout in piped/programmatic
use. All replaced with appropriate `self.logger.*` calls:

- `semantica/kg/graph_builder.py` — 23 calls: entity resolution
  progress, graph structure steps, GraphStore persistence timing, and
  the two `='*60` completion banners → `self.logger.info/debug()`
- `semantica/semantic_extract/methods.py` — 4 verbose-mode debug
  prints → `logger.debug()`
- `semantica/semantic_extract/relation_extractor.py` — progress +
  error prints → `self.logger.debug/warning()` with `exc_info`
- `semantica/semantic_extract/triplet_extractor.py` — same pattern
- `semantica/semantic_extract/semantic_network_extractor.py` — batch
  error prints → `self.logger.warning/error()`
- `semantica/semantic_extract/coreference_resolver.py` — error print
  → `self.logger.error()`
- `semantica/semantic_extract/providers.py` — debug print →
  `self.logger.debug()`

### Tooling
- `benchmarks/benchmarks_runner.py`: Rule banner, ✓/✗/⚠ status lines,
  Rule separators around regression alert
- `benchmarks/infrastructure/compare.py`: removed manual ANSI escape
  codes; comparison output is now a Rich Table with SIMPLE_HEAD;
  summary uses coloured Rule + styled SUCCESS/FAILURE messages
- `cookbook/advanced/snowflake_ingestion_examples.py`: `_section()`
  helper using Rule; tabular data rendered as Rich Table; result lines
  use ✓/✗/⚠ prefixes; logger.error already present, retained
- `docs_check.py`: `pass`/`FAIL` lines use `[bold green]` /
  `[bold red]`; summary uses styled output

## Tests
- `tests/test_cli_commands.py`: fix 3 pre-existing mock mismatches
  - `test_kg_stats_json_with_mock`: mock now uses `compute_metrics()`
    (the method the code actually calls) instead of `get_statistics()`
  - `test_dry_run_not_needed_extract_is_read_only` and
    `test_stdin_input`: mock now provides `NERExtractor`,
    `RelationExtractor`, `TripletExtractor`, `EventDetector`
    (the classes the code imports) instead of `SemanticAnalyzer`
  Result: 230/230 tests pass (was 227/230)
- `tests/verify_rich_cli.py`: new verification script; exercises all
  14 command groups (92 --help checks, table rendering, dry-run
  formatting, --json mode, _pprint helper); 111 pass, 0 fail
2026-06-04 12:34:12 +05:30