Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ jobs:
python-version: "3.12"

- name: Run local verification suite
run: make test
run: |
make test test-verify-ui
python3 scripts/build_public_contracts.py

- name: Build release archive and conformance kit
run: |
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@ jobs:
python-version: "3.12"

- name: Run local verification suite
run: make test
run: |
make test test-verify-ui
python3 scripts/build_public_contracts.py
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,6 @@ handoffs/

# Generated at build time by vercel.json buildCommand (source is /schemas)
/docs/schemas/

/docs/profiles/
/docs/deploy-manifest.json
19 changes: 19 additions & 0 deletions ADOPTION.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
# GuideCheck Adoption Guide

## Version-aware adoption

Existing supported legacy guides keep their current evaluation when checked by
the 1.0.0 dispatcher. No guide, manifest, DNS, or repository-anchor
rotation is required for that compatibility. The latest released profile is
[1.0.0](profiles/1.0.0/spec.md); legacy profiles remain supported.

Deliberately adopting 1.0.0 requires matching guide/manifest profile declarations
and another qualifying anchor when the repository was the only source of
provenance. Repository hash matches remain useful corroboration, but cannot
qualify for 1.0.0 Level 4. Retain legacy declarations until deliberately migrating.
Consumers that require 1.0.0 can use the `required_profile_version` API field or
`--require-profile-version` local CLI assertion. These reject an incompatible
guide rather than reinterpret its bytes. Local evaluation still caps at Level 3.

The guidance below describes the published legacy profile. See the
[compatibility contract](docs/anchor-policy-compatibility.md) for version selection
and the [validation evidence](docs/anchor-dispatch-validation.md) for tested limits.

This is the practical on-ramp to GuideCheck. It explains what an
`assistant-guide.txt` artifact is, what the conformance ladder means in
operational terms, and how to publish a conforming guide one level at a time.
Expand Down
22 changes: 21 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,25 @@ All notable changes to GuideCheck's Human-Verifiable Assistant Guide profile and

## [Unreleased]

## [1.0.0] - 2026-09-05

### Added

- dispatch by the declared guide profile, preserving the 0.7.1 legacy evaluator,
report contract, and all supported legacy declarations
- apply repository-anchor exclusion only to the explicit 1.0.0 policy; retain
matching evidence, block conflicting hashes, and report qualifying channels
- add exact-profile caller assertions, manifest profile binding, and isolated
versioned schemas and normative documents under `profiles/1.0.0/`
- separate the 1.0.0 dispatcher package from engine, released-profile, and
self-guide versions; published 0.7.1 guide and anchor bytes remain unchanged
- add baseline report replay, legacy compatibility cases, strict fixtures,
mixed-request tests, and UI rendering/copy/download contract checks

Legacy support has no automatic sunset in this release. Existing guide and
manifest declarations select the preserved baseline evaluator; adopting 1.0.0
is an explicit migration.

### Fixed

- enforce the existing bounded-execution rule for named scripts independently of
Expand Down Expand Up @@ -355,7 +374,8 @@ Initial draft for review.
- designated standard primary verifier at `https://guidecheck.org/verify`
- canonical site at `https://guidecheck.org/`

