Skip to content

Web audit view and public projects

The Worker serves a static audit view at its root. It shows one project: an overview with counters, the intents, each decision with its tags, matched rule and approvals, and the audit timeline.

https://wayglass.example.com/?project=acme-web
https://wayglass.example.com/?project=acme-web#/intents
https://wayglass.example.com/?project=acme-web#/intents/i269d1c348e
https://wayglass.example.com/?project=acme-web#/decisions/d4b1e2c3a09
https://wayglass.example.com/?project=acme-web#/audit

The page has no build step and no login. It reads the Worker’s public read-only routes:

GET /v1/public/projects/<name>
GET /v1/public/projects/<name>/intents
GET /v1/public/projects/<name>/decisions
GET /v1/public/projects/<name>/decisions/<decision-id>
GET /v1/public/projects/<name>/audit

A project appears only when two separate gates are both open:

  1. The Worker variable PUBLIC_PROJECTS matches its name. It is a comma-separated list of exact names or prefixes ending in a single *, for example demo-*,eu-demo-*. A bare *, or a * anywhere but the end, matches nothing. Changing it means changing wrangler.jsonc and deploying.
  2. The project itself opted in, either at creation with wayglass init --public or later by an admin with PATCH /v1/projects/<name> {"public": true}. The change is audited (project.made_public, project.made_private) and can be reversed at once with {"public": false}.

Any other name gets the same 404 whether the project exists or not, so the routes do not reveal which projects exist.

Responses are built from a list of allowed fields, so a field added to the Worker later stays private until someone adds it here. Trunk and fork remotes, token ids, land ids, subscription ids and the client’s own preview of a decision are never returned. Token-shaped strings and Artifacts remote URLs inside free text, such as an intent’s reason, are masked.

What is shown: intent goals, reasons, agents, declared and changed paths, commits and statuses; decisions with tags, matched rule, action, reason, status and approvals (approver, verdict, reason); and the audit events.

Successful answers are cached for 15 seconds, so a project made private stops answering within that time.