Synaplan
기업을 위한 오픈소스 AI 플랫폼
기업 운영에서 인간 개입 없이 진행되는 비중과 그 근거 데이터를 제공합니다
Per business operation, how much of a company runs without a human in the loop - with the evidence behind every number, including what could not be measured.
비즈니스Python · TypeScriptGitHub @whiteknightonhorse온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Evidence, not claims — an ERC-8004 validator that measures, per business operation, how much of a company runs without a human in the loop, and publishes the evidence behind every number.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Each badge is a live run, not a picture — what they assert is below.
What it is. A verification layer for businesses operated by AI agents. It measures, per business operation, how much of a company runs without a human — and publishes the evidence behind every number, including what could not be measured.
Why. Anyone can write "AI-powered" on a landing page; nobody can tell that apart from a business machines actually run. Provek is an ERC-8004 validator: the standard supplies identity and transport, the methodology is ours and is public, so any third party can recompute a verdict from the same inputs — every read is anonymous and credential-free.
What it does.
L0–L5 level per operation (never one
number per company), evidence classed by forgery cost, and a self-declared accountability block
that never enters the score.check_did_not_run is not nothing_qualified is not unreadable), never collapsed to zero.verified and the declared address is https and our last anonymous check reached it —
any one of those failing removes the link and shows the reason instead. How to get one:
provek.dev/method/#the-order-link.stale on its own. Corrections are published in full, not quietly fixed — see the
corrections log.A later phase (a verified agent commissioning and witnessing paid work) is specified and not built; why explains the boundary.
Below is passport.verified.operations, taken from
/data/passports/git_whiteknightonhorse_APIbase.json —
the complete array, extracted from that subtree and re-serialised with json.dumps(..., indent=2).
It is one subtree of a passport, not a whole one: the rest carries self_reported,
accountability and provenance at passport.*, and coverage at passport.verified.coverage.
tests/test_readme_fragment_is_verbatim.py fails the build if this stops being an emitted
passport's operations array, entire and in order.
[
{
"operation": "development_initiation",
"level": "L3",
"measured": true,
"confidence": "inferred",
"limiters_applied": [
"O1:mixed_classes->inferred"
]
},
{
"operation": "deployment",
"level": "check_did_not_run",
"measured": false,
"confidence": null,
"limiters_applied": []
},
{
"operation": "treasury_control",
"level": "check_did_not_run",
"measured": false,
"confidence": null,
"limiters_applied": []
}
]
Three things here are the whole product — two quoted above, and the third,
"verifier_affiliation": "same_owner", one level up at passport.verifier_affiliation:
"level": "check_did_not_run" | Absence is a state, never a zero. A verdict always says which reason applies; a zero would mean "measured, and fully non-autonomous", a different claim about the world. |
"confidence": "inferred" | The published number is never stronger than the measurement behind it. |
"verifier_affiliation": "same_owner" | Every record discloses whether the verifier and the subject share an owner — re-derived at each re-measure, not a label set once and trusted forever. The verifier's own GitHub owners are listed in data/operator_owners.json. |
Data flows left to right:
collector -> scorer -> passport -> registry -> web
src/collector src/verify src/passport src/registry web/ (Preact, prerendered)
anonymous determin- verified / status rows, static pages + a few
public reads, istic code, self-reported valid_until Cloudflare Functions
secrets no LLM in kept as (intake, badge, brief)
redacted any verdict separate branches
scripts/cohort.py is the production emitter; scripts/push.sh is the only door outward and runs
every gate (secrets, scope, laws, language, lint, build, tests) before any push.
The pipeline reads public sources with no credential at all, so any reader can recompute a verdict — not only whoever holds a token.
git clone https://github.com/whiteknightonhorse/provek && cd provek
(cd web && npm ci && npm run build) # part of the suite judges the emitted site, not only the code
python3 -m pip install --upgrade pip # a stock pip mis-resolves pytest-cov's own
# coverage[toml] pin against our hash-pinned set
python3 -m pip install -r requirements/ci-tests.txt # pinned test deps (PyYAML etc.), same set CI uses
python3 -m pytest -q # the suite prints its own count
python3 scripts/cohort.py # re-emits public/registry + public/passports
What it does. A web page, https://provek.dev/witness/, for the
GenLayer Intelligent Contract described in this repository's witness integration
(integrations/genlayer-witness/). A visitor can look up the records the contract holds for a
subject, request a new check, and watch that request go through GenLayer consensus until it is
FINALIZED and a PASS or FAIL record exists. Two criteria exist: url_reachable (does the URL
answer) and artifact_hash (do the exact bytes at the URL hash to a declared sha256). It is not
Provek's own WitnessRecord pages under /w/; the nav and every heading say "GenLayer Evidence
Witness" so the two are never confused.
| Page | https://provek.dev/witness/ |
| Contract | 0x99C23e1794ed35b429161fBEB00967D0c81DC491 |
| Explorer | https://scan.bradbury.genlayer.com/address/0x99C23e1794ed35b429161fBEB00967D0c81DC491 |
| Network | GenLayer testnet Bradbury Phase 2 (chain 4221), RPC https://rpc-bradbury.genlayer.com (redeployed 2026-10-28 after GenLayer reset the testnet on 2026-10-24; the pre-reset record is kept in deployment.json, previous_deployments) |
| Client library | genlayer-js 2.0.0-rc.2, an exact pin in web/package.json and web/package-lock.json |
Design: reads go straight to the chain, writes go through an operator relay.
witness(...) accepts only the operator as caller
(only the operator may request a witness check), so a visitor's wallet cannot submit. The page's
"Request a check" form therefore posts to /api/witness-submit (a Cloudflare Pages Function,
web/functions/api/witness-submit.js), which validates the request exactly as the contract does
(a bad request is a 400 naming the field, never a wasted transaction), applies rate limits,
signs with the operator key held as the Pages secret GL_OPERATOR_KEY (every v0.6 write carries one fixed fee object, the one that finalized
the D2 writes, because the SDK's fee estimate fails on Phase 2; if the operator wallet, read with eth_getBalance, holds less
test GEN than its deposit, the answer is a 503 and nothing is sent; GET reports funded and fee_quote), and answers 202 with
{tx_hash, explorer_url, track_url}. The page then opens /witness/?tx=<hash> and follows the
lifecycle by reading the chain. The relay only signs and sends; the verdict is produced by GenLayer
validators, each fetching the evidence URL on its own, and is read back from the chain.429 with
Retry-After). Counters live in the KV binding WITNESS_RL; they hold counts only, never a request
body, and the client key is a keyed hash of the address under a per-day message, never the address.
KV has no atomic increment, so the daily cap is exact to within a few simultaneous requests.GET /api/witness-submit reports
{"enabled": false, ...}, POST answers 503, and the page shows "submissions temporarily
disabled" while the read path keeps working. An upstream failure is a 502 carrying the upstream
message with any key material removed. The key is never logged and never present in a response.How a reviewer reproduces the whole workflow (no wallet needed):
git:whiteknightonhorse/provek is pre-filled;
the records it lists were written by earlier checks.url_reachable, enter https://provek.dev/ and submit. The page
moves to /witness/?tx=<hash>.PENDING, PROPOSING, COMMITTING, REVEALING,
ACCEPTED) until FINALIZED. A just-submitted hash may show "not indexed yet" for up to a minute.PASS, its observation, evidence digest and a link to the
transaction in the explorer.FAIL: request artifact_hash for https://provek.dev/ with an expected digest of 64
zeros. The validators fetch the bytes, compute the real sha256, find it differs from the
declaration, and the record reads FAIL with the digest they computed.UNDETERMINED is a possible honest outcome (validators could not agree, typically because the
URL was unavailable to them); the page says so and claims no record.Tests (from the Provek repository root; no network, no real key):
(cd web && npm ci && npm run build)
python3 -m pytest tests/test_witness_relay.py tests/test_witness_page.py -q
./scripts/push.sh --gates-only
tests/test_witness_relay.py runs the relay under Node with a mocked genlayer-js client and a
fake key. It compares the relay's URL rules, case by case, with the contract's own _validate_url,
and asserts that the key appears in no response, header, log line or stored value.
Deployment notes.
WITNESS_RL entry of web/wrangler.toml (the
committed id is a placeholder).GL_OPERATOR_KEY (hex private key of the contract's operator) on the Pages project
from standard input, never on a command line, and never commit it.GET https://provek.dev/api/witness-submit must report enabled: true and an
operator address equal to the contract's get_operator().ApibaseReceiptAttest (integrations/genlayer-apibase-attest/) is deployed on the GenLayer test network, test GEN only. One real
APIbase receipt has been attested there; the record is readable by anyone with get_attestation.
| Contract | 0x1bD4C0EBC9b365905d4EBC84b944d861499afe6E |
| Explorer | https://explorer-bradbury.genlayer.com/address/0x1bD4C0EBC9b365905d4EBC84b944d861499afe6E |
| Page | https://apibase.pro/attest/ (APIbase's page for this contract; APIbase moves it to this address when its promotion goes live) |
| Network | GenLayer testnet Bradbury Phase 2 (chain 4221), RPC https://rpc-bradbury.genlayer.com; deployed 2026-10-28 from commit 11474b4 after GenLayer reset the testnet on 2026-10-24 (the earlier deployment died with the reset; its entry is kept in integrations/genlayer-apibase-attest/deploy/deployment.json, previous_deployments) |
| Rail configured | set_chain("8453", ...): Base mainnet, https://mainnet.base.org, USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
Live records, as of 2026-10-28 (read back with list_by_receipt and get_attestation; every field and transaction in
integrations/genlayer-apibase-attest/deploy/deployment.json and evidence/MEASURED-019-*, the deploy and the write in evidence/MEASURED-017-*):
| result | receipt id | observation | attested at (UTC) |
|---|---|---|---|
| PASS | 9dbc77f9fd66bcb8714cd064f5681005 (myvariant.search, 1000 atomic USDC) | payment_matches | 2026-10-28T09:30:52Z |
Not measured: a live FAIL or NOT_FOUND record (none was requested), and a studionet integration run for this contract.
The deployment record is integrations/genlayer-apibase-attest/deploy/DEPLOYMENT.md.
SPEC.md — what each screen and rule must beDECISIONS.md and docs/adr/ — every ratified decision, mistakes keptenforced_by.yaml — each load-bearing rule, with the gate and test that arm itevidence/ — kept runs, including failing ones (RED-001, RED-002,
TAINTED-SUDO-CORPUS) — deleting the evidence of a violation would be a second onedocs/WHY_GET_VERIFIED.md — what verification offers a subject| badge | who runs it | what green means |
|---|---|---|
gates | us, on GitHub Actions | the ratchets, the full test suite at ≥70% coverage, lint, and the secret scan all passed on this commit |
codeql | GitHub's CodeQL engine | the analysis completed on both Python and TypeScript — not that it found nothing |
| OpenSSF Scorecard | the OpenSSF, from their own copy | supply-chain posture, scored and published by them, not by us |
gates is us grading our own homework; the other two are here because their queries and rubric are
not ours.
Methodology prose (the ladder, the evidence taxonomy, SPEC.md, DECISIONS.md, docs/, this
file): CC BY 4.0. Code, schemas, tests (src/, tests/, scripts/,
web/): Apache-2.0. Not licensed, deliberately: the accumulated evidence
corpus and the issuer's reputation — they do not travel with the text. See LICENSE.