[Unreleased]: https://github.com/snapsynapse/guidecheck/compare/v0.7.1...HEAD
[Unreleased]: https://github.com/snapsynapse/guidecheck/compare/v1.0.0...HEAD
[1.0.0]: https://github.com/snapsynapse/guidecheck/compare/v0.7.1...v1.0.0
[0.7.1]: https://github.com/snapsynapse/guidecheck/compare/v0.7.0...v0.7.1
[0.7.0]: https://github.com/snapsynapse/guidecheck/compare/v0.6.0...v0.7.0
[0.6.0]: https://github.com/snapsynapse/guidecheck/compare/v0.5.0...v0.6.0
Expand Down
27 changes: 21 additions & 6 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ Canonical site: https://guidecheck.org/ · Verifier: https://guidecheck.org/veri
Level 5 planning notes: `level-5-runtime-conformance.md`,
`level-5-implementation-plan.md`, `pre-level-5-readiness.md`).
- `scripts/` — Python tools:
- `guidecheck_profiles.py` selects an explicitly supported policy from guide
bytes; caller profile assertions never reinterpret those bytes.
- `guidecheck_legacy.py` and `guidecheck_legacy_constants.py` preserve the
3ceb30a evaluator and 0.7.1 report contract; frozen artifact digests and full
report replays guard compatibility.
- `guidecheck_strict.py` implements the opt-in 1.0.0 provenance policy.
- `guidecheck_verify.py` — local-file reference verifier CLI (Levels 1-3,
plus internal-consistency checks on Level 4 sidecar manifests/anchors).
- `guidecheck_scan.py` / `guidecheck_cli.py` — instruction-surface scanner
Expand Down Expand Up @@ -76,9 +82,10 @@ Canonical site: https://guidecheck.org/ · Verifier: https://guidecheck.org/veri
- Normative documents (`spec.md`, `verifier-conformance.md`) drive behavior;
explanatory docs (`design-rationale.md`, `threat-register.md`) must be kept
consistent with them, not the other way around.
- Profile version lives in `scripts/guidecheck_constants.py` and is asserted
across every version-bearing surface by `scripts/check_version_sync.py` —
never hand-edit a version number in one place without checking sync.
- Software, engine, released-profile, and self-guide versions are separate in
`scripts/guidecheck_constants.py`. The legacy engine has frozen constants.
`scripts/check_version_sync.py` checks release surfaces against 1.0.0 and legacy/self-guide surfaces against 0.7.1;
package upgrades must not rewrite the published self-guide or its anchors.
- `finding-ids.md` is the normative registry for finding ids; new finding ids
used by fixtures or emitted by verifiers/scanner must be registered there
(see `CONTRIBUTING.md`).
Expand Down Expand Up @@ -122,7 +129,7 @@ builds and Sigstore-signs release + conformance-kit artifacts.

## Current state

- Released, profile version 0.7.1 (see `CHANGELOG.md`).
- Released, profile version 1.0.0 (see `CHANGELOG.md`).
- Most recent work (2026-07-07): added `guidecheck scan`, a standalone
instruction-surface scanner for existing files (AGENTS.md/CLAUDE.md/
README/SKILL/llms.txt/assistant-guide.txt) that flags hidden-instruction
Expand All @@ -142,8 +149,16 @@ builds and Sigstore-signs release + conformance-kit artifacts.
conformance fixture suite is incomplete and it has not been shown to pass
it; signed `security.txt` anchors are not yet fetched by the hosted path.

## Unreleased maintenance (2026-09-05)
## Version-aware release (2026-09-05)

The approved version-aware dispatcher is released as 1.0.0. Legacy profiles retain the isolated 0.7.1 behavior; explicit
1.0.0 guides use strict repository-anchor exclusion. Current normative text
and examples live in `profiles/1.0.0/`, with new schemas in `schemas/1.0.0/`.
Root normative documents and published guide bytes remain the legacy contract.
See `docs/anchor-dispatch-validation.md` for evidence and remaining release gates.
`make test` remains Python-only; `make test-verify-ui` requires Node 18+ and runs
the deterministic DOM contract separately. CI runs both.

Local bounded-execution findings are implemented in the shared verifier. Pins
remain unverified, including through hosted callers. See roadmap.md for pending
hosted fetching and independence decisions. Profile release remains 0.7.1.
hosted fetching and independence decisions. Legacy profile behavior remains pinned to the pre-dispatch baseline.
4 changes: 3 additions & 1 deletion INTENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ GuideCheck is a PAICE Foundation standard. It sits alongside the other open-spec

## Versioning and authority

