VSTD packages bounded computational claims with their evidence,
checking mechanisms, limits, refutation conditions, provenance, and
@@ -122,16 +122,18 @@
VSTD is a maintainer-led alpha project specification. Compatibility VSTD-4 and Graph paths remain NOT_ESTABLISHED candidates. Separate evidence-bound VSTD-4, VSTD-5, Graph-profile, and assurance-event paths rerun exact registered mechanisms from embedded evidence; no real external witness is claimed by this repository. The project has no demonstrated external adoption, independent implementation, interoperability deployment, or third-party security review.
Review the maturity table
Report an ambiguity or counterexample
diff --git a/docs/tutorials/PUBLISH_A_SILO.md b/docs/tutorials/PUBLISH_A_SILO.md
index 49b42f9..9580d68 100644
--- a/docs/tutorials/PUBLISH_A_SILO.md
+++ b/docs/tutorials/PUBLISH_A_SILO.md
@@ -18,8 +18,11 @@ Retained artifacts are never executed by any command here.
## Set up
+From the v2.0.0 candidate source checkout identified by this site's source
+coordinate, install the optional sealing dependency:
+
```bash
-python -m pip install "verifier-standard[seal]==1.5.0"
+python -m pip install ".[seal]"
openssl genpkey -algorithm Ed25519 -out publisher-private.pem
```
diff --git a/docs/tutorials/SEAL_AN_ARTIFACT.md b/docs/tutorials/SEAL_AN_ARTIFACT.md
index 9116968..59a147f 100644
--- a/docs/tutorials/SEAL_AN_ARTIFACT.md
+++ b/docs/tutorials/SEAL_AN_ARTIFACT.md
@@ -7,16 +7,16 @@ copy, and then changes that copy so the runtime reports a different verdict. The
steps matter most: a mechanism that never reports a negative result has not been shown to
detect anything.
-Every command below belongs to the published `vstd artifact` surface, and none of them
+Every command below belongs to the `vstd artifact` surface, and none of them
executes the artifact's contents. It requires the
-[released package installation](../INSTALLATION.md).
+[v2.0.0 candidate source installation](../INSTALLATION.md).
## Install the sealing extra
Sealing uses Ed25519 signatures, which come from the optional `seal` dependency:
```bash
-python -m pip install "verifier-standard[seal]==1.5.0"
+python -m pip install ".[seal]"
vstd artifact --help
```
diff --git a/scripts/build_docs_portal.py b/scripts/build_docs_portal.py
index c54d0ab..76acbbc 100644
--- a/scripts/build_docs_portal.py
+++ b/scripts/build_docs_portal.py
@@ -142,10 +142,45 @@ def navigation(prefix: str, output: Path) -> list[tuple[str, list[tuple[str, str
def route(path: str) -> str:
return prefix + path if (output / (prefix + path)).exists() else path
+ if not prefix:
+ return [
+ ("Start here", [("Introduction", "index.html"),
+ ("Install v2.0.0 candidate source", "docs/INSTALLATION.html"),
+ ("Your first receipt", "docs/FIRST_RECEIPT.html"),
+ ("Typical use cases", "docs/USE_CASES.html")]),
+ ("v2.0.0 source reference", [("Commands", "reference.html#cli"),
+ ("Python exports", "reference.html#api"),
+ ("Python API guide", "docs/PYTHON_API_GUIDE.html"),
+ ("API stability", "docs/API_STABILITY.html")]),
+ ("Version 2.0.0 candidate", [
+ ("Candidate scope and migration", "docs/V2_CANDIDATE.html"),
+ ("Grounded certification", "docs/GROUNDED_CERTIFICATION.html"),
+ ("Gate automation", "docs/GATE_AUTOMATION.html"),
+ ("Open contradictions", "project/TIME.html"),
+ ]),
+ ("Tutorials", [("Seal an artifact", "docs/tutorials/SEAL_AN_ARTIFACT.html"),
+ ("Publish a silo", "docs/tutorials/PUBLISH_A_SILO.html")]),
+ ("Understand the model", [("Concepts & precedents", "docs/CONCEPTS_AND_PRECEDENTS.html"),
+ ("Claims & limits", "docs/CLAIMS_AND_LIMITS.html"),
+ ("Numbered profiles", "standard/index.html"),
+ ("All guides", "guides.html")]),
+ ("Work in the repository", [("Repository walkthrough", "docs/REPOSITORY_WALKTHROUGH.html"),
+ ("Component catalog", "components/index.html"),
+ ("Architecture", "docs/ARCHITECTURE.html"),
+ ("Experiments", "experiments/index.html")]),
+ ("Published archive · " + RELEASE, [("Release introduction", RELEASE_PATH + "index.html"),
+ ("Release commands", RELEASE_PATH + "reference.html#cli"),
+ ("Release Python exports", RELEASE_PATH + "reference.html#api")]),
+ ("Contribute", [("Contribution guidelines", "project/CONTRIBUTING.html"),
+ ("Security reporting", "project/SECURITY.html"),
+ ("Roadmap", "project/ROADMAP.html"),
+ ("Changelog", "project/CHANGELOG.html")]),
+ ]
+
groups = [
("Start here", [("Introduction", prefix + "index.html"),
- ("Install Verifier", "docs/INSTALLATION.html"),
- ("Your first receipt", "docs/FIRST_RECEIPT.html"),
+ ("Install Verifier", route("docs/INSTALLATION.html")),
+ ("Your first receipt", route("docs/FIRST_RECEIPT.html")),
("Typical use cases", route("docs/USE_CASES.html"))]),
("Tutorials", [("Seal an artifact", route("docs/tutorials/SEAL_AN_ARTIFACT.html")),
("Publish a silo", route("docs/tutorials/PUBLISH_A_SILO.html")),
@@ -167,18 +202,16 @@ def route(path: str) -> str:
("Roadmap", "project/ROADMAP.html"),
("Changelog", "project/CHANGELOG.html")]),
]
- if not prefix:
- groups.insert(4, ("Version 2.0.0 candidate", [
- ("Candidate scope and migration", "docs/V2_CANDIDATE.html"),
- ("Grounded certification", "docs/GROUNDED_CERTIFICATION.html"),
- ("Gate automation", "docs/GATE_AUTOMATION.html"),
- ("Open contradictions", "project/TIME.html"),
- ]))
return groups
-def home() -> str:
- return (ASSETS / "home.html.in").read_text(encoding="utf-8").replace("{{release}}", RELEASE).replace("{{release_path}}", RELEASE_PATH)
+def home(stable: bool) -> str:
+ template = "release-home.html.in" if stable else "home.html.in"
+ content = (ASSETS / template).read_text(encoding="utf-8")
+ if stable:
+ for section in ("docs/", "project/"):
+ content = content.replace('href="@/' + section, 'href="@/{{release_path}}' + section)
+ return content.replace("{{release}}", RELEASE).replace("{{release_path}}", RELEASE_PATH)
def shell(content: str, *, route: str, title: str, outline: list[tuple[str, str]],
@@ -200,11 +233,11 @@ def navlink(label: str, target: str) -> str:
"".join(navlink(name, target) for name, target in entries) + ""
for label, entries in groups)
toc = "".join(f'
{html.escape(label)}' for anchor, label in outline)
- coordinate = "Released package " + RELEASE if stable else "Repository documentation"
+ coordinate = "Released package " + RELEASE if stable else "v2.0.0 candidate source"
other = route.removeprefix(RELEASE_PATH) if stable else RELEASE_PATH + route
if not (output / other).is_file():
other = "index.html" if stable else RELEASE_PATH + "index.html"
- version_links = navlink("Released " + RELEASE, route if stable else other) + navlink("Repository source", other if stable else route)
+ version_links = navlink("v2.0.0 candidate source", other if stable else route) + navlink("Released " + RELEASE + " archive", route if stable else other)
source = REPOSITORY + "/tree/" + source_ref
known = [target for _, entries in groups for _, target in entries if "#" not in target]
next_link = ""
@@ -234,12 +267,12 @@ def navlink(label: str, target: str) -> str:
{coordinate}⌄
{version_links}
{sidebar}
Documentation/{html.escape(title)}
-{coordinate}{'Source pinned to ' + RELEASE_TAG if stable else 'May include additions beyond the released package'}
+{coordinate}{'Source pinned to ' + RELEASE_TAG if stable else 'Unreleased source; inspect the source coordinate and open contradictions before use'}
{content}
{next_link}