* docs(mcp): update stale MCP tool count from 12 to 15
TOOLS in semantica/mcp_server/__init__.py ships 15 tools, but the README
table stopped at get_graph_summary and docs/guides/mcp-server.md still
said 12 in its opening line and setup steps while saying 15 elsewhere on
the same page. Add the three missing rows (query_graph, update_node,
delete_node) to the README table and align the guide's counts. Also fix
the same stale count in the openclaw integration docstring.
Fixes#1487
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* docs(openclaw): fix stale MCP tool count 12 → 15 and add missing tool rows
---------
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Sameer Kadam <sskadam6305@gmail.com>
Co-authored-by: Sameer Kadam <sameerkadam@Mac.lan>
Bump version, cut CHANGELOG's Unreleased section into 0.6.8, backfill
changelog entries for the 96 PRs merged since v0.6.7 that were missing
from it, and refresh version-dependent references in README/docs.
This release exists primarily to ship the release-signing hardening
that landed in #1266/#1329 (SLSA build-provenance attestation +
Sigstore signing, with .sigstore.json bundles attached to the GitHub
Release) — v0.6.7 was tagged two days before that fix merged, so every
release OpenSSF Scorecard's Signed-Releases check has seen so far
predates it. Cutting v0.6.8 is what actually exercises the fix.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* docs(setup): tighten prose across quickstart, installation, and CLI setup guides
* fix(cli-setup): correct semantica-server default binding address
The server.py main() binds to 127.0.0.1 by default and documents
SEMANTICA_HOST as the override to expose beyond localhost.
The previous documentation (from main and carried through this PR)
incorrectly stated 0.0.0.0:8000, which would lead users to believe
the server is network-accessible by default.
Fix all three occurrences in cli-setup.md:
- Installed Commands table
- When to Use Each Command prose bullet
- REST server usage example code comment
---------
Co-authored-by: AutoHarness Bot <bot@autoharness.local>
Co-authored-by: Mohd Kaif <98801504+KaifAhmad1@users.noreply.github.com>
Co-authored-by: Sameer Kadam <sskadam6305@gmail.com>
* docs(resources): tighten prose across FAQ, learning paths, citation, and license
* docs(faq): cut two leftover chained/dramatic-pause colons
"unstructured data: documents, APIs, databases: into structured..."
chained two colons in one sentence, and "...reached a conclusion:
not just what it said" is the exact "X: not Y" pattern #1426 flags
for removal. Neither was touched by this PR's original pass.
* docs_check: raise Mintlify export timeout from 300s to 600s
The "Validate Documentation" CI check has been timing out at exactly
300s on this branch, on main, and on an unrelated branch in the same
window (3 consecutive retries here, all with the same "timed out
after 300 s" error and no other diagnostic output). Local runs finish
well under the limit, so this isn't a content problem — the export
step just has no headroom left as the docs site has grown to 27
modules. Doubling the timeout gives it room without masking real
export failures, which still fail immediately with their own error.
---------
Co-authored-by: AutoHarness Bot <bot@autoharness.local>
Co-authored-by: KaifAhmad1 <kaifahmad087@gmail.com>
"Claude Desktop, ..., Cline: 15 MCP tools exposed" chained a second
colon onto the "Integrations:" label colon, the exact pattern #1426
asks this cleanup pass to remove. Split into two sentences.
Google Gemini, HuggingFace, DeepSeek, and Novita AI rows were left as
a stray colon with no notes. Fill them in to match the pattern of the
other rows, sourced from semantica/semantic_extract/providers.py.
* docs(ontology): document quality gate threshold semantics
The Ontology Quality Gate section (#1397) showed a thresholds={...}
example but never explained what min_coverage, max_errors,
max_warnings, or fail_on_warnings actually mean, or that
fail_on_warnings is a separate parameter rather than a thresholds
key. Add a concise defaults/semantics table, verified against
OntologyQualityGate.DEFAULT_THRESHOLDS and __init__ in quality_gate.py.
* docs(ontology): explain thresholds as prose instead of a table
A four-row table was heavier than this needed; each threshold's
meaning reads faster as two connected sentences.
Replace the long feature-dump landing page with a lean "Welcome to
Semantica" page: a two-line problem/positioning statement (deterministic
semantic layer, no LLM required for graph construction, reasoning, or
provenance), five capability bullets, the multi-provider quickstart
snippet, and a 4-step onboarding path. Drops the redundant module
table, industry-use-case grid, and duplicate link lists in favor of
linking out to Core Concepts, guides, and the API reference. Keeps a
collapsed module-list accordion so the page still satisfies
docs_check.py's full-module-coverage check.
The three limit-exceeded messages in validate_shacl now name the env var
that controls each limit, and the SHACL validation guide documents all
four resource-limit variables with their defaults.
The Banking domain example built basel_cre20_text / bcbs239_text with bare indented string continuations (no parens, no backslash), raising IndentationError. Wrapped both in parentheses like the Clinical example. Separately, the guide passed max_hops= to retrieve() and stated it overrides the constructor's expansion depth: it does not. AgentContext.retrieve(max_hops=) is only consumed by _apply_proximity_metadata (a proximity-radius filter that needs anchor_node), and expansion depth is fixed by max_expansion_hops passed into ContextRetriever. Removed max_hops from the non-anchored retrieve call, annotated the anchored ones, corrected the intro and tuning sections, and noted query_with_reasoning() does take a real per-call max_hops. Also replaced an invented node/edge count comment with the real store() return keys and qualified an ingest_file() reference.
Flagship pass establishing the crisp-prose style for the rest of
docs/: remove em dashes from explanatory prose (leave them in
simulated document/alert string literals, which are data, not our
voice), replace colon-as-dramatic-pause constructions, and fix two
broken relative links in reference/context.md ([Reasoning](reasoning)
and [Provenance](provenance) were missing their leading slash and
would 404 on the live site, the same class of bug fixed sitewide in
PR #1407). concepts.md's intro also picks up the new context/semantic
layer tagline. No code examples, tables, or technical content
changed.
* docs(index): cut marketing copy, remove em dashes, make crisp
Replace the narrative hook and rhetorical-question opening with a
direct statement. Trim the persuasive framing on the problem list
and industry section to plain, factual bullets. Replace every em
dash with plain sentence structure or a colon, and drop the
repeated colon-as-dramatic-pause construction from the opening.
No content or links removed; only the framing and punctuation
changed.
* docs: update tagline to context/semantic layer for high-stakes domains
Replace "The Accountability and Context Layer for AI" with "The
Context and Semantic Layer for AI in High-Stakes Domains" across
docs.json (description, og:title) and index.md (frontmatter
description, opening sentence, and the Core Concepts step bullet).
Audit trail and accountability remain a downstream property, not
the headline framing.
Remove the standalone FAQ and Changelog top-level tabs. FAQ and
Community pages move into the Overview tab as their own groups
(still fully reachable, just relocated). Changelog was only an
external link to GitHub releases and had no pages of its own.
Split the API reference pages (reference/*) out of the Modules tab
into a new, dedicated API Reference tab, so Modules now holds only
the conceptual guides and API Reference holds every module's class
and function documentation.
* docs(getting-started): fix broken APIs in KG and GraphRAG tabs
* docs: tighten GraphRAG example
* docs: use extract_text() so the PDF example doesn't keyError
* chore: ignore .worktrees directory
* feat(evals): add eval metric and result models
* feat(evals): add evaluator registry
* feat(evals): add exact/regex/range/length evaluators
* feat(evals): add keyword/levenshtein/rouge/llm-as-judge evaluators
* feat(evals): add decision_scores composite evaluator
* feat(evals): add evaluation runner
* feat(evals): expose public API and module proxy
* fix(evals): resolve __all__ names and repair usage example
* docs(evals): add usage docs and changelog entry
* style(evals): tidy evaluator metadata and wiring comments
* fix(evals): honor expected arg and classify error metrics
* fix(evals): export get_evaluator and fix shared meta default
* fix(evals): guard provenance check against non-dict metadata
* docs: add objective layer design spec for semantica.evals
* docs: refine objective spec for consistency with AIP Evals semantics
* docs: add implementation plan for evals objective layer
* docs: fix plan tests to use module-level pytest import
* feat(evals): add per-metric objective support to runner
* docs(evals): document per-metric objectives
* docs(evals): fix minimize example threshold to demonstrate pass
* fix(evals): validate objective config shape strictly
* docs(evals): clarify objective examples and Boolean semantics
* fix(evals): honor direction-only minimize, fail fast on objectives, deep-merge case config
- minimize without threshold is now a no-op, matching maximize (issue #1091
requires thresholds to be optional for both directions)
- objective config is parsed for every case before any target_fn/evaluator
runs, so an invalid per-case objective rejects the run up front
- per-case evaluator config deep-merges over the global config so a case
that overrides one setting keeps the run-level objective
- regression tests for all three, plus updated docs/CHANGELOG
Addresses 3 of 4 Qodo findings on #1092 (the 4th, 'result models defined
twice', is a false positive: types live in types.py)
* fix: finalize eval objectives review
---------
Co-authored-by: Sameer Kadam <sskadam6305@gmail.com>