The profile version is declared in `spec.md` and tracked in `CHANGELOG.md`. The current version is 0.7.1, released. The version is asserted by `scripts/check_version_sync.py` against `scripts/guidecheck_constants.py` across every version-bearing surface, so the status here and the released tag cannot silently disagree. `spec.md` and `verifier-conformance.md` are normative. `design-rationale.md` and `threat-register.md` are explanatory and must stay consistent with the normative documents. `archive/` is historical and is not edited.
The current profile is declared in `profiles/1.0.0/spec.md` and tracked in `CHANGELOG.md`. The current version is 1.0.0, released. Root normative documents preserve the legacy contract; the self-guide remains pinned to 0.7.1. The version is asserted by `scripts/check_version_sync.py` against `scripts/guidecheck_constants.py` against independently pinned release, engine, and self-guide identities, so the status here and the released tag cannot silently disagree. `spec.md` and `verifier-conformance.md` are normative. `design-rationale.md` and `threat-register.md` are explanatory and must stay consistent with the normative documents. `archive/` is historical and is not edited.

## Maintenance and demand gate

Expand All @@ -90,6 +90,8 @@ standard scope or authorize a cross-standard certification product. The Septembe

## Changelog

- 2026-09-05: Sam approved the version-aware anchor proposal with legacy compatibility required. The local 1.0.0 candidate excludes repository-file evidence from independent qualification, while the dispatcher preserves supported legacy evaluations and published self-guide bytes. Release and deployment remain separate. See `docs/anchor-policy-compatibility.md` and `docs/anchor-dispatch-validation.md`.

- 2026-07-31: Opened the canonical approval receipt as a live open question, prompted by an external question about binding approval to the exact executing action. Detail in `roadmap.md`; the identity fork (field in the record versus signer over it) is the first thing to resolve, gated behind Level 5 fixture-suite design.
- 2026-07-21: Released profile 0.7.1 with verifier false-positive fixes for wrapped verification instructions and CLI `eval` result prose, expanded parser regressions, refreshed hosted-verifier copy, and adoption guidance derived from the Harnessie field report.
- 2026-06-09: Recorded the Level 5 ownership decision (GuideCheck owns the runtime fixture suite and evaluator, gated by pre-level-5 readiness). Updated version status to 0.6.0 released and noted the version-sync check. Backfilled missing entries: the version line had been bumped through 0.2.0 to 0.6.0 without changelog entries.
Expand Down
15 changes: 12 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: test-bounded-execution eval verify-fixtures validate-contracts test-contract-schema-validation test-parser-edge-cases check-guide-artifacts check-version-sync test-fetch-safety test-hosted-anchors test-hosted-api test-fetch-replay test-cli-contract test-scanner test release-archive conformance-kit
.PHONY: test-verify-ui test-legacy-anchor-compatibility test-bounded-execution eval verify-fixtures validate-contracts test-contract-schema-validation test-parser-edge-cases check-guide-artifacts check-version-sync test-fetch-safety test-hosted-anchors test-hosted-api test-fetch-replay test-cli-contract test-scanner test release-archive conformance-kit

VERSION := $(shell python3 -c "import sys; sys.path.insert(0, 'scripts'); from guidecheck_constants import GUIDECHECK_VERSION; print(GUIDECHECK_VERSION)")

Expand Down Expand Up @@ -44,7 +44,16 @@ test-scanner:
test-bounded-execution:
python3 scripts/test_bounded_execution.py

test: test-bounded-execution eval verify-fixtures validate-contracts test-contract-schema-validation test-parser-edge-cases check-guide-artifacts check-version-sync test-fetch-safety test-hosted-anchors test-hosted-api test-fetch-replay test-cli-contract test-scanner
test-legacy-anchor-compatibility:
python3 scripts/test_legacy_anchor_compatibility.py
python3 scripts/test_dispatch_compatibility.py
python3 scripts/test_profile_dispatch.py

# Keep the established Python-only test entry point usable without Node.
test-verify-ui:
node scripts/test_verify_ui.mjs

test: test-legacy-anchor-compatibility test-bounded-execution eval verify-fixtures validate-contracts test-contract-schema-validation test-parser-edge-cases check-guide-artifacts check-version-sync test-fetch-safety test-hosted-anchors test-hosted-api test-fetch-replay test-cli-contract test-scanner

