Skip to main content

CI

Evidence Loop Visibility Engine

Evidence before action.

A deterministic, offline reference implementation for turning bounded visibility evidence into one reviewable proposal per site.

A measured evidence loop moving through Observe, Choose, Propose, a visible verification gate, Record, and three honest terminal states

The 60-second explanation

The engine accepts strict, timestamped evidence packets, chooses one eligible opportunity per site, and produces a proposal without changing the site. It then verifies the proposal's lineage, routing, and approval boundary before it records an atomic receipt.

Every run stops in an explicit state: approval-required, clean-no-op, or blocked. Selection and receipts are deterministic, so the same exact input bytes produce the same decision and digest. The installed runtime uses only the Python standard library and makes no network, browser, provider, or credential calls.

This is a control loop for reviewable decisions—not a black-box promise of rankings, traffic, answer inclusion, citations, or causality.

Who it is for

  • Engineers building evidence-first SEO, AEO, GEO, or LLMO tooling.
  • Technical SEO and editorial teams that need a reproducible proposal trail.
  • Evaluators testing lineage, failure containment, and human approval gates.
  • Operators who want a useful offline core before connecting any live system.

Public core and private operation

This repository is a complete, useful offline core. It is not an intentionally crippled demo, and its Apache-2.0 implementation has no artificial lock-in. Real adapters, calibrated evidence and history, evaluation and operator judgment, team workflows, and managed operation can add value around the core without changing what the public package honestly does.

See the open-core boundary for the extension points, clean-room rule, and the line between public behavior and separately operated systems.

Quickstart

Python 3.10+ is required. Runtime dependencies are the Python standard library only.

python3 -m venv .venv
.venv/bin/python -m pip install -e .
.venv/bin/evidence-loop validate --input examples/normal.json
.venv/bin/evidence-loop run --input examples/normal.json --output work/normal
.venv/bin/evidence-loop demo --output work/demo
.venv/bin/evidence-loop benchmark

The package artifact exposes the same evidence-loop command. The committed examples/ files are readable fixtures; packaged resources make demo and benchmark work after wheel or source-distribution installation too.

For release artifact validation, install the optional build tools and run the same gate:

.venv/bin/pip install -e '.[release]'
.venv/bin/python scripts/artifact_smoke.py

One bounded cycle

Observe -> Choose -> Propose -> Verify -> Record

Choose is explicit: fresh, non-missing evidence is eligible; lower numeric priority wins, then the stable opportunity ID breaks ties. Propose is the runtime's Act step and never mutates a site. Verify is a distinct fail-closed boundary before Record. See LOOPS.md and docs/loop-engineering.md.

Input and output

An input document has reserved example URLs, evidence, and opportunities:

{"schema_version":"1","sites":[{"site_id":"site-a","site":"https://a.example","evidence":[{"evidence_id":"ev-1","source_kind":"manual-observation","observed_at":"2026-01-15T10:00:00Z","completeness":"complete","freshness":"fresh","uncertainty":"low"}],"opportunities":[{"opportunity_id":"opp-1","domain":"technical-seo","title":"Review indexability signals","priority":1,"evidence_ids":["ev-1"],"approval_gate":"human-review"}]}]}

run.json preserves site, evidence IDs, source kind, timestamp, completeness, freshness, uncertainty, routed capability, and approval gate:

{"terminal_state":"approval-required","input_sha256":"<SHA-256 digest of exact input bytes>","sites":[{"site_id":"site-a","status":"approval-required","selected_opportunity_id":"opp-1","proposal":{"approval_required":true,"mutation_allowed":false,"evidence_ids":["ev-1"]}}],"safety":{"offline":true,"site_mutation":false,"provider_access":false}}

The CLI prints only safe counts, IDs, terminal state, and zero external calls or cost. last-success.json is atomically replaced only for a non-blocked run.

Capability maturity

These are deterministic proposal templates, not SEO analysis or outcome predictions:

Allowlisted module Maturity Proposal boundary
measurement-integrity Implemented deterministic Preserve source, window, completeness, freshness, uncertainty
technical-seo Implemented deterministic Propose an indexability/crawlability review
search-intent-content Implemented deterministic Propose an intent clarification review
aeo-answerability Implemented deterministic Propose a question/answer structure review
geo-citation-research Synthetic observation Observe a citation surface; never fabricate a GEO score
llmo-sampling Synthetic observation Specify fixed-prompt sampling, variance, terms, and cost gates
brand-governance Approval-gated Propose claim and voice consistency review
marketing-conversion Approval-gated Propose a measured conversion hypothesis review

Unknown capability domains block their entire site lane. Other sites remain isolated.

Commands and exit codes

  • validate --input FILE: strict validation; exit 0 when valid, 2 on a global input/path error.
  • run --input FILE --output DIR: one bounded cycle; exit 0 for approval-required or clean-no-op, 3 for global blocked, and 2 for an input/output error.
  • demo --output DIR: committed synthetic normal, clean-no-op, and contained failure examples; exit 0 when all complete.
  • benchmark: deterministic public conformance cases and pass rate; exit 0 when all cases pass.

Security and non-goals

The installed engine/CLI opens no network connection, invokes no browser or provider, reads no credential environment, spawns no process, and mutates no site. It rejects duplicate JSON keys, NaN/Infinity, oversized or deeply nested input, unsafe IDs/timestamps/strings, lexical traversal, and symlink ancestors or children. Output receipts are atomic. The release scanner is separate defense-in-depth tooling and may invoke local Git to enumerate tracked files; its heuristic is not proof of safety.

This is not an autonomous SEO, growth, ranking, traffic, answer, citation, or conversion system. It does not claim special markup, llms.txt, or any file guarantees Google or another system's visibility. It does not publish, schedule, create backlinks, submit pages, or access private repositories. Fixtures are synthetic and use reserved example domains.

Documentation and development

Run make check for tests, compilation, and the release scanner. Artifact build/install smoke checks are in scripts/artifact_smoke.py.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evidence_loop_visibility_engine-0.2.0.tar.gz (39.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evidence_loop_visibility_engine-0.2.0-py3-none-any.whl (23.8 kB view details)

Uploaded Python 3

File details

Details for the file evidence_loop_visibility_engine-0.2.0.tar.gz.

File metadata

File hashes

Hashes for evidence_loop_visibility_engine-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f45e52cdd276e50db72f7d05f4ac4e26b4e0836d196a19feb590909399e91989
MD5 9ae6ac707ae5c1f81019879374730020
BLAKE2b-256 a55c0b169d3b62f8a6125a820c2a1c0a69789b53b8df81b8496739fd47885968

See more details on using hashes here.

Provenance

The following attestation bundles were made for evidence_loop_visibility_engine-0.2.0.tar.gz:

Publisher: publish-pypi.yml on NavidBroumandfar/evidence-loop-visibility-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file evidence_loop_visibility_engine-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for evidence_loop_visibility_engine-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7292b7a02589384b5efa66467139b17bee2143d230bc6d5338a3d3fc6f3e1571
MD5 ac0758b1779ac862c60561508639fa77
BLAKE2b-256 e78915a4a00167b1c05fb0c519c18c578dea4f67bef5bc23f0c720310b98c154

See more details on using hashes here.

Provenance

The following attestation bundles were made for evidence_loop_visibility_engine-0.2.0-py3-none-any.whl:

Publisher: publish-pypi.yml on NavidBroumandfar/evidence-loop-visibility-engine

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page