Artifact evaluation is a deterministic review aid. It makes declared evidence, open questions, rendered output, and policy consequences inspectable. It does not certify that an artifact is true, accessible in practice, journalistically sound, or safe to act on.
What the system can responsibly report
Can establish
Schema validity, internal references, declared clock order, deterministic fingerprints, rendered mark evidence, and named policy outcomes.
Cannot establish
That a source is truthful, a definition is appropriate, a causal claim is valid, a reader understood the display, or a real assistive-technology workflow succeeded.
Must remain visible
Unknown facts, manual checks, policy exceptions, source limitations, disputed claims, correction history, and transfer losses.
Extend a policy without hiding its basis
Artifact audits are opt-in diagnostics, not an authorization system. Ordinary renderChart calls remain available without a contract; a governed host must enforce its publication or action boundary independently. Neither an MCP tool response nor CLI exit code 0 grants approval: conditional results still contain open work. Manual-check resolution, reviewer authentication, and revision-bound release decisions are not implemented by this contract kernel.
Organization-owned policies are ordinary versioned objects composed from shared audit evidence. Use a namespaced ID, pin a version, keep the rule object inspectable, and pass the policy explicitly at the release boundary. A local policy must not mutate a built-in policy or convert manual findings into facts.
JSX
import { ARTIFACT_POLICIES, evaluateArtifact, } from "semiotic/artifact" import { renderChartWithEvidence } from "semiotic/server" const newsroomPreview = { ...ARTIFACT_POLICIES.editorial, id: "example.newsroom-preview", version: "1.0.0", label: "Newsroom preview", description: "Editorial checks for material that has not been published.", rules: { ...ARTIFACT_POLICIES.editorial.rules, // Keep manual review visible; do not convert it into an automatic pass. allowManualChecks: true, }, } const evaluation = evaluateArtifact(component, props, contract, { policy: newsroomPreview, now: reviewClock, render: renderChartWithEvidence, })
Add an obligation
Start with a product decision the new check will change. If a proposed field or rule does not alter a recommendation, enable an audit, or preserve information across a boundary, keep it out of the wire contract.
Stable ID
Names one condition so results remain comparable across releases.
Relation
Places the condition under claim support, time, reception, or another contract relation.
Explicit status
Returns pass, fail, warn, manual, unknown, or not-applicable without collapsing them.
Evidence path
Points to the contract or rendered fact a reviewer can inspect.
Repair
Explains a bounded next step without fabricating missing source or review facts.
- Locate the evidenceReuse a current validator or auditor before adding another source of truth.
- Add the findingGive it one stable ID, relation, path, message, and bounded repair.
- Choose the consequencePut release behavior in a named policy; do not bury it in the evidence collector.
- Test both sidesCover a valid case, a true defect, absent information, malformed input, and any exception path.
- Regenerate owned surfacesUpdate schema, reference, inventory, API report, and machine-readable docs through their generators.
Keep manual review manual
Keyboard and screen-reader task completion, audience comprehension, source suitability, editorial judgment, and domain interpretation require attributable review records. A static heuristic may request that work, but it cannot record success on a person's behalf.
When automated evidence changes, invalidate dependent approval or action records instead of silently carrying them into the new revision. Corrections preserve prior claim text and status so a reviewer can reconstruct what changed.
Make exceptions bounded and reviewable
An exception names one rule, a rationale, an owner, and an expiry or review time. The evaluator accepts it only when the selected policy permits exceptions and its bound is valid at the explicit evaluation clock.
JSX
const exception = { rule: "requireSettledTime", rationale: "The preview is explicitly labeled provisional.", owner: "election-desk-editor", reviewAt: "2026-11-04T08:00:00Z", } // Evaluation reports the exception as applied or rejected. It never edits // the underlying evidence, time state, or claim status. evaluateArtifact(component, props, contract, { policy: "editorial", exceptions: [exception], now: "2026-11-04T06:00:00Z", })
Verification before review
BASH
npm run check:artifact-contract npm run typescript npm run typescript:tests npm run lint npm run check:api-surface npm run size
Also run the focused browser, documentation, CLI, MCP, server-render, or transfer test for every surface the change affects. Bundle and compatibility limits are product constraints, not values to raise solely to accept a new rule.