# Full source archive for a GitHub release, matching prior build/ layout.
release-archive:
Expand All @@ -60,6 +69,6 @@ conformance-kit:
mkdir -p build
git archive --format=tar.gz --prefix=guidecheck-conformance-kit-$(VERSION)/ \
-o build/guidecheck-conformance-kit-$(VERSION).tar.gz HEAD \
fixtures schemas finding-ids.md verifier-conformance.md CHANGELOG.md
fixtures schemas profiles finding-ids.md verifier-conformance.md CHANGELOG.md
cd build && shasum -a 256 guidecheck-conformance-kit-$(VERSION).tar.gz > guidecheck-conformance-kit-$(VERSION).SHA256SUMS
cat build/guidecheck-conformance-kit-$(VERSION).SHA256SUMS
11 changes: 8 additions & 3 deletions PROJECT_CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ notes), rather than a general PAICE-wide default.

## Current status

Released, profile version 0.7.1 (see `CHANGELOG.md`). Most recent shipped work:
Released, profile version 1.0.0 (see `CHANGELOG.md`). Most recent shipped work:
`guidecheck scan`, an instruction-surface scanner for pre-existing
AGENTS.md/CLAUDE.md/README/SKILL/llms.txt-style files (2026-07-07).
Undecided/open items live in
Expand All @@ -74,8 +74,13 @@ suite design, and a possible higher provenance tier. Release and conformance-
kit signing is settled on Sigstore cosign keyless for 0.6.0 and later. See
`CLAUDE.md` for technical/agent-facing detail.

## Unreleased maintenance (2026-09-05)
## Version-aware release (2026-09-05)

Version-aware dispatch and opt-in 1.0.0 anchor qualification ship in release
1.0.0. The published self-guide remains 0.7.1. Legacy reports and anchor semantics are
preserved. Current profile documents live in `profiles/1.0.0/`; validation evidence
and delivery limits are in `docs/anchor-dispatch-validation.md`.

Local bounded-execution findings are implemented in the shared verifier. Pins
remain unverified, including through hosted callers. See roadmap.md for pending
hosted fetching and independence decisions. Profile release remains 0.7.1.
hosted fetching and independence decisions. Legacy profile behavior remains pinned to the pre-dispatch baseline.
16 changes: 12 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# GuideCheck

The 1.0.0 dispatcher preserves legacy
verification and selects stricter repository-anchor rules only for guides that
declare 1.0.0. See the [1.0.0 profile](profiles/1.0.0/spec.md),
[compatibility contract](docs/anchor-policy-compatibility.md), and
[validation evidence](docs/anchor-dispatch-validation.md). Published guide and
anchor bytes remain unchanged at 0.7.1; the latest released profile is 1.0.0.

GuideCheck is a trust boundary protocol for agent instruction surfaces. It
ensures the instructions humans approve are the same instructions agents
execute.
Expand Down Expand Up @@ -91,8 +98,8 @@ agents may execute another.
## Documents

- `ADOPTION.md` - the practical on-ramp: conformance ladder, level-by-level path, guide-author checklist
- `spec.md` - the normative Human-Verifiable Assistant Guide profile
- `verifier-conformance.md` - the normative profile for tools that verify guides
- `profiles/1.0.0/spec.md` and `profiles/1.0.0/verifier-conformance.md` - the current normative guide and verifier profiles
- `spec.md` and `verifier-conformance.md` - preserved normative legacy profiles
- `design-rationale.md` - why the design choices were made
- `operator-guide.md` - non-normative defense-in-depth practices for operators
- `threat-register.md` - known risk classes for fixture, verifier, and runtime authors
Expand Down Expand Up @@ -226,7 +233,8 @@ Temporary limitations:

