> 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/.spec_system/archive/phases/phase_08/production_hosted_validation_evidence.md).

# Phase 08 Production-Hosted Validation Evidence

**Phase**: 08 - Release Hardening and Legacy Decommission **Session**: 05 - Production Hosted Validation And Deploy Smoke **Status**: Implementation evidence created **Created**: 2026-05-31

***

## Purpose

This artifact records the production-hosted smoke gate for deployed FactionOS release surfaces. It separates deployed public demo and Worker evidence from local browser tests, mocked Worker tests, CI-only checks, documentation-only claims, Cloudflare dashboard observations, and future hosted account behavior.

The gate is intentionally sanitized. Evidence may record target ids, labels, safe hostnames, docs paths, statuses, booleans, timing buckets, and issue codes only. It must not record Cloudflare account ids, zone ids, API tokens, tunnel tokens, request bodies, room payloads, prompts, command bodies, local paths, exports, logs, backups, replay buffers, raw dashboard output, or raw response bodies.

***

## Command

Default production-hosted smoke:

```bash
npm run release:hosted-smoke
```

Sanitized JSON output:

```bash
npm run release:hosted-smoke -- --json
```

Credential-free local summary:

```bash
npm run release:hosted-smoke -- --no-network --json
```

Focused target examples:

```bash
npm run release:hosted-smoke -- --target public-demo
npm run release:hosted-smoke -- --target warroom-worker-custom
npm run release:hosted-smoke -- --target warroom-worker-workers-dev
npm run release:hosted-smoke -- --target app-shell
```

The command exits nonzero for blocking contract failures such as unsafe URLs, timeout, fetch failure, non-2xx responses, malformed Worker health metadata, missing public demo shell evidence, missing service-worker cache evidence, or sensitive output. Unavailable/no-claim states are allowed by default for absent optional hosts and no-network runs.

***

## Target Matrix

| Target id                    | Surface                         | Default host                                              | Required by default | Evidence type                                                                                                                     |
| ---------------------------- | ------------------------------- | --------------------------------------------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `public-demo`                | Cloudflare Pages public demo    | `demo.faction-os.com`                                     | Yes                 | HTTPS shell load, service-worker availability, cache-version discovery, local endpoint leak scan, raw repository asset leak scan. |
| `warroom-worker-custom`      | War Room Worker custom domain   | `warroom.faction-os.com`                                  | Yes                 | `/health` service id, app-level rate-limit posture, deployment type `custom-domain`, timeout/failure mapping.                     |
| `warroom-worker-workers-dev` | War Room Worker workers.dev URL | `factionos-warroom.apex-web-services-llc-0d4.workers.dev` | Yes                 | `/health` service id, app-level rate-limit posture, deployment type `workers-dev`, timeout/failure mapping.                       |
| `app-shell`                  | Optional deployed app shell     | None configured                                           | No                  | Unavailable/no-claim unless `FACTIONOS_PRODUCTION_APP_URL` or `FACTIONOS_HOSTED_APP_URL` is explicitly set.                       |

Environment overrides:

| Variable                                    | Target                       | Boundary                                                                                        |
| ------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------- |
| `FACTIONOS_PUBLIC_DEMO_URL`                 | `public-demo`                | Public HTTPS URL only; no credentials, query string, fragment, or localhost.                    |
| `CLOUDFLARE_WARROOM_CUSTOM_HEALTH_URL`      | `warroom-worker-custom`      | Public HTTPS health URL only; no credentials, query string, fragment, or localhost.             |
| `CLOUDFLARE_WARROOM_HEALTH_URL`             | `warroom-worker-custom`      | Fallback custom-domain health override with the same URL rules.                                 |
| `CLOUDFLARE_WARROOM_WORKERS_DEV_HEALTH_URL` | `warroom-worker-workers-dev` | Public HTTPS workers.dev health URL only; no credentials, query string, fragment, or localhost. |
| `CLOUDFLARE_WARROOM_WORKER_HEALTH_URL`      | `warroom-worker-workers-dev` | Fallback workers.dev health override with the same URL rules.                                   |
| `FACTIONOS_PRODUCTION_APP_URL`              | `app-shell`                  | Optional production app shell URL. Absence is an allowed no-claim result.                       |
| `FACTIONOS_HOSTED_APP_URL`                  | `app-shell`                  | Fallback optional app shell URL. Absence is an allowed no-claim result.                         |

***

## Sanitized Result Schema

Each result records:

