> For the complete documentation index, see [llms.txt](https://faction-os.gitbook.io/faction-os-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://faction-os.gitbook.io/faction-os-docs/public-website/docs/archive-docs_public-website/validation.md).

# Validation

Use this document when validating the public website after code, content, metadata, media, deployment, or docs changes.

## Package Gate

Run from the repository root:

```bash
npm --workspace @factionos/public-website run typecheck
npm --workspace @factionos/public-website run build
npm --workspace @factionos/public-website run check:links
```

What this covers:

* Astro content sync
* TypeScript no-emit
* static Astro build
* route availability
* generated blog/news routes
* draft exclusion
* RSS
* sitemap
* robots
* metadata
* canonical URLs
* Open Graph and Twitter metadata
* approved links
* legal pre-review markers
* guarded copy patterns
* static privacy boundary

## Root Gate

Use for broad changes:

```bash
npm run format:check
npm run lint
npm run typecheck
npm run build
npm run security:secrets
git diff --check
```

## Deploy Gate

Before any deploy attempt:

```bash
npm ci --no-audit --no-fund
npm --workspace @factionos/public-website run typecheck
npm --workspace @factionos/public-website run build
npm --workspace @factionos/public-website run check:links
```

Then run the workflow or manual deploy from an authorized environment. Missing Cloudflare credentials are not a local source failure; record them as `unavailable`, `blocked`, or `no-claim`.

## Manual Browser QA

Minimum route set after broad UI changes:

* `/`
* `/product/`
* `/features/`
* `/how-it-works/`
* `/use-cases/`
* `/use-cases/engineering-teams/`
* `/security/`
* `/blog/`
* `/news/`
* `/investors/`
* `/about/`
* `/contact/`
* `/press/`
* `/roadmap/`
* `/faq/`
* `/legal/`
* `/legal/privacy/`
* `/legal/terms/`
* `/legal/acceptable-use/`

Minimum viewports:

* 360px
* 768px
* 1280px
* 1600px

Manual checks:

* route returns 200 locally
* exactly one visible `h1`
* `main` is present
* no horizontal overflow
* header nav works on desktop
* mobile nav opens, focuses a menu link, and closes with Escape
* skip link is first focus target and moves to main
* demo/docs CTAs point to approved external destinations
* images load with useful alt text
* reduced-motion fallback works for animated media
* legal routes retain pre-review markers
* no text overlaps or spills out of controls

## Static Privacy Probe

The built-site checker is the canonical static privacy probe. It should fail if built output includes:

* tracker hosts
* tracker snippets
* `<form>` markup
* local/session storage writes
* cookie writes
* `navigator.sendBeacon`
* `fetch`
* `WebSocket`
* `EventSource`

If a future scoped decision intentionally adds any of these, update the security docs, source guardrails, and checker together.

## Status Labels

Use exact labels when recording evidence:

* `passed`
* `failed`
* `skipped`
* `blocked`
* `unavailable`
* `no-claim`
* `pending`

Do not convert local static evidence into hosted, legal, or certification claims.

## Current Known Evidence

As of 2026-06-02:

* Package typecheck: passed.
* Package build: passed with 31 pages and 26 optimized images.
* Built-site checker: passed with 31 routes and 2185 links.
* Root format/lint/typecheck/build/security/whitespace gates: passed.
* Local browser QA: passed for the critical route set and target viewports.
* Cloudflare Pages workflow readiness: passed.
* Live deploy: no-claim.
* Production HTTPS smoke: no-claim.
* Legal/privacy approval: pending.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://faction-os.gitbook.io/faction-os-docs/public-website/docs/archive-docs_public-website/validation.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