- hosted Level 4 supports package-registry, transparency-log, DNS TXT, and
github.com repository-file anchors; signed `security.txt` anchors are not
fetched yet
fetched yet. Repository-file matches qualify only under legacy profiles;
1.0.0 requires another qualifying channel
- the hosted verifier is a Level 1-4 preview; its SSRF and abuse controls are
covered by unit tests in `scripts/test_fetch_safety.py`; replay tests cover
redirects, response size limits, header capture, and content variation; each
Expand All @@ -249,7 +257,7 @@ expectation contract by `scripts/check_reference_verifier.py`.

## Status

Released, profile version 0.7.1. See `CHANGELOG.md`.
Released, profile version 1.0.0. Legacy profiles remain supported. See `CHANGELOG.md`.

This is an early-stage open standard. The most useful feedback right now is
whether the hidden-instruction problem maps to real operational risk in your
Expand Down
65 changes: 65 additions & 0 deletions RELEASE_NOTES-1.0.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# GuideCheck 1.0.0

GuideCheck now selects verification policy from the guide's declared profile
version. Existing supported legacy guides keep their previous anchor eligibility,
report format, and conformance results. A guide that deliberately declares
`1.0.0` uses the stricter repository-anchor policy.

## Changes

- Under profile 1.0.0, a matching repository-file hash remains visible evidence
but cannot qualify toward Level 4. Another qualifying anchor is required.
A conflicting repository hash still blocks Level 4 even when DNS matches.
- Exact-profile assertions are available through `--require-profile-version`
and the hosted API's `required_profile_version`. Incompatible declarations
are rejected rather than reinterpreted.
- Strict reports identify the selected policy and qualifying evidence. New
schemas and normative documents live under `schemas/1.0.0/` and `profiles/1.0.0/`.
- Package, engine, profile, and self-guide versions are independent. The
published self-guide and manifest remain byte-for-byte unchanged at 0.7.1.
- This release also includes the bounded-execution enforcement already present
in baseline commit 3ceb30a: named script classification, execution-pin checks,
and opacity rationale. Valid execution pins remain declared but unverified.

## Compatibility and adoption

Legacy declarations 0.1.0, 0.2.0, 0.3.0, 0.3.1, 0.4.0, 0.5.0, 0.6.0, 0.7.0,
and 0.7.1 select the preserved pre-dispatch evaluator. Build metadata is accepted;
prereleases, version ranges, ambiguous declarations, and unsupported versions
are rejected. Legacy support has no automatic sunset. Existing adopters need
no guide, manifest, repository, or DNS changes to retain that behavior.

Consumers requiring 1.0.0 should assert it and validate the strict response
schema and `profile_selection.evaluated_policy`. An old server may ignore an
unknown request field; HTTP 200 or a legacy Level 4 report is insufficient.

The compatibility baseline is the verifier at 3ceb30a, not every historical
verifier release. The included bounded-execution enforcement predates dispatch.

## Validation

- Full Python and UI contract suites pass, including 138 evals, 74 reference
fixtures, 84 contract fixtures, six strict cases, and mixed-request isolation.
- All 74 captured local reports and 25 captured hosted responses match the
pre-dispatch baseline exactly. Nine legacy versions have 54 anchor scenarios.
- All 25 discovered local guide paths and 16 public fetch/replay comparisons
matched. Separate production observations confirmed matching level and guide
hash for nine manifest-declaring adopters; all four observed Level 4 adopters
remained Level 4 in the candidate.
- An isolated wheel installation exercised the actual console entry point.

See [validation evidence](https://github.com/snapsynapse/guidecheck/blob/v1.0.0/docs/anchor-dispatch-validation.md)
for methods and limitations. Finite adopter checks do not establish compatibility
with every unknown external integration.

## Artifacts and limits

The source tarball, source ZIP, conformance kit, and SHA256SUMS are signed with
Sigstore keyless in the tag-triggered release workflow. No package registry
publication is part of this release; install the packaged source from this tag.

The hosted verifier remains a preview. Local verification caps at Level 3;
signed security.txt anchors are not fetched; runtime Level 5 conformance,
execution-artifact fetching, and transitive scanning remain out of scope.
Repository exclusion does not establish new administrative-independence proof
for the other retained anchor channels.
Loading
Loading