Repository navigation
Verifier 2.0.0: The grounded certification release - #53
TimeLordRaps wants to merge 80 commits into
Conversation
…im Garden transmission - Implement publish_claim() with fail-closed preflight validation in src/verifier/interoperability/claim_garden.py * Verdict check: overall receipt verdict must be VERIFIED * Statement count check: evaluated statement count must be > 0 * Claim digest check: SHA-256 over canonical JSON must match receipt claim_digest * Receipt canonical digest check: stable receipt hash must match declared canonical_digest * Notary binding check: verifies signature presence if notary_binding declared - Add vstd publish CLI subcommand in src/verifier/runtime/public_cli.py - Add docs/tutorials/PUBLISH_A_CLAIM.md tutorial guide - Update reference.html, guides.html, FIRST_RECEIPT.md, and QUICKSTART.md - Add comprehensive test suite in tests/test_claim_garden_publish.py (11 tests, 100% pass)
…virtualized runners
…virtualized runners
The domain catalog synthesized one linear prerequisite chain for every
domain:
"depends_on": [] if i == 1 else [f"{domain}.{i-1}"]
Only HYPER is genuinely linear. The other five fan out from a shared
prologue, so the chain asserted edges that the checkers do not have. A
check whose own evidence fully passed was then reported established:
false because an unrelated sibling returned UNKNOWN, and the certificate
contradicted itself:
SIM.3 UNKNOWN established=False (projection absent)
SIM.4 PASS established=False <- wrong
SIM.5 PASS established=False <- wrong
Each CHECKS entry now carries the exact set of lower checks its own
evaluation re-executes or presupposes, read off the control flow of each
evaluate(): SIM fans out entirely from SIM.1; DATA.5 re-runs DATA.4;
BENCH.3 re-runs BENCH.2 while BENCH.4 does not; MODEL.5 needs the network
but not the evaluation; HYPER stays a strict chain.
Establishment now follows the declared graph and reports blocked_by,
matching the semantics core/grounded_certification.py already uses for
profile obligations. domain_depth is unchanged: it remains the
consecutive established prefix, so existing consumers are unaffected.
ENV.4 -> ENV.2 is the one edge not mechanically implied by control flow.
ENV.4 hashes artifact["configuration"] without re-running ENV.2, but its
comparison is vacuous unless ENV.2 established that the declared
configuration is the observed one.
Adds blocked_by to the domain certification schema, mirroring the
grounded certification schema, and two regression tests. The first fails
against the previous behaviour with [True, False, False] != [True, True,
True], so it discriminates on establishment semantics rather than on the
presence of the new field.
Full suite: 2816 passed, 39 skipped.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The runtime was usable but not approachable. Every documented command already
exited 0, so this is not a correctness fix; the gap was that nothing told a
newcomer what to run first, and a stored result reported an outcome without
saying why it came out that way or what to do about it. That gap falls hardest
on the three audiences 2.0.0 is meant to serve: a person reading a certificate,
an assistant reading the same file, and the two working together.
vstd start prints an ordered, copy-pasteable path from an installed
package to a checked result, with the reason for each step and
the four terms most often misread. It runs nothing and writes
nothing.
vstd explain restates a stored receipt or certificate in plain language:
per-coordinate outcome, whether it is established, what blocks
it by coordinate, the checker's own reason, and one next action
phrased for the actual obstacle. A refutation and a missing
input get opposite advice, because supplying more evidence
cannot clear a FAIL.
Both render prose or --json from one computed structure, so a person and an
assistant reading the same artifact are never told different things. That
extends to the exit status: explain exits on the stored verdict under the usual
PASS 0 / FAIL 1 / UNKNOWN 2 convention, so `vstd explain cert.json && deploy`
cannot read success out of a certificate whose printed status is FAIL. A
document carrying no verdict has nothing to propagate and reports a successful
read. Neither command evaluates evidence, admits a mechanism, or changes a
verdict; explain never upgrades UNKNOWN. Also: python -m verifier works,
--version reports the installed version, and the root help ends with a pointer
to both commands.
A run receipt gets a first-class explanation rather than a restatement of its
schema. It is the artifact the guided path produces at step four and explains
at step six, so it was simultaneously the highest-traffic case and the least
informative one, reporting only that the file declared schema VSTD-1. It now
reports the claim, the observed run and exit code, what was digested, the
receipt's own declared limitations, and the difference between a declared
reproducibility ceiling and a demonstrated level -- the receipt-level
counterpart of reading depth as a count of established checks. A receipt
carries no verdict and the explanation says so instead of implying one.
explain states the two counts that are easiest to confuse. For a domain
certificate with an interior gap it reports "4 of 5 SIM checks established;
depth 2" and explains that depth counts only the unbroken run from the first
check. For a grounded certificate it reports "1 of 7 obligations established;
0 profiles complete", keeping certified_profile_depth -- a count of whole
profiles -- distinct from a count of established obligations.
Fix a real defect found while measuring this: examples/grounded_certification.py
printed a hardcoded result sentence and returned 0 regardless of the computed
status, so the shipped partial-certification example exited success on an
UNKNOWN result, contradicting its own guide and the PASS/FAIL/UNKNOWN = 0/1/2
convention used everywhere else. It now reports the observed result and exits
on that convention.
Two of the 20 new tests are load-bearing against drift: every command that
vstd start recommends is parsed by the real parser, so the guided path cannot
rot as subcommands change; and explain is asserted to reproduce each stored
outcome and established flag exactly, so the plain-language layer cannot
silently disagree with the certificate it describes.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… verbs The existing guard parses every command `vstd start` recommends, which catches a renamed or removed subcommand. It does not catch a stale argument: `vstd plan examples/generic_run/manifest.json` parses identically whether or not that manifest is still there, so moving the example would leave the guided path recommending a command that fails on the first thing a newcomer runs. Assert that every shipped repository path a step names still exists. Paths a previous step produces are excluded, since they are absent by construction before the walkthrough starts. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`vstd start` printed its guide pointers and follow-on command from the printing function rather than from `start_report()`, so a `--json` reader never received them. The surface claims a person and an assistant reading it are told the same thing; this was the one place that was untrue. The pointers move into the report as `guides` and `next`, the printer reads them from there, and a new test asserts the printed output names no document the structure does not carry. The existing path-existence guard now covers the guide paths too, so the footer cannot rot the way a step argument could. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A bare `vstd` is the first thing most people type, and argparse answered it with a usage error on stderr that listed all twenty-two subcommands and named none of them as the place to begin. It now prints the help, whose epilog points at `vstd start`. The exit code stays 2: no command was given. `vstd validate` takes the receipt directory and `vstd explain` took only the JSON file inside it, so two adjacent steps of the guided path disagreed about the same argument. `explain` now accepts either. `explain` exited 1 on a file it could not parse but 0 on a file it parsed and did not recognise, though both are the same mistake: the wrong file. An unrecognised document now exits 1, so `vstd explain notes.json && ...` cannot proceed on something the runtime never recognised. A recognised artifact that simply carries no verdict, such as a run receipt, still exits 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
HARNESS certifies an instrumented observation surface: every channel is declared and dispositioned instrumented or declared-gap, so a gap is named rather than absent. Retained records are contiguous and payload-digest bound; tool invocations must bind a registered declaration and a retained tool record; the transcript check compares both the canonical digest and the digest-tree commitment, so an omitted record cannot silently shorten the transcript. AGENT certifies a trajectory against exactly one bound harness certificate, re-derived from its retained bytes under the same mechanism digest. The harness's instrumented channels are the agent's observation ceiling. Steps, actions and claim supports must resolve to records inside it; a claim naming a channel outside it is UNKNOWN, never reconstructed. An agent certificate cannot establish more than its harness declared observable. Adding two adapters changes the monolithic implementation digest, so every domain policy must readmit the checker. 2.0.0 is unreleased and no published certificate is bound to the six-adapter digest, so the cost is confined to the branch. Domain depth remains separate from object and Graph numbered-profile conformance; both certificates retain object_profile_conformance as NOT_ESTABLISHED. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…escribes A description is the artifact a reviewer reads instead of the tree. Nothing checked that it still matched. `check_pr_policy.py` checks that the promotion record is complete and accepted; whether the described technical inventory is still true was left to discipline, and discipline does not survive a rebase. `scripts/check_pr_description.py` reads the executable domain catalogue as the source of truth and requires the description to agree with it: every domain named with its exact coordinate range, the domain and check totals equal to the catalogue's, the signed head equal to the head under review, and the tracked file inventory equal to the tree's. Every mismatch is a failure rather than a warning, because a description that silently stopped matching the tree is a claim without evidence. The concrete case it is built for: adding a domain adapter moves the catalogue from six domains and 28 checks, so a description left alone now fails rather than quietly describing a system that no longer exists. Wired into `scripts/preflight.py` before push and into the repository checks on pull-request events, where `--head` binds the pull-request head because the job runs on a merge ref. Passing when no description can be read is deliberate: absence of a description is not evidence that it disagrees. `tests/test_pr_description_gate.py` (11 tests) discriminates on the mismatches rather than on the presence of the check: nine assert it fails on an undescribed new domain, a stale domain count, a stale check total, a narrowed coordinate range, a stale or missing head, a stale file inventory, and a module the catalogue never declares. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The promotion workflow reads the repository-check run with a digits-only expression anchored to its own line. Qualifying prose appended to that line does not degrade gracefully: extraction returns nothing, the step exits on the empty value, and the failure surfaces with no stated cause. That happened. The description gate now reproduces the workflow's own expression, so the mismatch is reported locally, with its reason, before a push. Three tests cover it; the first is a regression test for the failure above. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
An AGENT certificate establishes that a trajectory is consistent with its own transcript. A SIM certificate establishes that a trajectory replays under its own transition program. Both can hold of a pair that never interacted, and nothing in the family caught that. BOT binds one AGENT, one SIM and two ENV certificates, reaching the harness through the agent so the chain stays one-way, and checks the correspondence: a strictly increasing map from simulation transitions to retained records inside the agent's observation ceiling, each aligned invocation's output equal to the simulation's own observation projection and its input equal to the action the simulation replayed. An unattributed transition is FAIL unless the contract declares it exogenous. Environment separation is declared, not measured. A fused bot-in-sim runtime is UNKNOWN at BOT.5 and caps at domain depth 4: the declaration is honest, but no retained evidence distinguishes a simulator the agent cannot read from one it can. Open-endedness is not checkable at any depth and is excluded. Factor bind_certificate() into common.py and use it from both agent.py and bot.py, so a fourth binding surface costs one call rather than a copied prologue. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The gate's own tests hardcoded six domains, 28 checks and SIM as the last coordinate range. Landing HARNESS and AGENT broke five of them, which is the gate working but the fixtures failing: a test that must be hand-edited whenever the tree grows is the maintenance failure this gate exists to prevent, and it should not be reintroduced in the gate's own tests. Fixtures now read the live catalogue, and the synthetic-domain cases use a name the catalogue will never declare so they do not decay as real domains land. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
VSTD is an object-oriented representation meta-language whose nomenclature is meant to be followed rather than looked up, but the grammar that makes it followable was not written down anywhere a reader would find it. VSTD-<NAME>-<level>.<module>, where the five levels mean the same kind of thing for every name: facets, dynamics, statics, closure, adaptation. Both axes of the normative ladder already instantiate exactly those five, so the convention is stated as that ladder made total over the object set rather than as a new numbering laid over it. Also separates the three coordinate systems that get conflated: a specification surface, a domain check coordinate (a position in a prerequisite graph, not a level), and a serialized receipt identifier (frozen once receipts exist under it, which is why VSTD-DATA-0.1 keeps its shape). A well-formed identifier is not a claim that an implementation exists at that coordinate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Version 2.0.0 gives an actor identity a bounded, verdict-adjacent form through the ZIZK token family, but gives it no way to declare what it withholds. The tenth prohibited inference forbids reading a minimized record as preserving its original claim boundary, and nothing currently stands in that inference's place, so minimizing disclosure costs an actor evidential weight with no way to earn it back. Milestone 10 states the replacement as a declared, checkable boundary delta: the claim before minimization, the transformation applied, and the narrower claim that survives it. The three properties are named separately because each is separately refutable — declarative (a boundary stated ahead of the decision), federated (every member evaluates it offline, no hub grants it), verifiable (a bounded result in the existing identity verdict set, not a warning). The objects land in the stored non-receipt mechanism registry beside the ZIZK tokens rather than as a new specification surface. The object set stays closed, and a property of an actor stays unable to reach a computational verdict, which the Prime Invariant requires. Sequenced explicitly after 2.0.0 stabilizes, and records the matching non-goal: a satisfied declaration bounds what one record discloses, never what a federation can jointly infer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The opening 2.0.0 bullet said "eight executable grounded domain adapters" and then enumerated nine. The numeral regressed when BOT landed in 9a8d415: the enumeration in the same paragraph gained its ninth member, and the count that introduces it did not. Nine is the measured figure. src/verifier/domains/catalog.py defines exactly nine adapter keys (DATA, ENV, BENCH, HYPER, MODEL, SIM, HARNESS, AGENT, BOT) carrying 43 cumulative checks, and standard/DOMAIN_GROUNDING.md, docs/V2_CANDIDATE.md and the pull request body already agree on nine. The other counts in the same entry were re-measured rather than assumed: 43 cumulative checks sum from the per-domain check tuples, four additive domain schemas exist under src/verifier/schemas, examples/domain_grounding.py yields nine runnable specimens, and the certification section's six bounded native adapters match NativeCertificationMechanism.supported_obligations. Only the one numeral was wrong. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
TRAIN's composition gains GRAPH as an operand: the architecture of the model or algorithm being trained, with its layers as members and its operators as the relation between them. TRAIN is now HYPER(VSTD, MODEL, DATA, ENV, SIM, BENCH, GRAPH) indexed by GRAPH-1 so GRAPH holds two roles. The index is still the order the data was consumed in. The new operand is the architecture. TRAIN-6.1 now lists the architecture among what the certificate emits. It already emitted it: the TRAIN artifact carries the `architecture` field, and a domain certificate embeds its whole evidence bundle. TRAIN-6.5 keeps the DATA join and adds the one the architecture makes with the optimizer contract. The pair is the whole recipe, enough to train shadow models on other data and infer membership from the trained model's outputs, so that join needs no corpus. The two rows change identically in the catalogue and in DOMAIN_OBLIGATIONS.md. The Graph axis cannot express this operand yet. GRAPH-1's artifact and transformation types are provenance kinds, `ArtifactType(...)` rejects any type it does not know, and neither vocabulary names a layer or an operator. The specification says so rather than implying a GRAPH certificate over an architecture can be built. A new test pins both vocabularies beside that sentence, so widening either one turns the suite red until the sentence is read again. It also removes a false statement from the unreleased release note. The note still said TRAIN is "carried as a named composition rather than an object", but TRAIN was admitted to the namespace on 2026-09-22 and COMPOSITIONS is empty. implementation_digest() does not cover the obligation catalogue, and it stays at sha256:156b7f52...76369, measured before and after. domain_obligation_digest() moves from d0d42d2d... to ce694885...; nothing pins it. Verified by planting drift and requiring red, eight plants, all caught: - the operand dropped from the runtime; - the operand dropped from the document; - a non-object operand; - 6.1 drifted in the document only; - 6.5 drifted in the runtime only; - a LAYER artifact type; - an OPERATOR transformation type; - the vocabulary sentence edited. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The relational objects are four -- GRAPH, HYPER, OWNER and IDENTITY -- as RELATIONAL_OBJECTS and the partition paragraph both say. Two summaries were written before IDENTITY existed and never updated: - The OWNER introduction said "Of the three relational objects ... only this one is ungrounded". There are four, and IDENTITY is ungrounded too. - The META_TIERS OWNER section said "the only ungrounded one" and "None of the three". It now names IDENTITY as the fourth and says what IDENTITY relates. - The IDENTITY introduction called itself ungrounded "like the other three of this family"; the family is five. It now says "like every other object of this family", which cannot go stale. COLLECTIVE-1.1 is "The collective is declared as a graph of role classes at a stated coordinate." It binds nothing. Yet both COLLECTIVE introductions said it "binds a GRAPH", and the lattice section counted it among the identity family's declared edges. The collective is the graph; no row binds a GRAPH certificate. GRAPH-1's artifact types include no role class, so no such certificate could be built anyway. All three sentences now say so. The collective's one declared operand is the ROLE set COLLECTIVE-1.3 binds. The lattice figures in META_TIERS are published constants that nothing in the repository computes. So whether they counted a GRAPH-to-COLLECTIVE edge cannot be measured, and this commit does not touch them. Two guards, each read back from the catalogue: - Every count and list of the relational objects in either specification equals RELATIONAL_OBJECTS, with reach asserted. Seven plants, all caught; one of them widens the constant and leaves the prose alone. - Every coordinate a summary says "binds" names a row whose requirement is "bound by". This is general rather than naming COLLECTIVE. Four plants, all caught. implementation_digest() is unchanged at sha256:156b7f52...76369. domain_obligation_digest() moves, since it covers the document; nothing pins it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pre-push description gate asked about the local branch and the working tree. `git push origin work:feature` moves the pull request on `feature`, so the gate found no pull request for `work` and passed; and an unpushed edit in the checkout could make a stale description look current. The gate now takes each pushed branch head from git's ref lines, looks up open pull requests on that remote branch in the repository the push goes to, skips pull requests from forks, and checks each description with a new --commit mode that reads the catalogue, the inventory and the head from the pushed commit's own tree. A lookup gh cannot answer fails the push; a remote off GitHub passes without printing its address. A new pull-request-description workflow re-runs the check on every push and every edit of the description, which the repository checks never did for an edit. It runs the pull request's own gate with a read-only token and passes the description through the environment, never into the script. The workflow timeout test now discovers the workflow list rather than naming it, so this workflow could not have been added without one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every push of a new head has to come with a revised description. The new check compares the description with the revision that was in force when the pull request's current head was pushed, and refuses the push when the two are the same word for word. Spacing and line endings are not a revision. Nothing is stored. GitHub keeps every revision of a description with the moment it was made, and the first pull-request workflow run on a head marks when that head was pushed; later runs on the same head come from edits. A question GitHub does not answer refuses the push rather than passing it. The pre-push gate runs this check before the existing one that holds the description to the pushed commit's tree, and reports both. The hosted workflow gains a changed-since-last-push job for pushes that bypass the local hook. A workflow runs after the push it judges, so it can only fail. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`changed-since-last-push` ran only on `synchronize`. A job skipped on an `edited` event reports success, and a required check reads the latest report on the head, so any edit after an unrevised push replaced the failure with a skip: the check could be cleared without revising anything. The job now runs on every event with `--pushed HEAD`, which judges the push that made HEAD the head as it was made. Each head's push moment is its first pull-request run on the pull request's head branch, from the pull request's own head repository; the push before is the latest one strictly earlier. The description in force at each push comes from the recorded revisions, and the two are compared word for word. Neither side is the live description, so the verdict is the same on every later event, and only another push with a revised description changes it. A head no run recorded, a deleted revision, or none old enough is refused rather than guessed; an opening push has nothing to compare with and passes, saying so. The job has its own concurrency group. Shared with `describes-head`, either would cancel the other's verdict. The branch name is percent-encoded into the runs query: a branch named with `&` or a space would otherwise truncate or split it. The docstring no longer names verifier's `describes-head` script, so other repositories can carry this file byte for byte. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dapters Enforce [OBJECT]-X.m coordinate grammar across domain catalogs, schemas, and test suites, eradicating flat dot notation. Qualify ACTOR and OWNER as functional consequence adapters: - ACTOR verifies identity, delegation replay, witness accountability, and attribution continuity. - OWNER verifies consequence limbs, lifecycle holding (freeze, seal, thaw), and witness binding to natural persons. - Rename vstd-sim-1.schema.json to verifier-simulation-receipt-1.schema.json with canonical \. - Fix CodeQL alert on tarfile extraction member path traversal in check_pr_description.py. - Fix test node id parameterization in test_preflight.py to prevent evidence boundary report leaks. - Pass full test suite (3,189 passed, 39 skipped, 0 failed), presentation gate, and namespace closure. Co-Authored-By: Antigravity <noreply@google.com>
…2.0.0 - Realign ROADMAP.md Milestone 10 to eliminate false post-v2.0.0 sequencing and articulate the Privacy-Transparency Parity across Level 6 disclosure surfaces. - Implement verifier.privacy package covering [OBJECT]-6.1 through [OBJECT]-6.6: - models: ObserverParty, DisclosureSurface, DisclosureBound, TransparencyCommitment, EmissionContext, EmissionResult. - engine: EmissionEvaluator dynamic emission-time evaluator generating verifier-privacy-assessment-receipt-1. - composition: CompositionDeltaEvaluator enforcing relational join leakage boundaries across co-emitted certificates. - independence: assert_verdict_independence strictly verifying that privacy redaction leaves Tier 1-5 computational verdicts bit-identical. - adapters: DifferentialPrivacyBudget, ContextualIntegrityEvaluator, SelectiveMerkleDisclosure, SafeHarborPartition. - Add adversarial and conformance test suite in tests/test_privacy_engine.py with authentic certified DATA specimen integration.
…tology, and executable contracts - Implement SoftwareOneWayDataDiodeEmulator with severed reverse channel semantics, push-only streaming, and mandatory machine/human-readable disclaimers. - Enforce fail-closed zero false confidence rejection if software diode emulator is presented for TIER_3_TESLA_CAGED physical containment. - Ground superintelligence computationally: pure inference MODEL + observation/action HARNESS = AGENT, and situated AGENT + SIM = BOT (where REAL_WORLD_PHYSICAL_SPACE acts as SIM). - Decouple SPACE (manifolds, topologies, d/c propagation delays, lightcones), TIME (causal clocks, monotonic ticks, spatial configuration slices), and EVENT (punctual transitions, interrupts, percepts, actuations) into separate computational object classes for clean division of complexity. - Formalize executable corrigibility contracts: ShutdownIndifferenceContract (zero preemption penalty), InterruptibilityProtocol (watchdog heartbeat and unmaskable preemption signals), OracleImmutabilityAttestation (write-protected evaluation), VacuityFalsificationCheck (ex falso quodlibet rejection), and HarnessImmutabilityGuard (write-protected memory pages). - Enrich ROADMAP.md Milestone 9 with diode emulator dual-requirement, superintelligence ontology, and executable corrigibility contracts. - Add comprehensive adversarial test suites in tests/test_diode_emulator.py, tests/test_corrigibility_ontology.py, and tests/test_corrigibility_contracts.py.
… reward locks - Implement BespokeTemporalComb and CovertTimingChannelDetector in src/verifier/hardware/time_comb.py with sub-millisecond nanosecond resolution (1 ns <= dt <= 1,000,000 ns). - Bound steganographic covert timing channels and phase jitter across optical and physical isolation boundaries. - Implement TripleCompositeRewardLock and ComputationProofThawEngine in src/verifier/corrigibility/reward_lock.py compounding DFA, Answer Set Programming, and Recursive Parity Branching. - Prevent wireheading via computation-as-proof isomorphism where execution intermediate states form the key seed. - Update ROADMAP.md Milestone 9 with temporal comb and reward lock architectures. - Add comprehensive adversarial test suites in tests/test_vstd200_time_comb.py and tests/test_vstd200_reward_lock.py.
Development progress — 2026-10-07The published PR head remains Progress recorded in the local candidate
The development installation was bound to local commit Remaining release gatesCORE/source integration; reference and portal reconciliation; retained regression failures, setup errors and held inputs; required certificate and promotion evidence; exact final package/harness selection; core polish; required native PRDEL functions and generated description; and final acceptance. Corrigibility remains a separate evolving extension across the 26 computational object types. Genuinely new extension work may remain explicitly WIP for core release; existing core gaps remain core obligations. This is a status comment, not the required PRDEL-generated description, a source push, or clearance to merge or release. |
|
|
||
|
|
||
| def _digest_bytes(value: bytes) -> str: | ||
| return "sha256:" + hashlib.sha256(value).hexdigest() |
| raise ValueError("authentication key encoding differs") from exc | ||
| if (not 32 <= len(key) <= 128 | ||
| or policy["key_digest"] | ||
| != "sha256:" + hashlib.sha256(key).hexdigest() |
| receipt = assess_secret_request(args.request, scanner_binary=args.scanner_binary, | ||
| scanner_configuration=args.scanner_config) | ||
| if args.json: | ||
| print(json.dumps(receipt, sort_keys=True)) |
| print(f"[{receipt['outcome']}] Selected secret gate: " | ||
| f"{receipt['artifacts_scanned']}/{receipt['artifact_count']} artifacts; " | ||
| f"{receipt['findings_count']} findings.") |
Verifier 2.0.0 development checkpoint
Coordinate
Current signed head:
b74a1839b4bee60f8d784baf846b553c43c8c209f06414feec801c8b44a662d583ddff817ce22a1b. The PR API's base snapshot wasfc2a20c68d01920eda7e4e1bf14dfbcb334a7634; hosted integration coordinates must be observed separately.reasons.vstd, compiledobjects.vstd, and Pull Request Domain Explanation Language (PRDEL) native v2 development support.Change and evidence
The package can select the root registry, reconcile authored reasons with its selected obligations, and assess the represented graph through VERIFIER objects. This integrates the current namespace, tier, graph, execution and self-polish work in one tree. PRDEL v2 now supports bounded larger snapshots and records large changed artifacts by exact digest rather than embedding their full bytes. This is an unreleased development checkpoint, not a release or a claim of whole-package conformance.
The candidate is prepared for push; the published head remains the previously observed PR head until the push succeeds. Candidate-specific statements below describe the proposed tree only. Each assessment must bind its actual source, registry and execution coordinate; native specimen diagnostics do not substitute for package-instance evidence.
The last complete local Polish 3 report (r627) predated the final boundary-literal and registry refresh changes. At that earlier coordinate, Tier 0 passed; Tier 1 had 32,333/32,333, Tier 2 60,944/60,944 and Tier 3 86,749/86,749 instance results passing, with the self-polish system passing at each tier. Overall status remained UNKNOWN due to normative coverage and higher-tier refinement. These are historical results, not a verdict for the proposed commit.
The later r630 run reconciled 86,749 selected obligations to the sole authored reasons input with zero missing reasons, and refreshed
objects.vstdto SHA-25657c98bb23a4545be0603e93d0f000369fc37496195bfe699a317167315c16512. Its assessment stopped with PACKAGE_ASSESSMENT_UNAVAILABLE, PACKAGE_CLOSING_RECAPTURE_UNAVAILABLE, PACKAGE_NATIVE_DIAGNOSTICS_NOT_RUN and PACKAGE_REPORT_CAPACITY_EXHAUSTED. Its denominator was NOT_RETAINED; current tier and whole-package outcomes remain UNKNOWN. The machine had low virtual-memory headroom, but the precise failing resource has not been independently established.Available PRDEL-family tests recorded 494 passed; four CLI overlay cases were not run because their retained fixture root was unavailable. Boundary-literal focused tests recorded 262 passed and 17 skipped; individual skip classifications and exact installed-source bindings for that run remain to be established. The earlier candidate passed its public boundary scan; the current worktree passed presentation and
git diff --check. Final outgoing history and hosted checks require separate validation. Full regression, hosted/platform coverage and release qualification are not established.PRDEL v2 automatic compilation is unsupported. Manual-template generation for the identical tree at the earlier local commit returned SOURCE_UNAVAILABLE (unavailable source or an exceeded declared bound); the host-selected release subject remains UNKNOWN. No PRDEL clearance is claimed.
The LF-aligned pre-commit working tree refreshed the registry to SHA-256
4ae35e800c92b300dd31b48bfd3dd5d3c4e3790f2d6ab5607abe397d59aff465. Its Tier 0 assessment returned UNKNOWN: documentation metadata has an unclosed ACTUATOR non-applicability boundary, andvstd-architecture:EVENTremains unresolved. A source coordinate changes upon commit, so these observations are not a verdict for the signed head. The refresh regression selection passed 104 tests with one Windows symlink-privilege skip; the source and asset selection passed 23 tests. A separate selection had 168 passes and one detached-branch GitHub CLI failure. Hosted validation is pending.The latest pre-commit Tier 0 assessment returned eight obligations PASS and one UNKNOWN. Its findings are an unclosed documentation ACTUATOR non-applicability boundary and an unclosed
vstd-package-graph:ARCHsource boundary. The identity AGENT and EVENT classifications now retain their authored obligations across the open evaluation boundary; this does not claim an agent or event occurred. The pre-commit assessment does not establish a verdict at the signed commit, and Tier 1 and above remain NOT_ESTABLISHED. Hosted checks on the previous head still failed for runtime-bound native specimens and cross-platform comparison; this candidate has not yet been evaluated by hosted CI.Promotion record
b74a1839b4bee60f8d784baf846b553c43c8c209— PENDING push and hosted observation.pull_requestSource and domain inventory
The tracked inventory is 2049 files. The retained executable catalog declares 12 domain adapters and 57 domain checks, plus six accountable-domain adapters. Selected executable coordinates: ACTOR.1-ACTOR.4; AGENT.1-AGENT.5; BENCH.1-BENCH.4; BOT.1-BOT.5; COLLECTIVE.1-COLLECTIVE.2; DATA.1-DATA.5; ENV.1-ENV.4; HARDWARE.1-HARDWARE.4; HARNESS.1-HARNESS.5; HUMAN.1-HUMAN.3; IDENTITY.1-IDENTITY.3; MODEL.1-MODEL.5; OWNER.1-OWNER.4; ROLE.1-ROLE.2; SIM.1-SIM.5; TOKEN.1-TOKEN.5; TRAIN.1-TRAIN.5; VERIFIER.1-VERIFIER.5. This is an adapter inventory, not the complete object namespace or a conformance result.
The extensible namespace includes the 26 retained kinds HUMAN, ACTOR, COLLECTIVE, ROLE, IDENTITY, OWNER, HARDWARE, RECEIPT, OBJECT, GRAPH, SPACE, TIME, EVENT, ENV, DATA, VERIFIER, BENCH, ARCH, TRAIN, HYPER, MODEL, HARNESS, AGENT, SIM, BOT and TOKEN, plus 12 accumulating consequential kinds: LEDGER, TRANSACTION, ASSET, MARKET, MEASUREMENT, SENSOR, CONTROLLER, ACTUATOR, PROTOCOL, POLICY, ROBOT and FINBOT. LEDGER, TRANSACTION, ASSET, MARKET and FINBOT include financial-relevant obligations; selected finite routes do not establish real-money authority, settlement, physical effects or full financial-object conformance. The pre-commit registry records applicability of these kinds on selected objects, but ASSET, MARKET and FINBOT have no primary-kind objects there. Registry declarations, native specimens and source coverage do not establish that every object or tier passes; current package admission and financial coverage remain UNKNOWN.
Selected retained financial checks include
MARKET-1.1-order-access-lifecycle,MARKET-2.1-matching-pricing-allocation,MARKET-3.1-settlement-failure-disruption,FINBOT-1.1-agent-harness-and-financial-authority,FINBOT-2.1-real-financial-endpoint-and-exposureandFINBOT-3.1-decision-effect-retry-intervention-and-reconciliation. These replay bounded supplied records; they do not establish complete coverage, live trading, real authority or settlement.The source rows bind changed files and definitions to exact bytes and provide behavioral summaries and limits. The single supplemental catalog row avoids a circular digest and is subject to the same exact-coverage check.
Human review gates
Test skip rubric disclosure
Hosted skip inventory is PENDING. The four retained-fixture PRDEL cases and the 17 skips in the focused boundary-literal run remain unclassified pending exact per-test reasons; no zero-skip claim is made.
Consequences
The registry and report schemas, package selection and native-v2 development route change. Existing profiles and wire identifiers retain their own compatibility boundaries; this checkpoint does not authorize release or deployment. TIME contradictions and meta-tier 4 closure remain open.
DO NOT REMOVE — governing v2.0.0 hierarchy and meta-tier requirements
This section preserves the maintainer's requested release scope. It is a requirement, not a declaration that the current implementation completes it. The successful checks recorded elsewhere in this description cover the existing candidate; completion of this expanded hierarchy must be established separately, requirement by requirement.
For every namespace object and every domain object, meta-tier 1 covers fundamental facets of its structure; 2 covers dynamics of those facets; 3 covers static external constraints and invariants; 4 covers closure certificates; 5 covers independence; 6 covers privacy; 7 covers consent; and 8 covers governance. Computational objects require computationally grounded certifications where achievable. Accountability objects require accountability contracts under the same eight general meta-tiers. Unsupported or ungrounded claims remain UNKNOWN.
The maintainer explicitly named 25 objects below. The already supported TOKEN object is retained rather than silently removed, yielding a 26-object release census after replacing the object name VSTD with RECEIPT. Verifier Standard (VSTD) remains the standard's name. Existing released bytes and identifiers require explicit migration treatment; the rename must not create ambiguous current object names or silently reinterpret historical receipts.
The following is the maintainer's supplied hierarchy and notation, retained verbatim as the scope anchor:
Current notation supersedes the historical shorthand in the retained quote: use [OBJECT]-1..8.m's for the objectives within the eight positive meta-tiers. For example, SIM-3.6 is the sixth objective/internal grounding certificate inside SIM meta-tier 3. The minus-shaped separator is not a negative tier; .m is an objective index, not dependency depth or an adapter count. The historical .ms spelling does not govern current code or documentation.
Implementation audit gates: every object has explicit applicable -1..8.m obligations; every certification or accountability contract has its exact bound proposition, mechanism, evidence, assumptions, exclusions, falsifier and PASS/FAIL/UNKNOWN behavior; composition binds actual operands and supports typed GRAPH replacement; isolated simulation boundaries and physical-versus-virtual hardware ownership are enforced; every module identifier denotes its individual objective rather than a count or dependency depth. A catalogue row, digest, self-assertion or passing unrelated test is insufficient. No fixed total near 1,000 modules is fabricated from the maintainer's estimate.
The later distinct SECURITY requirement is tier 9. The preserved eight-tier maintainer quotation is historical scope evidence; it has not been edited to claim completed nine-tier qualification.