* `id`: stable target id.
* `label`: human-readable target label.
* `kind`: `public-demo`, `warroom-worker`, or `app-shell`.
* `status`: `passed`, `failed`, `unavailable`, or `skipped`.
* `claim`: `validated` or `no_claim`.
* `host`: safe hostname only, or `null` when unavailable.
* `docsPath`: repository-relative documentation path.
* `timingBucket`: coarse bucket such as `lt_250ms`, `lt_1s`, `lt_3s`, `lt_8s`, `gte_8s`, or `not_run`.
* `checks`: booleans only.
* `issueCodes`: stable issue codes only.

The report does not include raw URLs, query strings, request headers, response bodies, credential values, account ids, zone ids, tokens, local absolute paths, room payloads, prompts, command output, exports, logs, backups, or replay buffers.

***

## Recorded Implementation Evidence

Command run during implementation:

```bash
npm run release:hosted-smoke -- --no-network --json
```

Result summary:

| Target id                    | Status      | Claim     | Issue codes          | Notes                                                                                        |
| ---------------------------- | ----------- | --------- | -------------------- | -------------------------------------------------------------------------------------------- |
| `public-demo`                | unavailable | no\_claim | `NETWORK_DISABLED`   | Network intentionally disabled; no deployed Pages claim recorded by this run.                |
| `warroom-worker-custom`      | unavailable | no\_claim | `NETWORK_DISABLED`   | Network intentionally disabled; no deployed custom-domain Worker claim recorded by this run. |
| `warroom-worker-workers-dev` | unavailable | no\_claim | `NETWORK_DISABLED`   | Network intentionally disabled; no deployed workers.dev Worker claim recorded by this run.   |
| `app-shell`                  | unavailable | no\_claim | `TARGET_UNAVAILABLE` | No production app shell host is configured by default.                                       |

This result proves the command can emit credential-free no-claim evidence. It does not prove deployed public demo availability, deployed Worker availability, Cloudflare dashboard posture, hosted identity, hosted storage, analytics capture, push delivery, remote access, Cloudflare Tunnel, production account behavior, mobile/accessibility certification, or trusted unified erasure.

***

## Allowed Unavailable Results

Unavailable/no-claim is acceptable when:

* `--no-network` is explicitly used.
* The optional app shell host is absent.
* Cloudflare credentials or dashboard access are absent.
* A target URL is intentionally not configured for a local-first release workflow.

Unavailable/no-claim is not the same as pass/fail production validation. It must remain visible in release notes and final Session 08 closeout if no safe network smoke is run.

***

## Cloudflare Dashboard Boundary

This session does not read or store raw Cloudflare dashboard or API output. Dashboard observations may be summarized manually as statuses, entitlement labels, rule-slot constraints, and residual-risk notes only. Raw account ids, zone ids, API responses, screenshots with identifiers, tokens, tunnel values, or deployment payloads must not be tracked.

Current stable docs already record that managed/OWASP WAF execution was not entitled on the current plan and that the available zone rate-limit rule slot is occupied by `Leaked credential check`. The Worker production smoke therefore checks the app-level rate-limit posture exposed by `/health`; it does not prove dashboard WAF or zone rate-limit enforcement.

***

## Residual Risks

| Risk                                                          | Current state                                                | Handoff                                                                                                    |
| ------------------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
| Production-hosted public demo validation                      | Command exists; no-network implementation evidence recorded. | Run network smoke in a safe release environment and record sanitized result before a deployed Pages claim. |
| Production-hosted Worker validation                           | Command exists; no-network implementation evidence recorded. | Run network smoke against custom-domain and workers.dev health endpoints before a deployed Worker claim.   |
| Optional app shell validation                                 | No production app host is configured.                        | Keep `app-shell` unavailable/no-claim unless an explicit production app URL is supplied and validated.     |
| Cloudflare dashboard validation                               | Raw dashboard/API output is not tracked.                     | Record only sanitized dashboard constraints or unavailable/no-claim status in release closeout.            |
| Hosted identity/storage/analytics/push/remote/trusted erasure | Not activated or proven by this session.                     | Preserve no-claim wording through Sessions 06-08 unless later scoped evidence exists.                      |

***

## Session Handoff

Session 06 may use this artifact to distinguish production-hosted smoke from mobile and accessibility evidence. Session 08 must either record a safe network smoke result or carry forward the exact unavailable/no-claim states in final release readiness.


---

# 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/.spec_system/archive/phases/phase_08/production_hosted_validation_evidence.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.
