Desktop is optional for this fixture. The API path below submits the same versioned files and is the reproducible verification route.
+ Run the fixture through the API path below. If a development Desktop client is configured for that same fixture server, open the completed run and verify that its activity artifacts include result.txt.
+ The packaged Desktop does not automatically connect to the fixture server on port 18082. A Desktop-only fixture submission has not been verified.
}
api={
Run the fixture through the API
-
In one terminal, start the isolated daemon from the repository root:
-
{`sh examples/slurm/local-fixture/start-fixture.sh`}
-
Wait until it is listening, then use a second terminal:
+
Clone v1.0.8, or use an existing matching checkout. In one terminal, start the isolated daemon from its root:
+
{`git clone --branch v1.0.8 --depth 1 https://github.com/UFFeScience/akoflow.git akoflow-showcase
+cd akoflow-showcase
+sh examples/slurm/local-fixture/start-fixture.sh`}
+
Wait until it is listening, then open a second terminal at the root of the same checkout:
{`export AKOFLOW_API_URL="http://127.0.0.1:18082/akoflow-api"
sh examples/slurm/local-fixture/run.sh
curl --fail-with-body \\
+ -H "Authorization: Bearer \${AKOFLOW_API_TOKEN}" \\
"$AKOFLOW_API_URL/execution-runs/slurm-fixture-run-v1/" \\
| jq -r '.run.status'`}
The daemon uses no token by default. If your local configuration requires one, set AKOFLOW_API_TOKEN before running the supplied script.
@@ -92,8 +89,6 @@ rm -f examples/slurm/local-fixture/akoflow-*.status \\
examples/slurm/local-fixture/akoflow-*.log
```
-Never apply this cleanup pattern to an actual cluster workspace: those paths are owned by this fixture only.
-
## Troubleshooting
| Symptom | Cause and recovery |
@@ -103,4 +98,4 @@ Never apply this cleanup pattern to an actual cluster workspace: those paths are
| The run remains queued | Check that the first terminal is still running and that `sbatch` was invoked from the fixture's `bin` directory. Do not start a second fixture daemon against the same `.runtime` directory. |
| The artifact is absent | Inspect `examples/slurm/local-fixture/akoflow-*.log` and `.status`; then confirm Docker can pull `alpine:3.20`. |
-Related material: [SLURM/HPC connection guide](../guides/infrastructure/hpc-slurm), [local direct execution](./local-direct-execution), and [workflow runs](../guides/workflows/executions).
+Related material: [SLURM/HPC connection guide](/docs/guides/infrastructure/hpc-slurm), [local direct execution](/docs/showcase/local-direct-execution), and [workflow runs](/docs/guides/workflows/executions).
diff --git a/docs/docs/tutorials/api-access.md b/docs/docs/tutorials/api-access.md
index ca5e663f..f357c3dc 100644
--- a/docs/docs/tutorials/api-access.md
+++ b/docs/docs/tutorials/api-access.md
@@ -4,10 +4,10 @@ sidebar_label: API connection setup
description: Configure one API base URL and token convention for infrastructure tutorials.
---
-The infrastructure tutorials offer Desktop and API paths. For the API path,
-use Bash, `curl`, `jq`, and a daemon whose address and credential you manage.
-The [server installation guide](../guides/operations/server-instance) explains
-how to deploy one and choose its token. A development daemon is also suitable
+Use this setup for the API path in the HPC and Google Cloud tutorials. You need
+Bash, `curl`, `jq`, and an AkôFlow server whose address and credential you manage.
+The [server installation guide](/docs/guides/operations/server-instance) explains
+how to deploy one and choose its token. A development server is also suitable
when its connection settings are known.
Set the base URL **including** `/akoflow-api`, without a trailing slash:
@@ -19,11 +19,11 @@ read -rsp 'Akoflow API token: ' AKOFLOW_API_TOKEN; printf '\n'
export AKOFLOW_API_TOKEN
```
-`pipefail` keeps a failed HTTP request visible even when its output is piped
-to `jq`. Stop at any failed command before creating dependent records.
+`pipefail` keeps a failed HTTP request visible when its output is piped to
+`jq`. Stop if a command fails before creating dependent records.
-Replace the origin and port with your daemon's settings. Press Enter without a
-token only for an explicitly tokenless local daemon. For packaged Desktop,
+Replace the origin and port with your server's settings. Press Enter without a
+token only for a local server configured without one. For packaged Desktop,
connection details are managed by its proxy; completing the graphical tutorials
does not require extracting its internal credential.
@@ -38,10 +38,10 @@ curl --fail-with-body \
The first response must report `server.available: true`; the second must return
a catalog, which may be empty. A `401` means the supplied credential was rejected.
-A `403` may indicate that a tokenless daemon rejects non-loopback access.
+A `403` may indicate that a server without a token rejects non-loopback access.
Use a fresh tutorial identity. The examples use `research-hpc` and `research-gcp`;
if those already exist, inspect them before continuing instead of resubmitting
a create request. Store only returned credential references in environment JSON.
-Continue with [HPC registration](./register-hpc) or [Google Cloud connection](./connect-cloud).
+Continue with [HPC registration](/docs/tutorials/register-hpc) or [Google Cloud connection](/docs/tutorials/connect-cloud).
diff --git a/docs/docs/tutorials/connect-cloud.md b/docs/docs/tutorials/connect-cloud.md
index 6c212ad7..7fe83bbc 100644
--- a/docs/docs/tutorials/connect-cloud.md
+++ b/docs/docs/tutorials/connect-cloud.md
@@ -4,25 +4,22 @@ sidebar_label: Connect cloud / GCP
description: Validate a GCP credential, register a cloud environment and inspect the compute catalog using Desktop or the API.
---
-This tutorial connects **Google Cloud**, the compute provider available in the
-current **Cloud on demand** form. Its result is a registered environment and a
-synchronized catalog. It does not provision a VM.
-
-AWS support is currently for S3 data movement, not EC2 discovery/provisioning.
-For that separate task use [Configure AWS](../guides/infrastructure/aws).
+Connect Google Cloud through **Cloud on demand** and inspect its compute
+catalog. You will finish with a registered environment and reviewed machine,
+image, and disk choices. Connecting the account does not provision a VM.
## Before you begin
-Complete [installation checks](../installation). Obtain a GCP project and an
+Complete [installation checks](/docs/installation). Obtain a GCP project and an
approved service-account JSON credential from your cloud administrator. The
-project needs the APIs and access described in [Configure Google Cloud](../guides/infrastructure/gcp).
+project needs the APIs and access described in [Configure Google Cloud](/docs/guides/infrastructure/gcp).
Read that guide's access inventory; it distinguishes source-audited calls from
minimum IAM permissions that still require validation in a disposable project.
The service account belongs to Google Cloud. Creating an AkôFlow environment
does not create the project, service account, billing configuration or IAM grants.
-## Through the interface
+## Using AkôFlow Desktop
### 1. Open the cloud form
@@ -65,36 +62,41 @@ Open the saved environment and inspect **Cloud capacity**. If saving succeeded
but refresh failed, reopen the existing environment and refresh there; do not
create a duplicate just to retry synchronization.
-## Through the API
+## Using the API
-Complete [API connection setup](./api-access). Keep the service-account file
+Complete [API connection setup](/docs/tutorials/api-access). Keep the service-account file
outside your repository, with access restricted to your account.
### 1. Validate the service account
-The commands read the credential file directly; replace its path and the region.
+The commands read the credential file directly. Set the path, target project ID,
+and region to the values approved for this connection. The target project may
+differ from the project that owns the service account if it has the required
+access.
Run the following in Bash so `pipefail` also catches a failed JSON preparation:
```bash
set -o pipefail
AKOFLOW_GCP_KEY_FILE='/secure/path/service-account.json'
+AKOFLOW_GCP_PROJECT='your-project-id'
AKOFLOW_GCP_REGION='us-central1'
-AKOFLOW_GCP_PROJECT=$(jq -er '.project_id' "$AKOFLOW_GCP_KEY_FILE") || exit 1
-jq --arg region "$AKOFLOW_GCP_REGION" \
- '{provider:"gcp", credential:., projectId:.project_id, region:$region}' \
+jq --arg project "$AKOFLOW_GCP_PROJECT" --arg region "$AKOFLOW_GCP_REGION" \
+ '{provider:"gcp", credential:., projectId:$project, region:$region}' \
"$AKOFLOW_GCP_KEY_FILE" \
| curl --fail-with-body \
-H "Authorization: Bearer $AKOFLOW_API_TOKEN" \
-H 'Content-Type: application/json' --data-binary @- \
- "$AKOFLOW_API_URL/cloud-credentials/validate/" -o gcp-validation.json
+ "$AKOFLOW_API_URL/cloud-credentials/validate/" -o gcp-validation.json || exit 1
jq . gcp-validation.json
-jq -e '.valid == true' gcp-validation.json
+jq -e '.valid == true' gcp-validation.json || exit 1
```
Continue only when validation succeeds. Inspect `project`, `region`,
-`machineCount`, `imageCount` and `diskCount` before saving.
+`machineCount`, `imageCount` and `diskCount` before saving. A `valid: true`
+response can still have an empty category; resolve that before choosing cloud
+capacity.
### 2. Store the credential and prepare the environment
@@ -104,7 +106,7 @@ jq '{id:"research-gcp-credential", provider:"gcp", credential:.}' \
| curl --fail-with-body \
-H "Authorization: Bearer $AKOFLOW_API_TOKEN" \
-H 'Content-Type: application/json' --data-binary @- \
- "$AKOFLOW_API_URL/cloud-credentials/" -o gcp-reference.json
+ "$AKOFLOW_API_URL/cloud-credentials/" -o gcp-reference.json || exit 1
```
The response contains `credentialRef`, not the original secret. Download
@@ -119,12 +121,12 @@ jq --arg ref "$AKOFLOW_GCP_REF" \
'.connections[0].credentialRef=$ref |
.connections[0].configuration.projectId=$project |
.connections[0].configuration.region=$region' \
- gcp-environment.template.json > gcp-environment.json
+ gcp-environment.template.json > gcp-environment.json || exit 1
curl --fail-with-body \
-H "Authorization: Bearer $AKOFLOW_API_TOKEN" \
-H 'Content-Type: application/json' --data-binary @gcp-environment.json \
- "$AKOFLOW_API_URL/environments/" | jq
+ "$AKOFLOW_API_URL/environments/" | jq || exit 1
```
### 3. Refresh and inspect the catalog
@@ -149,16 +151,16 @@ A catalog GET may return `404` before the first successful refresh. Inspect
warnings as well as machines, images and disks: unavailable pricing must not
be interpreted as free compute.
-## Verify the connection result
+## Check the result
| Evidence | Expected result |
| --------------------- | ---------------------------------------------------------- |
| Credential validation | Correct project/region and `valid: true` |
| Environment | `research-gcp` exists with a cloud connection |
-| Catalog | Machines, compatible images and disk choices are available |
+| Catalog | Machine, image and disk counts are reviewed; any empty category is investigated before provisioning |
| Capacity | No VM is expected merely from connecting the account |
-Next, follow [Cloud capacity and machine configuration](../guides/infrastructure/cloud-capacity)
+Next, follow [Configure cloud capacity](/docs/guides/infrastructure/cloud-capacity)
to choose a target and deliberately provision a worker. That operation can create
billable resources; its guide covers lifecycle and cleanup. Do not treat catalog
access as proof that provisioning permissions are complete.
diff --git a/docs/docs/tutorials/register-hpc.md b/docs/docs/tutorials/register-hpc.md
index 4f3f47a7..d41960ab 100644
--- a/docs/docs/tutorials/register-hpc.md
+++ b/docs/docs/tutorials/register-hpc.md
@@ -4,29 +4,28 @@ sidebar_label: Register HPC / SLURM
description: Register a cluster through Desktop or the API, test its SSH connection, and verify discovered inventory.
---
-This tutorial registers an existing institutional HPC account in AkôFlow. It
-does **not** create an account at the institution or allocate compute time.
-Ask the cluster administrator for your login, permitted partition, SSH access
-policy, gateway requirements, and a shared workspace before starting.
-
-The result is a saved environment with a healthy connection and reviewed
-inventory. Running the first batch job is a separate step after registration.
+Register an existing HPC account and check that AkôFlow can reach the cluster
+and discover its resources. You will finish with a saved environment, a healthy
+connection, and reviewed inventory. A batch job comes after registration.
## Before you begin
-- Complete [installation and its result checks](../installation).
+- Complete [installation and its result checks](/docs/installation).
+- Ask the cluster administrator for your login, permitted partition, SSH access
+ policy, gateway requirements, and a shared workspace. Registration does not
+ create an institutional account or allocate compute time.
- Obtain the login hostname, SSH user and port, SLURM partition, and gateway
command when required. The AkôFlow daemon must be able to reach that route.
- Obtain authorization to use a managed SSH key and verify the site's host-key
trust requirements with your administrator.
- Confirm `sinfo`, `sbatch`, `squeue`, `sacct`, and `scancel` are available to your
- account. Review the [HPC operator guide](../guides/infrastructure/hpc-slurm)
+ account. Review the [HPC operator guide](/docs/guides/infrastructure/hpc-slurm)
for account/QoS, storage and container-runtime requirements.
`login.example.org`, `researcher`, and `cpu` below are placeholders. Replace them
with the values provided by your institution.
-## Through the interface
+## Using AkôFlow Desktop
### 1. Register an SSH service key
@@ -34,7 +33,7 @@ Open **Settings → SSH service keys**. Under **Register a service key**, enter
`research-hpc` and choose **Generate key**. Copy the public key and have it
authorized for your account on the login host and required gateways. If the
institution requires an existing key, use the separate import action described
-in [Credentials and SSH](../guides/operations/credentials-and-ssh).
+in [Manage SSH service keys](/docs/guides/operations/credentials-and-ssh).

@@ -74,11 +73,11 @@ runs from the daemon's host.
Choose **Save environment**, then open the saved environment. In its connection
section, run **Check now** and **Discover**. Review **Inventory** for the
expected cluster partitions and compute nodes; see the detailed
-[discovery checks](../guides/infrastructure/hpc-slurm#3-discover-the-actual-cluster-before-trusting-the-catalog).
+[discovery checks](/docs/guides/infrastructure/hpc-slurm#3-discover-the-actual-cluster-before-trusting-the-catalog).
-## Through the API
+## Using the API
-Complete [API connection setup](./api-access). Use the same approved host,
+Complete [API connection setup](/docs/tutorials/api-access). Use the same approved host,
account and partition as in the graphical path.
### 1. Generate and authorize the key
@@ -95,6 +94,9 @@ jq '{id, publicKey, fingerprint}' hpc-key.json
Authorize the returned `publicKey` through your institution's procedure before
continuing. Keep the returned `credentialRef`; do not invent a private-key path.
+The returned `fingerprint` identifies your service key, not the cluster's host
+key. Compare the host key separately as described in the
+[HPC operator guide](/docs/guides/infrastructure/hpc-slurm#1-create-the-ssh-credential-and-proxy-aware-connection).
### 2. Prepare the environment and test its connection
@@ -161,7 +163,7 @@ curl --fail-with-body \
Inspect the health result before running discovery. Keep the environment version
returned by the server when creating an execution scope.
-## Verify the registration result
+## Check the result
| Evidence | Expected result |
| ----------------- | -------------------------------------------------------------------- |
@@ -169,11 +171,11 @@ returned by the server when creating an execution scope.
| SSH health | Healthy from the daemon using the selected credential and route |
| Discovery | Expected partitions/nodes appear with plausible capacity |
| Compute boundary | The login host is not treated as a batch compute allocation |
-| Shared workspace | Site-provided path is accessible from an approved compute allocation |
+| Shared workspace | Site-provided path is recorded; access from a compute allocation still needs a batch probe |
A discovered partition is not a reservation. Registration does not prove that
an account, QoS, container image or shared filesystem will work in a batch job.
-Continue with [scope setup and a small real execution](../guides/infrastructure/hpc-slurm#5-scope-validate-and-submit-a-small-real-execution).
+Continue with [scope setup and a small real execution](/docs/guides/infrastructure/hpc-slurm#5-scope-validate-and-submit-a-small-real-execution).
## If registration fails
@@ -187,5 +189,3 @@ Continue with [scope setup and a small real execution](../guides/infrastructure/
The screenshots and payload structure were checked against the local interface
and handlers. Remote SSH, discovery and a real batch submission require your
institution's access and were not performed for this tutorial's capture.
-
-Next: [connect Google Cloud](./connect-cloud) when you also need cloud capacity.
diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts
index a0c894cd..1f6a6984 100644
--- a/docs/docusaurus.config.ts
+++ b/docs/docusaurus.config.ts
@@ -68,6 +68,18 @@ const config: Config = {
to: "/docs/reference/api-overview/",
},
{ from: "/docs/cli", to: "/docs/reference/api-overview/" },
+ ...[
+ "get-environments-environmentid-cloud-capacity-targets",
+ "post-environments-environmentid-cloud-capacity-targets",
+ "get-environments-environmentid-cloud-instances",
+ "post-environments-environmentid-cloud-instances",
+ "get-environments-environmentid-cloud-catalog",
+ "post-environments-environmentid-cloud-catalog-refresh",
+ "post-environments-environmentid-cloud-provisioning",
+ ].map((slug) => ({
+ from: `/docs/api/endpoints/environments/${slug}`,
+ to: `/docs/api/endpoints/cloud/${slug}`,
+ })),
],
},
],
@@ -118,7 +130,7 @@ const config: Config = {
title: "Docs",
items: [
{ label: "Getting Started", to: "/docs/getting-started" },
- { label: "Modules", to: "/docs/modules" },
+ { label: "Architecture internals", to: "/docs/modules" },
{ label: "Installation", to: "/docs/installation" },
{ label: "Downloads", to: "/docs/downloads" },
{ label: "Interface Tour", to: "/docs/guides/interface-tour" },
diff --git a/docs/editorial-audit-2026-09-12.md b/docs/editorial-audit-2026-09-12.md
new file mode 100644
index 00000000..7ec46350
--- /dev/null
+++ b/docs/editorial-audit-2026-09-12.md
@@ -0,0 +1,317 @@
+# Editorial audit ledger
+
+Date: 2026-09-12. Scope: authored documentation pages in the current branch; generated API endpoint pages are reviewed through their generator and component.
+
+This is an iteration ledger, not a completion certificate. The first pass read all 51 authored pages and corrected confirmed narrative, terminology, API convention, example, and support-claim findings. A Desktop first-workflow path was added as page 52; splitting the evidence, operations, artifact, and cloud-setup procedures and adding a Cloud support page now brings the authored tree to 61 pages. A final full audit, priority endpoint contracts, and external-provider validation remain open.
+
+## Open P0/P1 findings
+
+1. **P0 resolved — Desktop first workflow:** the v1.0.8 Linux package created a local environment, workflow, scope, and manual plan through Desktop. Run `run-1789254029488` completed with 1/1 activities, exit code 0, and generated `result.txt` (20 B, SHA-256 `8dcc517ee6ace065324746726b7f6b5cd67b8c22956ec75bd8b713a0aeaca070`). The new `guides/workflows/first-local-run.md` documents that UI path. The package was extracted and launched under Xvfb with Docker access; this run does not validate a clean package-manager install or other platforms.
+2. **P0 — Generated request contracts:** ZIP instance import is corrected and inferred JSON is labeled. Six first-run POST pages link the verified, versioned SimGrid payloads and their submission order. All 55 other mutating routes now carry handler/service-checked notes, and the generator fails if a future mutating route lacks a note or runnable request. The planning-session page has a concise example with its actual required fields. A field-level validation pass is still needed for inferred JSON examples; notes and build success do not prove every copied payload works.
+3. **P1 — Provider evidence:** GCP and S3 procedures still need disposable-account validation. The SLURM fixture is local adapter evidence, not an institutional batch run.
+4. **P1 — Full plain-language review:** after those corrections, re-read every authored page and the generated template as a new user, then repeat the audit until no new P0/P1 issue appears.
+5. **P0 resolved in this pass — AWS/S3 narrative:** the former guide described a Desktop storage-creation flow and implied saved AWS credentials enabled S3 operations. Current code exposes a browsing screen without creation and wires the transfer connector to server environment credentials. The guide and support matrix now state that limit; a live S3 procedure still needs validation.
+6. **P0 resolved in this pass — GCS claim:** the former support matrix and runtime explanations listed GCS as implemented transfer. The current `gs://` connector returns an unavailable error. The matrix, runtime pages, and schema reference now distinguish accepted `gcs` values from a working transfer path.
+7. **P1 resolved in this pass — scope/topology UI:** the scope form creates an empty topology. A separate link-creation form exists at `/network/new` in Desktop source, but current sidebar and scope detail do not link to it. The documented, navigable path for registering links is the API; the SimGrid and scope guides now say so.
+8. **P1 resolved in this pass — cloud target language:** saving a capacity target was described as making a provisioned resource. The guide now states that no VM is created at that step.
+9. **P1 resolved in this pass — execution state language:** the workflow guide said normal runs move through `created`, though the supervisor creates them as `running` after queue acceptance. The guide now matches the state reference.
+10. **P1 resolved in this pass — core concepts:** the concept page conflated executable artifacts with observed scientific files. It now distinguishes executable artifacts from scientific data, matching the data guide.
+11. **P1 resolved in this pass — Showcase Desktop claims:** six Showcase tabs described unverified Desktop-only submissions; some asked users to add network links through a Desktop path not exposed in current navigation. The tabs now identify API submission as the verified path and limit Desktop steps to inspection on the same server.
+12. **P0 resolved in this pass — GCP Desktop route:** the detailed guide directed readers to a separate Settings credential form and a “New environment” action that do not match the current cloud onboarding. It now follows the tested form path in the connection tutorial.
+13. **P0 resolved in the second pass — credential examples:** the SSH import example wrote a private key into a predictable `/tmp` JSON file without restrictive creation permissions. It now streams JSON directly from the existing protected key file to the API, without a temporary payload. The Kubernetes token example likewise reads a protected file into a streamed request instead of asking readers to put a token in a shell command. Both Bash blocks passed syntax checking.
+14. **P0 resolved in the second pass — cloud target/API examples:** the API overview put a literal token in a shell `export`; it now uses the shared secret prompt. The capacity-target example omitted `sshSourceRanges`, which lets the current Terraform target default SSH ingress to `0.0.0.0/0`, and attached a configuration-version ID before the guide created it. The example now requires an approved CIDR and leaves optional machine configuration out of the base request.
+15. **P0/P1 resolved in the second pass — Showcase setup:** four Showcase API blocks and the SimGrid guide put a token placeholder in a shell `export`; they now use the shared API setup. Six Showcase procedures assumed an unprovided repository checkout; each now shows how to enter the v1.0.8 files before running its script or inline requests. The edge–cloud page uses the checked-in submission script instead of repeating six HTTP calls. The Showcase index no longer calls a single 50-core run a scheduler scalability test.
+16. **P0/P1 resolved in the second pass — core narrative and runtime support:** Core concepts now leads to the verified local Desktop run. `serverless` was listed alongside runtime drivers with an ambiguous mode; current source has a domain enum but no built-in adapter, so the runtime table now marks it unavailable. The planning and timing explanations removed repeated implementation detail while preserving prediction-versus-observation limits.
+17. **P0/P1 resolved in the second pass — storage operation contracts:** five generated endpoint pages now state the storage and path preconditions plus the observed completion semantics for download, checksum, copy, archive, and index. The storage guide no longer groups immediate file downloads with queued archives. The `202` index route currently completes its scan before responding; the note makes that behavior explicit.
+18. **P0/P1 resolved in the second pass — artifact examples and contracts:** the artifact guide no longer supplies nonexistent lineage/project IDs or leaves `BUILD_ID` undefined. Five generated endpoint pages now distinguish upload from metadata registration, build specification from started run, and stored materialization records from verified byte transfers.
+19. **P0 resolved in the second pass — console outcome:** the one-shot console guide wrongly treated runner failure as HTTP `422`. The service waits for the runner and returns a `201` command record with `status: failed`; the guide and generated endpoint now tell readers to inspect status and failure. A successful session creation returns `connected`, not a `starting` session. Seven more generated endpoint pages now state checked console, connection-test, machine-configuration, and GCP-only catalog-validation limits.
+20. **P0/P1 resolved in the generated API template:** the short-name struct index let a SimGrid `Request` alias overwrite the real console `Request`, so the console-command page displayed an unrelated workflow execution body. Concrete structs now win over aliases; conflicting short names produce no inferred sample. All 125 generated pages now show each JSON shape once, omit Go type names from the reader-facing component, use a short sample caveat, and link Console to its actual task guide. The six verified SimGrid routes use their versioned files instead of large inferred request bodies.
+21. **P1 resolved in the generated API template — qualified responses:** `environment.Definition` and `workflow.Definition` shared a short name, which suppressed response examples after the conservative collision fix. The generator now resolves qualified aliases for both types; environment and workflow responses have their correct shapes again. Long response examples scroll within a bounded block instead of stretching the whole page.
+22. **P1 resolved in the entry path — first action and download:** Home said to start with a local simulation even though the recommended first Desktop workflow is a real local run. It now names that workflow and sends the download action to the versioned platform-selection page. Installation and Interface tour replace avoidable daemon/control-plane language with the service or instance the reader sees. The current GitHub latest release was checked as `v1.0.8` before this second read.
+23. **P1 resolved in the GCP connection tutorial — target project:** the API example derived its target project from the service-account key's `project_id`, while the provider accepts an explicit connection `projectId`. It now asks for the approved target project separately, matching Desktop and supporting a key authorized across projects. Critical credential/registration pipelines stop on failure rather than reading an older result file. All Bash blocks in the three connection tutorials parsed; a fake-key `jq` check confirmed separate credential-owner and target-project values. This is local contract evidence, not live GCP validation.
+24. **P0 resolved in the Kubernetes how-to — token exposure:** its API example interpolated a short-lived bearer token into `curl --data`, exposing the token in process arguments. It now streams the token from `kubectl` through `jq` to `curl --data-binary @-`, stops on any pipeline failure, and uses the server-returned `credentialRef`. Handler and token-manager source confirm the response contains only that reference. Bash parsing and a fake-token JSON check passed; no shared cluster was contacted.
+25. **P1 resolved in the environment how-to — incomplete remote path:** the page tested an SSH connection using `host:port` in `endpoint` and then queried a different connection ID that it never saved. Remote registration now links to complete HPC/GCP tutorials; the health/discovery commands use the actual ID from the HPC template as an explicit precondition. The page also replaces an internal Go type name with the fields readers need.
+26. **P0/P1 resolved in the workflow guides — misleading examples:** the portable YAML guide reused the checked-in first-run workflow name, so following both guides could collide. It now uses its own name and matching read/export paths, says to save the file before the `curl` command, and identifies the empty commands as simulation-only. The execution guide no longer describes command history as a catalog of available console commands, and states the SimGrid setup required by its request example. The first-run guide trims repeated caveats while retaining its verification limit.
+27. **P0 resolved in instance settings — sample overwrote identity:** the `PUT /instance/` example told readers to preserve the current identity but sent hard-coded `id`, `name`, and other metadata instead. It now reads the current object, changes only `transferBufferBytes` with `jq`, and sends the complete result. Handler code confirms the endpoint replaces the saved instance object and requires `id` and `name`.
+28. **P1 resolved in scope/topology guidance — example prerequisites:** the reference submitted checked-in SimGrid files without saying how to get them or register their environment. It now links the versioned first-run setup and states the required checkout and order. The scope guide now identifies its HPC/cloud IDs as illustrative, links the runnable bundle, and states that topology creation does not enforce scope membership for link endpoints.
+29. **P1 resolved in workflow specification — mixed-mode example:** the lead “complete” document combined one simulation-only activity with two real-only activities and named image paths without supplying scripts. It now presents a consistent real-execution field example, states the script prerequisite, and links the tested SimGrid sequence for a runnable tutorial.
+30. **P0 resolved in environment reference — unavailable version action:** the common-failure row advised creating a new version within an in-use environment, but no API route appends a version and repository replacement deletes/reinserts the inventory transactionally, failing when references prevent it. The reference now tells readers to register revised inventory under new environment and version IDs and qualifies `PUT` replacement.
+31. **P0/P1 resolved in server and troubleshooting guides — broken tunnel command and basic-path language:** the Linux server guide's `ssh ...
@` line was invalid Bash because `<` starts redirection. It now prompts for SSH user and hostname and quotes the destination. The guide also replaces repeated control-plane language, corrects token creation instructions, and enables `pipefail` for both `curl | jq` checks. Troubleshooting calls reset deletion of local AkôFlow data. The planning/execution state reference was source-checked without a change.
+32. **P0/P1 resolved in HPC guide — incomplete API update and proxy command:** the page submitted `research-hpc-connection.json` without creating it, used an ID different from the registration tutorial, and showed a `ProxyJump` command missing its SSH destination. It now reuses the tutorial ID, marks the credential reference as a replacement value, directs API registration to the complete template/test/save sequence, and asks readers to validate a complete proxy route from the server host. Institutional SLURM execution remains unverified.
+33. **P1 resolved in instance import — manual response placeholder:** the import sequence asked readers to replace a quoted `SNAPSHOT_ID` placeholder by hand before activation. It now saves the import response, extracts the returned `id` with `jq`, and stops if import or extraction fails. A new repository check parses all 108 fenced Bash/sh blocks and runs in documentation CI; syntax coverage does not prove endpoint behavior or that named files exist.
+34. **P0/P1 resolved in generated instance/environment reference — replacement contracts:** three more endpoint pages now state source-checked `PUT /instance/` identity and buffer limits, `PUT /environments/{environmentId}/` complete-definition/path-ID and in-use constraints, and archive activation response/restart behavior. The inferred JSON remains explicitly illustrative; the new notes link to task and field references.
+35. **P0/P1 resolved in environment guide — incomplete local definition:** the API example omitted version-model fields, the resource provider ID and schedulable capacity, and an explicit enabled runtime binding, while the guide described versioning more broadly than the current single-version creation route. The example now supplies those fields; the intro tells readers to use new environment and version IDs for revised inventory already in use.
+36. **P0 resolved in environment/topology references — misleading database defaults:** the create repositories explicitly insert decoded Go fields, so omitting `computeSpeedup`, `schedulable`, or resource-binding `enabled` from API input saves `0` or `false`, despite database schema defaults of `1` or `true`. Likewise, an omitted topology-link `bidirectional` saves `false`, and omitted `sharingPolicy` saves an empty string that SimGrid maps to shared. Both field references now state API behavior. The updated local environment JSON parsed and persisted through a one-off repository test, which confirmed its schedulable resource and enabled binding.
+37. **P0/P1 resolved in generated connection/workflow/planning routes — task preconditions:** six more endpoint pages now state checked `PUT` connection identity and replacement behavior, health-probe `200` versus `offline`, discovery's saved-connection/bound-resource needs, portable workflow-import rules, duplicate-name requirements, and feasible-candidate selection semantics. The notes distinguish returned status from successful underlying work and link the workflow format where appropriate.
+38. **P0/P1 resolved in cloud-capacity path — mismatched environment and missing response IDs:** the guide told readers to continue from the GCP tutorial but called `gcp-lab` instead of the tutorial's `research-gcp`, then left target and operation IDs as manual placeholders. It now captures both returned IDs and uses them for provisioning and inspection. Two generated endpoint notes state catalog-refresh behavior and capacity-target preconditions, including the current non-atomic target/resource registration sequence. Live GCP validation remains open.
+39. **P0 resolved in planning cancellation contract — misleading missing-session status:** the handler maps cancellation failures to `409`, including a missing session, while the service accepts repeated cancellation but rejects completed and failed sessions. The generated endpoint now states those outcomes and that cancellation requests active work to stop.
+40. **P1 resolved in planning how-to — candidate selection broke the API path:** after listing candidates, the guide reverted to an unfilled `` in its detail and selection requests. It now waits for final ranking, lists returned IDs, asks the reader to choose one, and reuses that value to inspect and select a feasible candidate.
+41. **P0/P1 resolved in provenance/audit API examples — undefined filter IDs:** lineage used `$RUN_ID` without obtaining it, and the audit failure example required an undefined `$ENVIRONMENT_ID`. The page now asks for a run ID from Explore, rejects an empty value, and demonstrates a runnable failure query before showing an optional environment filter. The nearby panel and depth language was shortened.
+42. **P0/P1 resolved in artifact browsing examples — undefined inventory IDs:** the guide used `$ENVIRONMENT_ID`, `$STORAGE_ID`, and `$RUN_ID` without obtaining them. It now takes an existing environment ID, lists its storages, asks for one returned storage ID, and lists materializations without requiring a run filter. Sample file and destination paths are explicitly identified as values to replace.
+43. **P0/P1 resolved in interactive-console API flow — missing session ID and premature close:** the guide opened a session on a fictitious `hpc-login` ID, then used `$SESSION_ID` without setting it and placed session closure before streaming and log export. It now takes a saved interactive-capable resource ID, captures the returned session ID, reuses the resource for one-shot commands, and closes the session after use. The command JSON was checked with `jq`.
+44. **P1 resolved in notification API equivalents — undefined operation IDs:** the page listed detail URLs with `$PLANNING_SESSION_ID`, `$RUN_ID`, and `$ENVIRONMENT_ID` without obtaining them. It now begins with the planning-session and run collections, then asks for a saved cloud environment ID only for the cloud-instance list.
+45. **P1 resolved in troubleshooting connection history — undefined ID:** the history command used `$CONNECTION_ID` without a source. It now asks for the saved connection ID shown by the environment detail or registration response and rejects an empty value.
+46. **P0 resolved in destructive and resource API contracts — outcome and dependency gaps:** seven more generated routes now state handler-checked reset, capacity-target, environment, storage-entry, scope, console-session, and resource-upsert behavior. The factory-reset guide also states that token-file cleanup can return `422` after the database has already been cleared. Resource creation is identified as an upsert that does not create a runtime binding; target deletion is identified as a soft disable that leaves its capacity resource unschedulable.
+47. **P0 resolved in mutation-route coverage — nine remaining contracts:** the two read-only SQL POST routes, ZIP import, preference replacement, and five cloud lifecycle actions now have handler/service-checked notes. The instance-import limit was corrected from 10,000 to 100,000 archive entries to match `maxArchiveFiles`. All 61 mutating routes are now covered by 55 notes or six versioned runnable requests. The generator enforces that coverage for new routes; live cloud/provider validation and field-level payload checks remain open.
+48. **P1 resolved in generated example presentation — inferred bodies looked runnable:** the shared endpoint component labeled inferred values simply “Body” and offered “Copy” for commands that still require a request file or path ID. It now labels these as request field shapes and cURL templates at the point of use, marks the one checked planning payload as an example request, and states what must be supplied before running a template. The repeated page-end caveat was removed. Rendered pages for inferred SQL, checked planning, and ZIP import showed the intended labels; field-level payload validation remains open.
+49. **P2 resolved in scheduler explanation — repeated prediction caveats and dense prose:** the PRISM/HEFT page now keeps one concise account of shared inputs, search differences, detailed evaluation, cost, and evidence-based comparison. Its authored text fell from 1,021 to 745 words (27%) without removing the algorithm-specific evaluator limit. The two network examples now use the correct 8.6-second serialization estimate for 10 GiB at 10 Gbit/s, and the observed-timing page uses reader-facing language for run metrics.
+50. **P2 resolved in installation narrative — repeated setup and verification prose:** the entry path keeps Docker checks, platform commands, and local onboarding steps, while shortening repeated first-launch and package-evidence explanations. The page fell from 1,818 to 1,667 words. It now states the tested Linux extracted-package scope and unverified clean `apt`/macOS/Windows paths in one place, linking to the recorded digest.
+51. **P1/P2 resolved in entry navigation — inconsistent menu paths and tour scope:** the Desktop first-run page now names **Infrastructure → Environments** and **Infrastructure → Execution scopes** consistently with other guides. The Interface tour stays on Desktop navigation instead of repeating the general Desktop/API split; its text fell from 698 to 569 words while keeping search, breadcrumbs, terminal, and read-only guidance.
+52. **P1 resolved in AWS/S3 guidance — implementation language obscured the usable path:** the guide now tells readers directly that S3 transfers need server environment credentials, saved AWS credentials do not enable those transfers, and the Storage screen cannot validate private-bucket access. It keeps the unverified live-AWS status and EC2 limit without explaining internal resolver or driver wiring in the user path.
+53. **P2 resolved in HPC setup — repeated scope and implementation terms:** the opening now states who needs the guide and where to start, while the resource step describes the partition and node behavior in user terms. It keeps the local fixture's validation limit and site-specific SLURM requirements; the page fell from 1,532 to 1,451 words.
+54. **P0 partially resolved in generated request contracts — SQL examples were placeholder shapes:** both provenance SQL POST pages now show a concrete `execution_runs` query with a named `status` parameter, and the query page includes pagination. Handler tests decode the exact JSON and confirm the forwarded fields; repository tests execute the query and explain it against SQLite. Both generated pages mark these requests as verified examples. Other inferred request shapes still need field-level validation.
+55. **P0 partially resolved in generated request contracts — machine playbook validation was a placeholder shape:** `POST /machine-configuration-validations/` now shows a complete minimal Ansible playbook in `playbookYaml`. A handler test submits the exact JSON and checks HTTP `200`, `valid: true`, and a content digest; the existing validator test covers the same playbook. The endpoint checks structure only, as its note states; other inferred bodies remain open.
+56. **P0 partially resolved in generated request contracts — machine configuration creation/versioning were placeholder shapes:** the two POST pages now use minimal requests in sequence, with one explicit configuration ID and a version-1 playbook. A handler test submits both exact JSON bodies against a bootstrapped SQLite repository and verifies the saved configuration, version, and digest. The version page tells readers to use the created ID in its path. Other inferred bodies remain open.
+57. **P0 resolved in generated build-context submission — wrong primary cURL body:** `POST /build-contexts/` previously showed an inferred JSON shape and a JSON file template even though the documented, byte-uploading path is multipart field `context`. The generated page now shows a multipart cURL template for `context.tar.gz`; JSON is described only as metadata registration for bytes already in the artifact store. The built HTML contains the multipart command and no JSON content-type command. Existing handler tests submit multipart and JSON forms separately; both targeted tests passed.
+58. **P0 partially resolved in generated artifact registration — Docker image body was a placeholder shape:** `POST /artifacts/docker/` now uses the same concrete BusyBox request as the user guide. A handler test submitted that exact JSON to a bootstrapped SQLite repository and verified the saved artifact version and build specification. The request does not start the registry pull or SIF conversion; those remain separate build-run work. Other inferred bodies remain open.
+59. **P0 resolved in storage-promotion field names — generated PascalCase conflicted with the guides:** both promotion handlers now declare lower-camel JSON names explicitly. The generated field shapes and verified examples use `path`, `workflowVersionId`, `runId`, `activityId`, `name`, and `version` consistently. A handler test submits the exact two guide bodies and verifies forwarded fields; storage-service tests cover file checks and promotion. The example paths must be replaced with files in a registered storage, as the endpoint notes state.
+60. **P0 partially resolved in storage operation requests — five placeholder shapes:** download, checksum, copy, archive, and index pages now show concrete request bodies, with explicit instructions to replace example paths, destination storage, or index ID. Handler tests submit the exact JSON and check route status, forwarded path/destination, and returned ID or digest; storage-service tests remain the evidence for file handling. These tests do not prove that the example files exist in a user's storage.
+61. **P0 partially resolved in console request bodies — inferred shapes hid the minimal action:** the session and one-shot command pages now show only `resourceId` and, for a command, `command`. A handler test submits both exact JSON bodies and checks the forwarded fields and HTTP status. The route notes require a saved compatible resource and distinguish `201` from successful command execution; the test does not open a real terminal.
+62. **P0 partially resolved in connection-test reference — generic body obscured a runnable local probe:** `POST /connection-tests/` now shows `{ "type": "local" }` and separates SSH, agent, and Kubernetes prerequisites from the local example. A handler test submits the exact JSON to the real local prober and checks `200`, `healthy: true`, and the decoded connection type. The route does not save a connection; remote/provider validation remains separate.
+63. **P0 partially resolved in instance request examples — a generic replacement body risked lost fields:** `PUT /instance/` no longer displays an inferred full object as if it were safe to submit; its guide reads the current record, changes only `transferBufferBytes`, and sends the whole object back. A handler/SQLite test confirms that identity and metadata survive. `PUT /user-preferences/{clientId}/` now shows the guide's small verified body; the same test confirms its saved theme and animation setting. Sixteen inferred request bodies remain displayed across the generated reference.
+64. **P0 partially resolved in workflow route variants — import and duplicate used inferred shapes:** the compatibility import page now links the versioned SimGrid workflow YAML as an alternative to the create route in the six-step tutorial. A handler test imports that exact file. The duplicate page now shows a short `name`/`namespace` JSON request, tested against a source workflow fixture. The reference warns against sending the same workflow through both creation routes. Fourteen inferred request bodies remain displayed.
+65. **P0 partially resolved in resource upsert — inferred body implied a runnable resource:** `POST /resources/` now shows a concrete inventory-only resource in the first-run SimGrid environment, explicitly `schedulable: false`. A handler/SQLite test saves the exact JSON and checks its capacity, speedup, and lack of runtime binding. The page explains that upsert can overwrite an existing ID and that planning needs a complete environment definition with a binding. Thirteen inferred bodies remain displayed.
+66. **P0 partially resolved in replacement references — inferred bodies could overwrite saved fields:** `PUT /environments/{environmentId}/` and `PUT /environment-connections/{connectionId}/` no longer display generated full-object shapes with fictitious values. Their handler-checked notes direct readers to read the current environment/connection, preserve the full definition, match path IDs, and account for in-use replacement limits. Source and existing handler tests support those constraints; a complete replacement procedure remains user-specific. Eleven inferred bodies remain displayed.
+67. **P0 partially resolved in artifact operation references — inferred bodies hid required records:** `POST /artifact-builds/` and `POST /artifact-materializations/` now describe prerequisites without displaying speculative JSON. The build route records a specification after an uploaded context; it does not run the build. The materialization route records caller-provided state without copying or verifying bytes. Its public `environmentId` field must contain an environment version ID, as the repository foreign key and a regression test confirm. Nine inferred bodies remain displayed.
+68. **P0 partially resolved in credential references — fake secrets looked usable:** SSH key generation now displays the exact JSON used by an existing handler test. SSH key import, Kubernetes token storage, cloud credential storage, and live cloud validation no longer display placeholder secret bodies; their notes specify the required fields and actual provider limits. Four inferred bodies remain displayed.
+69. **P0 resolved in generated cloud-operation status labels:** seven cloud action handlers delegate to `enqueueCloudOperation`, which returns `202 Accepted`; shallow status extraction had shown `200 OK` on their pages. The generator now sets their delegated status explicitly. `202` means an operation was queued or an existing active operation returned, not that a VM is ready.
+70. **P0 partially resolved in remaining request shapes — fabricated plan and provider objects:** schedule-plan import and three cloud target/provisioning routes no longer show generic JSON with `"string"` IDs, zero capacities, and placeholder image names. Their notes state the saved-record and account-specific prerequisites; the plan response shape remains available as a field reference. No inferred request bodies remain displayed, but full field-level validation of these routes and their responses is still open.
+71. **P0 resolved in WebSocket success status:** the console stream page had inherited a default `200 OK` even though `StreamSession` upgrades a valid connection to `101 Switching Protocols`. The generated reference now states the WebSocket contract and links to the console guide. The generator rejects success statuses it cannot infer, with explicit exceptions only for the WebSocket delegate, seven queued cloud delegates, and five handlers that successfully write bytes with Go's implicit `200`.
+72. **P0 resolved in WebSocket request presentation:** the shared endpoint component offered an ordinary cURL GET template for the terminal stream even though it requires a WebSocket upgrade. That page now shows the `ws://` route, `wss` guidance, and a link to the stream protocol; the built HTML has no cURL template on that page. Across generated JSON response pages, the illustrative-shape label now appears before the object so placeholder values are identified before readers see them.
+73. **P0 resolved in daemon health command:** `GET /` was shown with the API base URL plus `/`, which targets `/akoflow-api/` instead of the registered root route. The cURL command now removes `/akoflow-api` from the configured base URL for this one endpoint. The page distinguishes its plain `ok` response from preflight capability checks; the built HTML contains the corrected shell expansion and not the old path.
+74. **P0 resolved in WebSocket response label:** the console stream reference identified its response media type as `application/websocket`, but a successful handshake uses HTTP `101 Switching Protocols` and an Upgrade header rather than that `Content-Type`. The page now labels the result “WebSocket upgrade” while leaving message framing to the stream protocol guide.
+75. **P0 resolved in preflight response presentation:** the generated preflight page showed `server`, `docker`, and `buildkit` as simultaneously available, although the handler returns `200 OK` even when the Docker socket or BuildKit command fails. The fabricated all-green response is gone; the page now names the three checks and tells readers to inspect each `available` value in the daemon's response before a local run.
+76. **P1 resolved in infrastructure YAML presentation:** SimGrid, SLURM, and Kubernetes guides labeled partial YAML blocks with complete versioned filenames. The code titles now say which part of the file is excerpted, and SimGrid/SLURM explicitly direct readers to the full bundle before submission. The GCP guide now discloses at the start that its provider calls are source-audited but a disposable-project provision-and-destroy cycle is unverified; the SLURM guide likewise distinguishes its local fixture from an institutional cluster run.
+77. **P1 resolved in installation narrative:** the installation page now states near platform selection that an extracted Linux v1.0.8 package completed a local workflow while clean `apt`, macOS, Windows, and AppImage first launches remain unverified. Its duplicate post-setup checkpoint table was replaced with a short `Set up later` confirmation: **Connected** proves local daemon reachability, while the catalog stays empty until an environment is registered. The existing **Ready** step remains the confirmation for the full local assistant path.
+78. **P1 resolved in the basic reading path:** Home, Downloads, Getting Started, Installation, the Desktop first-workflow tutorial, and Interface Tour were read together as one new-user sequence. Downloads now calls daemon/BuildKit archives service assets without claiming automatic retrieval on every platform. The first-workflow tutorial identifies the verified Linux package as extracted and removes an irrelevant BusyBox implementation detail. The tour no longer introduces read-only instance modes before the user needs them. The sequence still requires clean-host and other-platform execution checks before its completion gate can be claimed.
+79. **P1 resolved in the scheduling path:** the planning how-to led with session states, candidate field inventories, and assignment internals before the user procedure. It now starts with the workflow/scope/candidate action, keeps the Desktop and API steps together, and links to the PRISM/HEFT explanation and state reference when those details become useful. The PRISM/HEFT, planning-model, and observed-timing explanations were read alongside it; their predicted-versus-observed distinctions remain intact. Provider-dependent timing and full request validation are still open.
+80. **P1 resolved in evidence guide scope:** one long guide mixed tracing a scientific result with investigating operational events. The old URL is now a short choice page; separate provenance and audit guides hold their own Desktop/API procedures, screenshots, limits, and investigation steps. Sidebar, Getting Started, Interface Tour, feature coverage, and API-reference links now lead to the relevant task. This preserves the old URL for inbound links while giving each procedure one objective.
+81. **P0 partially resolved in SSH credential assignment example:** the credentials guide said to preserve the saved connection but showed a partial `PUT` body that could drop proxy and port settings. It now reads `GET /environments/{id}/`, selects the existing connection, changes only `credentialRef` with `jq`, sends the full object, and runs a separate health check. A local `jq` check preserved a sample port and proxy command; the repository `UpsertConnection` updates all supplied fields. The exact HTTP sequence still needs a controlled end-to-end submission. The cloud-credential section now links to the complete Google Cloud connection tutorial.
+82. **P1 resolved in search and notification scope:** one operations page mixed record lookup with profile-local operation alerts. Its existing URL is now a short choice page; separate guides hold Desktop/API search, result limits, notification behavior, collection queries, and recovery. The Interface Tour links directly to record search. This keeps the two objectives distinct without losing the old address.
+83. **P0 resolved in the GCP guide API checkpoint:** the cloud tutorial and its environment template create `research-gcp`, but the detailed GCP guide refreshed and read the catalog of `gcp-lab`, which would return 404 on the documented path. Both checkpoint commands now use `research-gcp`. The cloud support matrix and AWS/S3 guide were reread together; their partial-support limits remain explicit. Live provider provisioning and transfer validation remain open.
+84. **P1 resolved in the console's basic path:** the console guide, troubleshooting step, and embedded connection diagram introduced control-plane and runtime-binding terms before the reader could open a terminal. They now describe the selected resource, interactive access, and its saved connection. The API section retains the runtime and connection IDs returned by session creation, where those fields matter.
+85. **P1 resolved in workflow execution scope:** the execution how-to mixed starting a planned workflow with terminal-session API details and used adapter language in its first explanation. It now explains real versus simulated workflow runs in user terms and links once to the separate console task. The result list is qualified because transfer, cost, and startup observations depend on the runtime and available evidence.
+86. **P1 resolved in artifact guide scope:** the former artifact guide combined storage browsing and file promotion, Docker/SIF builds, and artifact-location inspection. Storage already had a focused guide with the same browse and promotion procedures. The old URL is now a short choice page; a build guide and a location guide hold the remaining tasks, and sidebar, API overview, feature-coverage, and generated endpoint links point to the appropriate destination. The build no longer reports the two anchors removed from the former page.
+87. **P1 resolved in credential guide scope:** the SSH key guide repeated a Kubernetes token procedure and included a cloud-credential section, despite separate provider tutorials. The page now handles generating/importing and assigning SSH keys only, with early links to Kubernetes and Google Cloud. The Kubernetes guide retains its own streamed token request, and referring labels now match the SSH page title.
+88. **P1 resolved in instance guide scope:** appearance and graph-animation preferences were embedded between instance identity and archive export even though they are browser-profile settings. A short Personal preferences guide now owns the Desktop/API instructions; instance management, sidebar, feature coverage, and the generated preference endpoint link to it.
+89. **P0/P1 resolved in cloud configuration path:** the capacity how-to mixed optional Ansible playbook creation with catalog/target/provisioning steps; the playbook it validated installed `curl`, but its saved version had no tasks. Machine configuration now has its own guide and uses the same playbook for validation and version creation. The response-derived version ID and optional target field are shown. The support matrix also distinguishes catalog discovery from zone lookup at provisioning and Billing-dependent price estimates. Live GCP provisioning remains unverified.
+90. **P1/P2 resolved in installation scope:** the Desktop installation guide repeated two self-managed-server API checks already covered by the server and API setup guides, then repeated the package validation caveat at the end. It now keeps installation/checkup as its task, points separate-server users to their path, and leaves one early platform-verification limit plus the linked download digest.
+91. **P1 resolved in Getting Started support choice:** the entry page gave provider links but required a reader to visit separate guides to learn which paths have end-to-end evidence. A short support section now distinguishes the verified local Desktop, SimGrid, and Kind paths, the SLURM fixture limit, GCP's unverified live lifecycle, and partial AWS/S3 support. It links the detailed cloud matrix without duplicating the AWS caveat in the provider list.
+92. **P1 resolved in workflow-definition order:** the how-to opened with an eight-field table of persisted activity fields before showing the Desktop creation task, including fields absent from the portable YAML example. It now starts with creation steps, gives a short portable-input explanation beside the API example, and sends exact fields and compatibility rules to the Workflow specification reference.
+93. **P1 resolved in core-concepts claim:** the run definition presented timing, transfers, and output evidence as universal fields. It now states that activity status is tracked and the other observations are stored when available, matching the runtime-dependent limits stated in the execution guide.
+94. **P1/P2 resolved in provenance reading order:** the four-step result investigation was buried after Explore, lineage, and SQL controls. It now appears immediately after the page purpose, with SQL presented as optional when lineage is insufficient. A repeated browser-local favorites note was removed; the SQL control table already states that limit.
+95. **P1/P2 resolved in audit reading order:** the event-investigation sequence was below the full control table and API filters. It now appears immediately after the page purpose, matching the provenance guide's task-first pattern. The second inventory of event types was shortened to avoid repeating the opening.
+96. **P0 resolved in cloud target request example:** the target payload omitted `configuration.projectId`, although Terraform reads that field from the target rather than from the environment connection. It also used `x86_64`, which fails compatibility with the required built-in worker configuration's `amd64` architecture. The example now reads the validated project ID from the tutorial session, uses `amd64`, prompts for an actual Ubuntu `providerImageId` and approved CIDR, and builds the JSON with `jq` so literal placeholders cannot be sent. An optional saved machine-configuration version is attached when its returned ID is set. The generated target endpoint note states the prerequisites. Local `jq` checks produced valid targets both with and without the optional configuration and preserved sample project, image, architecture, and CIDR values; fields were checked against the handler, domain, repository, provisioner, and Terraform runner. Live provider execution remains unverified.
+97. **P0 resolved in fixed-plan prediction claim:** the SimGrid first-run tutorial said the API reevaluates imported predicted cost and feasibility when submitting its fixed plan. The `POST /schedule-plans/` and `/import/` handlers validate the supplied schedule but save its predicted metrics without recalculating them. The first-run and planning guides, plus the generated import endpoint note, now state this distinction and direct readers to compare predictions with run observations.
+98. **P0 partially resolved in schedule-plan import:** the guide previously offered only `{ "plan": ... }`; the SimGrid validation envelope cannot be sent directly to import because the decoder rejects unknown top-level fields. A new example fetches the plan already saved by the versioned tutorial, assigns a new plan ID and unique assignment IDs with matching `planId`, and sends only the import envelope. Local `jq` validation against the checked-in three-assignment plan preserved its predictions and IDs; the handler and repository source were checked. A controlled HTTP run on 2026-09-13 exposed a `422` unique-key collision on four cloud lifecycle action IDs. The example now also assigns new lifecycle IDs, `schedulePlanId`, and `dependsOn` references. Re-running against a fresh isolated server returned `201` on import and `200` on the copied-plan GET; all three assignments, four lifecycle actions, their dependencies, and predicted metrics were checked.
+
+99. **P1 resolved in Docker-to-SIF guide:** the API path stopped after starting the build and left the reader to infer both `build.id` and the asynchronous run ID. It now captures the two response IDs, reads the run status with failure details, and downloads output only after completion. The server-side Apptainer and artifact-store prerequisites are explicit. The response fields and `queued`/`running`/`publishing`/`completed`/`failed` states were checked against the handler, build manager, executor, and domain type; a live registry pull and SIF build remain unverified.
+
+100. **P1 resolved across architecture and planning:** the architecture page called HEFT and PRISM candidates “comparable” although their predictions use different evaluators. The architecture now states that candidates share session inputs but use different prediction models. The planning guide tells readers to inspect estimates for selection and compare observed runs when judging performance. Both now align with the source-audited PRISM/HEFT explanation.
+
+101. **P0 resolved in SimGrid route description:** the guide called the chosen path the “lowest-latency” route, implying payload-aware or latency-only choice. The SimGrid platform builder and PRISM compact router both sum link latency plus one-byte transmission time before applying the actual transfer volume. The guide now says route choice uses latency and bandwidth; the network explanation gives the one-byte rule and warns that a large payload could favor another path.
+
+102. **P0 resolved in artifact location claims:** the task guide and API overview called location records “verified bytes,” although `GET /artifact-locations/` only reads saved rows and does not probe the URI. The guide now distinguishes recorded URI/digest/`available` from a fresh storage check. It also states that a committed materialization requires both status and a matching verified digest, and that listing saved observations does not recheck destination bytes. The artifact task landing was aligned. The claims were checked against the domain `Committed()` predicate, list handlers, and repositories.
+
+103. **P1 resolved in documentation production contract:** the contributor page said every generated endpoint had a cURL command and discussed inferred request JSON as if it were displayed. The current component shows a WebSocket connection for the console stream, only checked request examples, templates where IDs/files are still needed, and illustrative response shapes. The contract now describes that behavior and requires handler plus real-response checks before field-level claims are verified.
+
+104. **P0 resolved across scope, SimGrid, and network explanations:** the scope guide treated links as optional only when time or cost mattered, and the SimGrid guide said a missing route was not a zero-cost transfer. Source review found that PRISM rejects a cross-resource data dependency without a route, while HEFT `transferSeconds` returns zero when no direct matching link exists. The guides now tell readers to model links for cross-resource dependencies, and the network explanation identifies that HEFT limitation rather than implying a safe free transfer. The scope link example also omits redundant `topologyId`, matching the field reference.
+
+105. **P2 resolved in four Showcase narratives:** the SLURM fixture page repeated its local-only warning with a long inventory of untested cluster commands and policies; it now states the tested adapter path and groups the real-cluster limits in one short sentence. The edge-cloud, network fan-out, and 50-core pages now state what their fixed examples demonstrate without defensive “do not” framing. Checked-in evidence, result numbers, prerequisites, and recovery steps remain. Authored text across these files was reduced without removing support limits; the full 60-page final plain-language pass remains open.
+
+106. **P0/P1 resolved in Showcase command coverage:** the local direct API page submitted its bundle with a bearer token but omitted that token on the final run GET, causing `401` on a protected daemon. The GET now uses the shared API credential. The edge-cloud, network fan-out, and 50-core polling commands now fail on HTTP errors; the Showcase index distinguishes existing-daemon API setup from the self-started SLURM fixture. The shell syntax checker now covers the 11 JSX template-literal command blocks as well as 108 fenced blocks (119 total), closing a verifier blind spot; the contributor contract records its exact scope. These checks do not replace HTTP execution or final visual review.
+
+107. **P0/P1 resolved in storage download flow:** the guide created a ready file-download record but did not show how to fetch its bytes, poll copy/archive records, or retrieve the archive. It now follows the example IDs through those steps and gives platform-specific SHA-256 comparison commands. Source review found that `StartDownload` only stats the path, while `OpenDownload` opens it later, so a ready record is not an immutable snapshot; the guide and generated endpoint note now say so. Archive output and status were initially checked against the coordinator, handler routes, and storage tests; the subsequent isolated HTTP test and its defect are recorded in finding 108.
+
+108. **P0 resolved in archive download and local-storage configuration:** an isolated daemon with two registered local storages completed browse (`200`), file download (`201`/content `200`), checksum (`200`), and copy (`202` to `completed`) with matching bytes. It also proved a ready download record is not a snapshot by changing the source and reading different bytes under the same ID. Archive creation reached `ready` but content returned `404`: the repository UPSERT saved status but not the archive's new `.tar.gz` path. Updating `path` and adding a repository regression assertion made a fresh isolated HTTP run pass archive `202` → `ready`, stored `.tar.gz` path, and content `200` with the expected tar member. The environment reference now shows `AKOFLOW_LOCAL_STORAGE_ROOT` and `configuration.browseRoots`; top-level `browseRoots` alone is not persisted. Storage health and compute-node visibility are labeled as catalog/configuration signals, not live path or node probes. External storage providers remain unverified.
+
+109. **P1 resolved in HPC registration and storage narrative:** the tutorial listed compute-allocation workspace access as an expected result of registration, although its steps stop after SSH health and discovery from the daemon/login path. The result table now records the site path and defers compute-node access to the batch probe in the operator guide. The Lustre/NFS catalog excerpt now says Desktop browsing also needs a configured browser and approved roots. Institutional SSH, scheduler, and allocation validation remain open.
+
+110. **P1 resolved in cloud catalog result:** the GCP tutorial treated available machine, image and disk choices as the expected result of `valid: true`. The validation handler returns counts from discovery without requiring any count to be positive; public-image lookup errors can also be warnings. The tutorial now asks readers to inspect the counts and investigate an empty category before provisioning. Live credential and provider checks remain open.
+
+111. **P1/P2 resolved in the public reference overview:** the Desktop/API coverage page mixed a user route map with maintainer instructions. The update rule now lives in the editorial contract, leaving the public page focused on finding a task, guide, and API family. The API overview's archive rule said only mutating requests return `423`, but `readOnlyAPI` blocks every non-`GET` method except instance activation; the wording now matches the middleware, including `HEAD`. Full endpoint-contract and final plain-language audits remain open.
+
+112. **P0 resolved in health diagnostics:** the API overview and troubleshooting guide called the root health route without a bearer token, which returns `401` on a protected daemon because only instance identity and preflight are public bootstrap routes. Both root commands now send the configured token; troubleshooting labels preflight correctly as public. A security regression assertion covers the root route. The generated root endpoint template already supplied the token.
+
+113. **P1/P2 resolved across six task guides:** the provenance page repeated its screen tables in three long screenshot captions, which now identify the relevant result without re-explaining controls. A cross-page scan found 16 authored API `curl` examples without HTTP-error failure behavior across provenance, workflow definitions, planning, executions, build context, and troubleshooting. All now use `--fail-with-body`, so failed lookups and uploads produce failing exit statuses; download examples already used `--fail`. The shell checker now rejects future `curl` lines without either fail option. Syntax, links, and HTTP behavior have separate verification scopes.
+
+114. **P1 resolved in generated cloud navigation:** seven environment-scoped cloud catalog, target, instance, and provisioning routes appeared under the generic Environments endpoint category because their URL starts with `/environments/`. The generator now groups them by their cloud operation, gives them the cloud-capacity guide, and points the compatibility provisioning route to the moved instance endpoint. The generated route count remains 125. Redirects preserve the seven former documentation URLs; HTTP routes are unchanged. Link/build checks cover the new navigation, while cloud account behavior remains unverified.
+
+115. **Entry/reference consistency check:** all 97 route rows in the API overview expanded to 124 method/path pairs, and every pair matched `internal/api/httpserver/httpserver.go`; the overview is intentionally a summary rather than a list of all 125 endpoint pages. In the new-user layer, Getting Started now names the verified Kubernetes example as Kind, and Installation no longer repeats the Windows asset distinction already stated in Downloads. This check covers route registration and wording, not field or response contracts.
+
+116. **P0 resolved in cloud zone selection claim:** the capacity guide asked readers to choose a zone policy and sent `zonePolicy: "any"`, implying that policy controls provisioning. The target repository stores the field, but the Terraform runner passes only `fixedZone` to its module; without it, the module takes the first active zone returned for the region. The capacity guide, GCP guide, and generated target endpoint note now say this directly, and the example omits the ineffective policy value. This is source-audited behavior; a live project run remains open.
+
+117. **P0/P1 resolved in S3 credential narrative:** the AWS guide claimed every nonempty transfer credential reference fails, but `EnvironmentS3Credentials` accepts the literal `env` as well as an omitted reference; only other values fail with the default resolver. The guide and environment reference now state that rule. The default S3 storage browser is constructed without a credential resolver, so its saved `credentialReference` and server AWS environment variables do not sign browse requests; the docs distinguish that from the separate transfer connector. A regression assertion covers the accepted `env` reference. Live AWS and S3-compatible bucket access remain unverified.
+
+118. **P1 resolved in storage entry narrative:** the storage guide formerly sent object-storage readers to two support pages before they could learn whether browsing a private S3 bucket would work. Its opening now states the current unsigned-browser limit directly and distinguishes browsing from credentialed transfers, while retaining the AWS guide for details. The generic catalog caveat was shortened. Remote and provider storage operations remain unverified.
+
+119. **P1 resolved in editorial governance:** the public Documentation production plan already held the page-level writing contract, KEEP/SIMPLIFY/MOVE/DELETE/VERIFY labels, priority order, iterative loop, and completion gate. The repository quality plan now links to that contract instead of duplicating its rules. The contract makes progressive disclosure explicit and describes the current shell check's HTTP-error requirement. The quality-plan link-check evidence was refreshed to 456 local links and 54 Showcase downloads.
+
+120. **P1/P2 resolved across the five explanation pages:** the planning explanation treated candidate rank as immediate, although ranking and Pareto fields are finalized when a session completes, and its selection sentence could imply that selecting a candidate starts a run. The page now states the lifecycle in order. Evidence/provenance now distinguishes real runtime handles from simulated task timing, which has no provider job to inspect. Network route wording and observed-timing introduction were shortened, and the PRISM/HEFT comparison headings now name the reader's task. The final all-page audit remains open.
+
+121. **P0 resolved in generated map response shapes:** shallow key extraction rendered every value of several `map[string]any` responses as `"string"`, including cloud validation's boolean `valid` and integer counts, connection health's boolean, search totals and result arrays, provenance arrays, archive activation's boolean, and planning-session runs. Checked shapes now cover nine handlers. The connection test note says `200 OK` can still have `healthy: false`; cloud validation counts can be zero. `GET /execution-runs/` has two actual response forms: an array without pagination parameters and an envelope when `page` or `pageSize` is supplied; its misleading single example was replaced with that rule. The generator rejects checked-shape entries whose handler disappears from the router. This closes this map-shape class, not full field/response validation of all 125 endpoints.
+
+122. **P1/P2 resolved in the three infrastructure tutorial openings:** API setup now names its specific reader and tools; HPC registration begins with the result the steps can prove; and the GCP connection tutorial starts with its own task instead of an unrelated AWS/S3 support paragraph. HPC and GCP use the same “Check the result” heading. Their external-account, batch-job, and live-provider limits remain at the step or result where the reader needs them. Remote HPC and GCP validation remain open.
+
+123. **P1 resolved in Cloud navigation and page purpose:** a provider matrix interrupted the cloud-capacity procedure before its first catalog action. It now has a dedicated Cloud provider support page immediately before the capacity guide in the sidebar. Getting Started links directly to that page, and the stale section anchor was removed. The capacity guide begins with its task and links to the support decision; the matrix keeps GCP compute, incomplete GCS transfer, partial AWS S3 transfer, and unverified live-provider limits together. The Cloud path is now support → connect GCP or review AWS → configure capacity, without hiding the status behind a long how-to opening.
+
+124. **P1 resolved in notification recovery:** the API section for a cloud-provisioning notification formerly listed cloud instances, which show resource state rather than the tracked operation. It now lists cloud operations, adds artifact-build runs for another notification type named on the page, and identifies Desktop update notices as app-local. The Desktop section heading and terminal-state description were shortened. Router paths were checked against the current Go server; live Desktop notification behavior remains a separate UI validation.
+
+125. **P0/P1 resolved in Cloud provisioning acceptance wording:** both provision endpoints return `202 Accepted` after persisting and enqueueing an operation. Target existence, environment ownership, connection, credential, and provider checks happen later in the provisioner. The generated notes for both routes and the capacity guide now direct readers to status, failure reason, and events before treating a VM as ready. This is source-checked asynchronous behavior; a live provider run remains unverified.
+
+126. **P1 resolved in Cloud operation follow-up reference:** list, detail, and event endpoints now explain global newest-first listing, terminal versus retrying status, and sequence-ordered events. A provider-log error event may belong to a retried attempt, so readers check the operation status before treating it as final. The shared generated endpoint component now says optional JSON fields may be absent, and all handler-checked notes use a behavior heading that fits both GET and mutation routes. The generator rejects notes for routes missing from the Go router. This checks the Cloud operation response narrative, not all 125 endpoint field contracts.
+
+127. **P0/P1 resolved in cross-runtime setup reading:** the pinned v1.0.8 SLURM catalog opts its login node into direct workflow scheduling, while current discovery marks a login gateway unschedulable. The current repository example now defaults that login node to unschedulable, and the HPC guide tells readers how to correct the pinned file before institutional registration. It distinguishes a batch compute node from an approved direct target. Its discovery checklist no longer presents compute-allocation workspace access as something a login-host probe can prove; that check belongs to the later batch probe. Kubernetes and SimGrid opening prose was shortened while keeping their real-versus-modeled boundary. A real cluster run remains unverified.
+
+128. **P1/P3 resolved in entry-layer plan/run narrative and diagram:** the authored-page inventory still matches all 61 current source pages. Home, Getting Started, and Core concepts now state the explicit execution action between selecting a plan and recording a run; the record-chain SVG labels that arrow and its accessible description follows the same sequence. Its unclosed arrow paths previously rendered as large filled triangles; the SVG now keeps paths unfilled, verified in a Chromium screenshot. At 390 × 844, the built Home → Getting Started → Installation → first local workflow links opened without page errors or horizontal overflow. The first-workflow tutorial names the separate **Execute plan** and **Start execution** controls. The final all-page new-reader pass remains open.
+
+129. **P3 resolved across architecture diagrams:** the record-chain inspection exposed the same inherited SVG fill behavior in nine other arrow groups. In particular, the request-dispatch branching paths rendered as large black triangles that obscured the branches. Arrow groups now set `fill="none"`, and the two standalone network arrows do the same. All 13 architecture SVGs parse with a title and description; Chromium previews of request dispatch, planning lifecycle, control-plane components, and network flow were inspected after the fix. The diagrams' wording and topology were not changed in this pass.
+
+130. **P1 resolved in Cloud read-reference behavior:** all 21 generated body examples are marked verified and no inferred body example is displayed, but three Cloud GET pages lacked the distinctions needed to interpret their results. The catalog GET reads synchronized cache and can return `404` before refresh; the target list returns only enabled records; the instance list includes destroyed records. Handler and repository source were checked for all three, and the generator's route guard covers their new notes. This narrows a reference gap without claiming full field-level validation of the 125 endpoints.
+
+131. **P1 resolved in artifact evidence wording:** a cross-page read of all six Data and evidence guides found one contradiction: the artifact-location guide said the API lists saved observations, while the API overview promised to "inspect prepared bytes" and the guide's closing sentence implied a fresh byte check. Both now describe recorded locations, preparation status, and run observations. The list handlers read catalog records; they do not recheck destination bytes. The other Data and evidence pages kept their distinct build, provenance, and audit tasks. The final all-page pass remains open.
+
+132. **P0 resolved in Audit coverage claims:** the guide, chooser, notifications, entry pages, explanation, and route map previously implied that Audit records workflow, credential, planning, build, and cloud operations, or answers who changed any state. A repository-wide search of `RecordAuditEvent` call sites found producers only for connection health, resource discovery, and console commands/sessions. Twelve authored pages now route readers to the owning operation or provenance record and state the actual Audit scope. The Desktop still shows workflow and credential category tabs, but the current daemon does not emit events into them. The final all-page pass and live Desktop verification remain open.
+
+133. **P2 resolved in four long prose blocks:** a length scan across the Markdown/MDX documentation found five non-code paragraphs over 85 words. Four were split or shortened after review. The Cloud target note now separates required input, provider choices, and saved outcome/failure recovery without removing its checked prerequisites; the generator remains the source of truth. The documentation production plan states what local checks cover in shorter prose. The environment YAML reference separates binding fields from S3/GCS limitations, and the planning-state reference separates algorithm lifecycle from progress fields. The fifth is a dense schedule-import request contract left intact for field-level verification. The final all-page plain-language pass remains open.
+
+134. **P1 resolved in the network explanation:** a cross-read of the five explanation pages and the scope/topology reference found one incorrect opening premise: the network page said the directed topology is included in the execution scope. The scope may omit `networkTopologyId`; a planning session supplies its own topology ID, while a topology records its scope ID. The opening now says the topology is chosen for the planning session, without introducing the optional-field detail before the reader needs it. Source checks covered the planning-session validator and topology repository. The final all-page pass remains open.
+
+135. **P1 resolved in the Docker artifact response example:** a scan of map-shaped API responses found that `POST /artifacts/docker/` showed empty `artifact` and `build` objects, although the next documented step requires `build.id`. The generated example now shows the `ArtifactVersion` and `ArtifactBuild` JSON fields, including both IDs, and the route note distinguishes registration from the later build run. Handler, domain structs, and the existing HTTP repository test confirm the response keys and stored build specification. This verifies one response family; the 125-endpoint field-level audit remains open.
+
+136. **P1 resolved in execution detail response coverage:** `GET /execution-runs/{runId}/` previously displayed `run: {}` and five arrays, hiding the run's key status/plan/timing fields and the conditional cloud/data families. The generated example now shows the core `ExecutionRun` fields and the response note names `infrastructureRuns`, `dataObjects`, `dataLocations`, `artifactMaterializations`, and `artifactTransferRuns` with their configuration conditions. The execution guide uses the same language. Handler map assembly, domain JSON fields, and the existing execution-detail HTTP test were checked. This narrows the response audit; it does not validate every nested array contract.
+
+137. **P1 resolved across four map response examples:** the planning-session detail, instance activation, provenance entity catalog, and provenance SQL schema pages showed empty nested objects or lists that hid the response fields readers need next. Their generated examples now show source-checked session/algorithm-run fields, active-instance identity and restart flag, one catalog entity with a field and link, and one safe SQL table with columns. Notes identify selected-plan fields as conditional, imported snapshots as read-only, and both provenance examples as partial catalogs. Handler, domain, catalog, schema, and instance-archive source were checked; the remaining 125-endpoint field audit is still open.
+
+138. **P1 resolved in the Cloud provisioning-log read path:** the remaining seven JSON-object response pages were checked against their handler map literals: cloud log, cloud/Kubernetes credential references, discovery snapshots, storage checksum, and the two promotion IDs. Their outer keys match current handlers. The Cloud log page now says to use an instance ID rather than an operation ID, and explains the `200 OK` waiting message before Terraform writes a log. The service and Terraform runner were checked. This completes the outer-key review of all 16 map-shaped response pages; nested fields, error variants, and the rest of the 125 endpoints remain open.
+
+139. **P0 resolved in generated list and nested response types:** a scan of all 125 generated response examples found `GET /audit-events/` rendered as `[null]` and four environment create/read/replace/list pages rendered `connectorBindings: [null]`. The generator had treated same-named Go structs from different packages as ambiguous. Audit now has a source-checked connection-event example; environment responses use the `environment.ConnectorBinding` fields. Beyond the sample depth, known struct values now render as `{}` instead of the false primitive `"string"` (for example runtime `capabilities`). Generation now fails if any displayed response example contains a synthetic null. The zero-null scan passed. This fixes the misleading-shape class while full field-level validation remains open.
+
+140. **P0 resolved in plan-creation response:** `POST /schedule-plans/` displayed `CreatePlanRequest` as its response, including the submitted workflow, resources, scope, and topology. The handler actually saves and returns only `request.Plan`, after filling its topology ID when needed. The generated page now shows `domain.SchedulePlan` and says that prediction values are saved without recalculation. Generation rejects future success-response types ending in `Request`. This fixes one endpoint contract; the field-level review of all 125 pages remains open.
+
+141. **P1 resolved in troubleshooting evidence:** the final checklist asked for Audit events as general operational evidence and labeled `/audit-events/` as durable operational events. Current emitters cover only connection health, resource discovery, and console actions, so the page now sends readers to the run or operation record for the failed step, Provenance for scientific evidence, and Audit only for its actual emitters. The API overview route label uses that same scope. Handler and emitter call sites were checked; the final all-page audit remains open.
+
+142. **P1 resolved in the entry narrative:** Home and Getting Started offered plan comparison before the first Desktop path, which makes a manual plan. They now lead with making and executing a plan, leaving comparison as a later choice. The first local-run introduction now promises the output-file record and checksum actually visible in Desktop, rather than suggesting the file bytes appear in the UI. The Home metadata describes the scientific-workflow task. Installation and Interface Tour were reread as part of the same path; no additional P0/P1 prose issue was found in this pass. Clean-host and cross-platform runs remain unverified.
+
+143. **P2 resolved in basic-path terminology:** Getting Started, Installation, API connection setup, and the first SimGrid tutorial called the AkôFlow server a `daemon` in prose where the reader only needs its address, readiness, or log. Those passages now use `server`; exact checkup labels such as **AkôFlow daemon** remain unchanged. This keeps implementation vocabulary out of the entry path without hiding operational prerequisites. The larger user-guide terminology pass remains open.
+
+144. **P1 resolved across data and evidence tasks:** the Audit guide's procedure still said to find any "operation" in Audit and to compare a workflow run ID directly with an Audit event, despite the limited emitters. It now names connection checks, discovery, and console actions and sends workflow-result tracing to Provenance. The chooser includes discovery in the same scope. The Docker-to-SIF guide now states that a live registry pull and conversion remain unverified, matching the audit evidence rather than implying a completed build is already demonstrated. The artifact-location and Provenance guides were reread without another P0/P1 wording change; runtime/provider validation remains open.
+
+145. **P1 resolved in operations page ownership:** the earlier preferences split left a full duplicate Desktop/API procedure in Instance management, despite its link to the dedicated Personal preferences page and an inventory note claiming it had moved. The duplicate is removed; the link, dedicated guide, sidebar entry, and API overview remain. A repository search found no links to the removed heading. The notifications guide now calls its absent server record "server-side" rather than introducing daemon terminology. Search, console, and the remaining instance lifecycle were reread; snapshot/runtime behavior still needs its own validation.
+
+146. **P1 resolved in environment-to-execution progression:** Planning now introduces the manual path used by the first Desktop workflow before explaining automatic candidate comparison. Execution includes the verified local runtime among real-run examples. The execution-scope API explanation marks `networkTopologyId` optional and says a planning session selects its topology; the scope repository and planning service were checked. The SimGrid prerequisite uses user-facing server terminology. Environments, Kubernetes, and HPC/SLURM were reread in the same sequence; live remote-target validation remains open.
+
+147. **P1/P2 resolved across explanations:** the Planning explanation now introduces manual placement as well as automatic session comparison, matching the first Desktop path and the planning guide. The Evidence/Provenance opening sends scientific-result questions to Provenance and limits Audit to its actual emitters. Observed timing no longer repeats the same 10 GiB/10 Gbit/s calculation already worked through in Network modeling; it links to that example. PRISM/HEFT and Network modeling were reread without another P0/P1 prose change. Field-level trace aggregation and full scientific-result validation remain open.
+
+148. **P2 resolved in page descriptions:** a scan of all 61 authored documentation pages found nine without frontmatter descriptions: four infrastructure guides, three workflow guides, Architecture internals, and Runtime adapters. Each now has a one-sentence description naming its task or subject without adding a support claim. A second scan found zero missing descriptions across the 61 pages. This standardizes metadata and previews; it does not prove the body of every page has passed the final editorial gate.
+
+149. **P2 resolved in first-paragraph language:** all 61 authored-page openings were scanned for whether they state a task or subject early. The scope/topology reference replaced "freeze the infrastructure universe" with the concrete version-and-link relationship. The local direct Showcase now says the server runs the command on its own host and records workspace file changes; prerequisites use the same term. Other openings were left intact because their first paragraph already states a use or audience, or the page is a short choice table. This is an opening scan, not a full-body editorial pass.
+
+150. **P2 resolved in Showcase and operator wording:** a sentence-length scan of authored prose found few long sentences, but the local Showcase still alternated `daemon host` with `server host` after its opening had been simplified. Its evidence and recovery text, the Showcase index card/setup, and the edge-cloud trace location now use server language. The SLURM fixture keeps daemon terminology where it names the isolated process and script. The Linux server-update sequence is split into two shorter steps without changing the versioned-image order. Full-body and runtime-claim review remains open.
+
+151. **P1 resolved in three navigation continuations:** the first local workflow now links its recorded result to the plan-versus-run explanation, completing the new-user path from install through result interpretation. The HPC/SLURM guide links a site-approved run to execution monitoring. The cloud-capacity guide links a ready worker to scope membership and the Google Cloud validation/cleanup section, while still marking the live cycle unverified. These links address reading continuity; clean-host, institutional-cluster, and disposable-cloud execution still need their own evidence.
+
+152. **P0/P1 resolved in Showcase support language:** across all seven Showcase pages, the edge–cloud simulation still called its modeled target a "cloud VM" and said it "pays" for cloud use. It now names modeled resources, transfers, and cost. The network and 50-core index cards explicitly say their machines and cores are simulated. The Kind page no longer lists provenance among the verified outputs of its recorded run; Desktop inspection mentions lineage only when the explorer is configured. The real Kind run, local direct run, and local SLURM fixture remain distinct from the SimGrid scenarios. This wording does not substitute for provider or lineage verification.
+153. **P1 resolved in developer architecture narrative:** the architecture page described an execution scope as combining environment versions with a topology, although planning sessions select the topology separately. It now gives each concept its actual role. The architecture and runtime adapter openings now state what the server and adapters do before introducing internal or legacy YAML detail; the SimGrid paragraph describes its behavior directly.
+154. **P0 resolved in execution internals:** the page implied the workflow supervisor resumes an interrupted run from persisted handles and retries a failed activity. Current code creates a new run and tracks running handles in memory; a failed activity ends that run. The page now states those limits and distinguishes the activity controller's internal `Stop` method from an unavailable workflow-run cancellation API. The opening also explains the queue without a defensive control-plane label.
+155. **P0 propagation pass on recovery and cancellation:** the architecture page still said queue retries made work recoverable across interruptions. The event loop can return an expired leased job to pending, but the supervisor does not resume an already-started workflow; the page now states that distinction. The execution page description no longer promises runtime recovery. The SLURM guide now distinguishes the adapter's internal `scancel` call from an unavailable workflow-run cancellation API and directs users to site-approved procedures.
+156. **P1 resolved in task-state presentation:** the execution guide listed every domain `TaskExecution` state as if users should observe that progression, including `preparing` and `cancelled`. The current supervisor persists running/completed/failed task states. The guide and state reference now distinguish implemented observations from model values, and the preparation troubleshooting step no longer assumes a persisted `preparing` task or runtime log.
+157. **P1 resolved across generated endpoint presentation:** all 125 generated pages inherited a formulaic description and displayed the same placeholder sentence for query parameters, even though the generator already defined descriptions for all 26 query names it found. Pages now use their route-specific title and method/path in metadata, show the route title as the heading, and display the mapped query explanation. Generation fails if a future query parameter lacks a description. Handler and response-shape claims still need their own evidence pass.
+158. **P1 resolved in generated response evidence language:** the endpoint component labeled manually handler-checked JSON examples and Go-type-inferred JSON examples with the same generic sentence. It now identifies which examples were checked against handlers and which only show fields inferred from Go types, so an inferred shape is not presented with the same confidence as a checked contract. The remaining inferred response shapes still require route-by-route verification.
+159. **P1 resolved in Provenance response examples:** entity query and read-only SQL pages showed synthetic `[{}]` rows because their row keys depend on the selected entity or query. Handler and service checks now support empty-result examples with the real response envelope and a note about variable columns. The SQL explain page omits a fixed plan example because SQLite plan rows depend on the statement and database; it names the response fields instead. Other inferred shapes remain to be checked.
+160. **P1 resolved across inferred list fields:** generated request and response shapes still included `[{}]` and `[null]` for list items whose Go type was ambiguous or truncated by the sampler's depth limit. Those placeholders looked like real rows. The sampler now emits an empty list for such fields, including optional connector bindings, and generation rejects ambiguous null/empty-object list items in future examples. A full manifest scan found none across the 125 pages; known item fields still appear where inference succeeds.
+161. **P0 resolved in environment field contract:** the YAML reference marked version model labels and configuration hash as API-required and treated environment/version status, resource type, and connection type as validated enums. The create handler sends the decoded definition directly to the database repository; its schema permits empty strings in those fields and does not constrain those status/type lists. The reference now separates recommended values from enforced constraints and points topology links to their own document, not the scope document. Runtime driver/mode and storage type retain their database-validated wording.
+162. **P0 resolved in environment parent IDs:** the YAML reference marked nested `environmentId`/`environmentVersionId` fields as required in the request for versions, runtimes, resources, connections, and storage. Repository insertions use the enclosing environment/version IDs instead, including for relations. The reference now marks the nested IDs optional, explains their saved values, and distinguishes the create response (submitted document) from a later GET (persisted IDs). Remaining field-level claims still need review.
+163. **P0 resolved in environment binding authoring:** the reference presented `connectorBindings` and `connectionChecks` as part of a persisted EnvironmentDefinition, but the create/replace repository ignores those slices. GET assembles recent connection checks from separate health records and does not return connector bindings from this document. The reference removes both from the authoring shape; generated POST/PUT request shapes and handler notes now explain the limitation. Resource-runtime bindings are recommended within the same version, while the current database only checks the two IDs individually; storage-runtime bindings have the stronger same-version foreign keys.
+164. **P0 propagation pass on Environment API responses:** generated response examples for list/create/get/replace still showed `connectorBindings` even though the repository never populates them from EnvironmentDefinition; some also showed a synthetic connection check. The four examples now omit connector bindings, POST/PUT examples omit checks, and GET examples start with an empty check list. GET endpoint notes explain that any observed checks come from separate health history. The authored-doc search found no other promise that these slices persist through Environment POST/PUT.
+165. **P0 resolved in planning versus execution binding narrative:** Environment YAML, scope/topology troubleshooting, and SimGrid troubleshooting claimed an unbound resource is absent from planning candidates. The current planning filter uses scope membership, `schedulable`, and non-batch capacity checks, but does not read runtime bindings; the execution supervisor requires an enabled binding for each assignment. All three pages now locate that check at execution and give separate diagnostics for candidate placement and run rejection.
+166. **P1 resolved in plan readiness language:** the planning explanation's metadata said a selected placement becomes executable, and the guide/reference could let readers treat `feasible` or a validated imported plan as a runtime readiness check. The plan validator checks workflow/placement constraints but not runtime bindings; the execution supervisor checks those before a run starts. The explanation, planning guide, and state reference now make that distinction at selection and import.
+167. **P2 resolved in first-user narrative:** the Home subheadline introduced provenance before the first workflow, while the verified local tutorial ends with an observed output-file record and checksum. Home now promises only the result inspection used on that path; Provenance remains a follow-on guide. At 390 px, browser clicks reached Home → Getting Started → Installation → First local workflow with no JavaScript errors or horizontal overflow.
+168. **P0 resolved in the HPC path:** the SLURM guide warned readers to keep the login node unschedulable, but its own YAML excerpt set `slurm-login-node` to `schedulable: true`. The excerpt now uses `false`, matching the current repository example and the guide's batch-allocation instructions. A real institutional run still requires site access and approval.
+169. **P0 resolved in SSH trust language:** the HPC guide called host keys recorded by the first connection test trusted, while the SSH executor uses `StrictHostKeyChecking=accept-new`, which saves an unknown key without checking it against an administrator's fingerprint. The guide now requires that comparison for the login host and gateways, and the registration tutorial distinguishes the service-key fingerprint returned by the API from the remote host-key fingerprint.
+170. **P2 resolved in the workflow run guide:** the API path interrupted the submit-and-inspect task with a nine-field execution envelope list. It now explains the example's purpose in user terms, keeps the `202 Accepted` and run-ID instructions, and sends field-level readers to the generated request reference.
+171. **P2 resolved in the developer architecture page:** the API, planning, and execution sections each compressed many services, frozen inputs, or supervisor steps into one long enumeration. They now explain the responsibility and sequence in shorter sentences, preserving the algorithm/model distinction and real-versus-simulated execution boundary.
+172. **P0 resolved across documentation navigation:** source-relative Markdown page links compiled to plausible absolute `href` values but client-side clicks resolved their original relative paths against the current URL; the execution guide's request link landed on `/docs/guides/api/...` and the Kind example on `/docs/guides/showcase/...`, both 404s. All 334 remaining relative links to documentation pages were converted to `/docs/...` routes across 58 pages. The repository link check now rejects newly introduced route-relative links. A 390 px browser pass clicked a visible internal link from each of the 61 authored pages: all 61 reached their compiled targets after accounting for hidden Showcase tabs.
+173. **P2 resolved in developer explanations:** the execution page's handle and recovery paragraphs now separate saved evidence, failure behavior, and cancellation limits. The runtime page replaces long capability and extension inventories with the driver/mode model, a field-reference link, and the steps needed to validate a new provider. No user path gained internal terminology.
+174. **P0 resolved in factory-reset claims:** the instance guide promised removal of all managed credentials and implied a server reset cleared personal preferences everywhere. `cmd/server/api.go` resets the database and removes only the managed Kubernetes token directory; SSH/cloud credential files and artifact bytes remain. Desktop additionally clears its current browser profile's local storage, while direct API calls do not. The guide and API overview now state these boundaries, including the Desktop confirmation's broader wording. The generated endpoint already had the narrower server-side contract.
+175. **P1 resolved in Desktop notifications:** the guide described application-update notices as terminal tracked-operation states. `NotificationCenter.jsx` instead shows `available`, `downloading`, and `downloaded` update phases in a separate card; tracked planning, execution, build, terminal, and provisioning results become saved notification entries. The page now separates these cases and keeps the profile-local persistence limit.
+176. **P2 resolved in task-path headings:** the HPC and Google Cloud tutorials used “Through the interface/API” while the other task guides used “Using AkôFlow Desktop/the API”; the notification guide used a third “In Desktop” form. These headings now follow the same two-path vocabulary. The HPC operator guide's direct link to the registration API section was updated to the new anchor.
+177. **P1 resolved in Desktop/API route coverage:** comparison with the current Desktop `src/App.jsx` found six real detail routes absent from the reference map: generic plan/run/activity details, scope and topology details, and environment-owned provisioning detail. The map now includes them with their owning API family and task guide. A route extraction found 45 functional mapped routes plus three redirect routes documented separately; `/` and the catch-all are outside this task map. A full built-HTML scan found 25 internal anchor links and no missing destination IDs.
+178. **P2 resolved in the result-evidence path:** the choice page now tells a reader with a run ID where to start without repeating the scientific-versus-operational explanation. The Provenance guide describes exports as saved records or query pages rather than an ambiguous scientific “result,” and Audit states its supported event scope in two short paragraphs. The links still lead to the same task guides.
+179. **P0 resolved in Windows download instructions:** the v1.0.8 release has one `Akoflow-Desktop-1.0.8-win-x64.exe` asset. The successful Windows packaging job built `nsis` and then `portable` to that same filename, signing the latter afterward; the published asset is therefore the portable target, not a separate installer. Downloads and Installation now say to run it directly. The future release-note template no longer promises both installer and portable assets. This conclusion comes from the release asset list and build order; a Windows host launch remains unverified.
+180. **P0 resolved in execution submission contracts:** `POST /execution-runs/` returns a queue job, not a run, and the supervisor validates the queued request before `CreateRun`. The generated endpoint now says “Queue workflow execution,” shows a handler-checked new-job response, distinguishes job ID from `run.id`, and notes that a request rejected by worker validation can leave `GET /execution-runs/{runId}/` at `404`. The execution guide and state reference now give the same interpretation and a recovery direction. There is no public queue-job read endpoint to substitute for a missing run.
+
+## Page inventory
+
+| Page | Current pass | Next review |
+| --- | --- | --- |
+| `guides/workflows/first-local-run.md` | Navigation reread; result evidence now leads to the plan-versus-run explanation; Linux package UI run remains verified | Repeat on a clean supported host and other platforms |
+| `src/pages/index.tsx` | Fifth read; first-user promise now ends at result inspection before introducing Provenance later | Recheck rendered entry path on mobile |
+| `concepts.md` | Second claim reread; plan selection is separate from execution, including diagram alt text; runtime-dependent observations stay qualified | Recheck complete new-user path |
+| `contributing/documentation-plan.md` | Fourth read; link and shell check scope now fits short paragraphs; progressive disclosure and HTTP-failing cURL checks remain explicit | Recheck contract at final audit |
+| `downloads.md` | Third read; v1.0.8 Windows asset identified as portable from release job/build order; platform limits remain explicit | Recheck release links when version changes |
+| `engine.md` | Fourth read; handle observations and recovery limits now read as separate responsibilities; cancellation remains explicitly unavailable via API | Recheck remaining queue claims against event-loop code |
+| `explanations/evidence-and-provenance.md` | Fourth read; opening routes result records to Provenance and actual Audit emitters to Audit | Recheck against execution evidence after P0 fixes |
+| `explanations/network-modeling.md` | Fourth read; opening now names the topology chosen for the planning session; one-byte route choice remains qualified | Recheck transfer claims against execution paths |
+| `explanations/observed-timing.md` | Fourth read; makespan versus accumulated time leads, and network example is linked rather than repeated | Recheck metrics against trace aggregation |
+| `explanations/planning.md` | Fifth read; saved-plan wording and execution-time binding check now match validator/supervisor | Recheck remaining planning claims against coordinator |
+| `explanations/prism-and-heft.md` | Third read; comparison headings now describe observed-run and experiment tasks | Recheck algorithm claims against source |
+| `getting-started.md` | Sixth read; a manual first plan precedes comparison and server terminology stays user-facing | Recheck the entry flow on a clean supported host |
+| `guides/data/artifacts.md` | Short choice page preserving the old URL and routing storage, build, and recorded-location tasks | Check destinations in navigation |
+| `guides/data/build-executable.md` | Fourth read; source-checked Docker/SIF build flow now identifies missing live conversion evidence | Verify a live registry pull and SIF conversion |
+| `guides/data/artifact-locations.md` | Cross-page read; catalog and run observations are explicitly saved records, not live byte checks | Recheck materialization payloads after P0 contracts fix |
+| `guides/data/provenance-and-audit.md` | Third read; run-ID choice is direct and the explanation link follows the task choice | Check both destinations in navigation |
+| `guides/data/provenance.md` | Plain-language reread; export wording names record/query pages and run-first entry; API examples fail on HTTP errors | Recheck Desktop interactions against packaged app |
+| `guides/data/audit-events.md` | Third read; opening separates recorded event types from absent workflow/credential history | Recheck Desktop interactions against packaged app |
+| `guides/infrastructure/aws.md` | Third read; omitted/`env` transfer credential selection and unsigned S3 browsing are explicit | Check provider claims against disposable-bucket evidence |
+| `guides/infrastructure/cloud-capacity.md` | Fifth read; ready-worker next step points to scope membership and GCP validation/cleanup | Validate with disposable GCP account |
+| `guides/infrastructure/cloud-support.md` | First read; GCP/AWS support matrix separated from capacity procedure and linked to provider tasks | Recheck against live GCP/S3 evidence |
+| `guides/infrastructure/machine-configurations.md` | Focused optional Ansible setup; validation and saved version use one playbook, and the returned version ID is consumed by the capacity example in the same Bash session | Validate against disposable GCP worker |
+| `guides/infrastructure/environments.md` | Plain-language/claim pass; local API definition persisted in a one-off repository test, and in-use revision language matches the API | Recheck remote flows with provider evidence |
+| `guides/infrastructure/execution-scopes.md` | Third read; API explanation marks scope topology ID optional and session topology selection explicit | Recheck API payloads after P0 contracts fix |
+| `guides/infrastructure/gcp.md` | Third read; target zone choice now matches Terraform's fixed-or-first-active behavior | Check provider claims against disposable-project evidence |
+| `guides/infrastructure/hpc-slurm.md` | Sixth read; registration API link follows the standardized heading; login-node and first-contact SSH limits remain explicit | Check provider claims against real cluster evidence |
+| `guides/infrastructure/kubernetes.md` | Second cross-runtime read; real Job versus modeled-cluster choice is direct, and the token stream stays out of shell variables and files | Recheck procedure against Kind bundle and shared-cluster RBAC |
+| `guides/infrastructure/simgrid.md` | Fifth read; missing-candidate troubleshooting no longer attributes planning exclusion to runtime binding | Recheck procedure against pinned bundle |
+| `guides/infrastructure/storage.md` | Third read; opening now states unsigned S3 browsing directly; local API path remains verified | Verify remote/provider storage independently |
+| `guides/interface-tour.mdx` | Plain-language pass; removed repeated Desktop/API framing and shortened search/breadcrumb guidance; rendered page inspected at 390 × 844 | Recheck screenshots and controls during final visual audit |
+| `guides/operations/credentials-and-ssh.md` | Task-scope reread; now covers SSH keys and assignment only, with provider credentials routed to their own tutorials | Recheck current Desktop form and key lifecycle claims |
+| `guides/operations/instance-management.md` | Third read; reset now distinguishes database records, Kubernetes tokens, retained SSH/cloud/artifact files, and Desktop browser storage | Recheck complete snapshot behavior against a local archive |
+| `guides/operations/personal-preferences.md` | Focused Desktop/API instructions for theme and graph animation, moved from instance management | Recheck current Desktop controls |
+| `guides/operations/interactive-console.md` | Plain-language reread; basic path and diagram now use resource/connection terms, while API retains returned IDs; closure follows streaming/log use | Recheck session behavior against Desktop |
+| `guides/operations/search-and-notifications.md` | Short choice page preserving the old URL and distinguishing lookup from profile-local alerts | Check both destinations in navigation |
+| `guides/operations/find-records.md` | Desktop/API search procedure, result fields, limits, and empty-result recovery | Recheck UI behavior against Desktop |
+| `guides/operations/follow-notifications.md` | Fourth read; Desktop heading matches task guides and update card is separate from saved terminal-operation notifications | Recheck UI behavior against packaged Desktop |
+| `guides/operations/server-instance.md` | Third read; update sequence split into short steps; tunnel command and HTTP failure checks remain | Recheck release assets when version changes |
+| `guides/operations/troubleshooting.md` | Fifth read; evidence collection now separates run/operation records, Provenance, and actual Audit emitters | Recheck other diagnostic claims after P0 fixes |
+| `guides/workflows/definitions.md` | Third read; API list, detail, and export now fail on HTTP errors | Recheck payload against importer after P0 contracts fix |
+| `guides/workflows/executions.md` | Eighth read; API path now handles temporary or persistent missing run after `202` due to pre-run worker validation | Recheck other runtimes against their own guides |
+| `guides/workflows/first-run.md` | Terminology reread; server address/readiness/log language is consistent; fixed-plan submission remains validation and save | Keep the SimGrid API example aligned with its versioned bundle |
+| `guides/workflows/planning.md` | Fifth read; `feasible` and imported-plan validation no longer imply runtime readiness | Verify automatic Desktop planning flow |
+| `installation.md` | Fifth entry-path read; Windows step now matches the single published portable EXE; Desktop checkup stays central | Verify clean-host and cross-platform installation |
+| `internal/workflow-spec.md` | Second read; lead example now uses one execution mode and marks script paths as prerequisites | Check every field contract against current importer |
+| `modules.md` | Developer detail remains in the architecture section; API, planning, and execution passages now use short responsibility/sequence explanations | Recheck remaining claims against daemon composition |
+| `reference/api-overview.md` | Eighth read; factory-reset route label now points to retained-file cleanup; 124 listed method/path pairs match the current Go router | Check field and response contracts against current handlers and schemas |
+| `reference/environment-yaml.md` | Eighth read; binding is now required at execution, not a planning candidate filter | Continue remaining field-level schema contract audit |
+| `reference/execution-scopes-and-topologies.md` | Second pass; candidate diagnostics now separate planning filters from runtime binding validation | Check remaining contracts against current handlers and schemas |
+| `reference/feature-coverage.md` | Fourth read; all 45 functional Desktop paths map to an API family and guide, with three redirects described separately | Check contracts against current handlers and schemas |
+| `reference/planning-and-execution-states.md` | Sixth read; queue acceptance and pre-run validation failure now distinguished from a persisted run | Recheck generated endpoint contracts after P0 fixes |
+| `runtimes.md` | Third read; capability and provider-extension inventories shortened, with field details linked to Environment YAML | Recheck other provider claims against adapters |
+| `showcase/edge-cloud-simulation.mdx` | Fourth read; modeled resources, transfers, and cost replace real-VM phrasing | Check result against pinned bundle |
+| `showcase/index.mdx` | Fourth read; simulation cards label modeled machines/cores and fixture remains distinct | Recheck cards after Showcase audit |
+| `showcase/kubernetes-real-execution.mdx` | Third read; intro names observed Kind outputs, with lineage conditional on explorer configuration | Check result against pinned bundle |
+| `showcase/local-direct-execution.mdx` | Fourth read; server-host wording is consistent across purpose, evidence, and recovery | Check result against pinned bundle |
+| `showcase/network-fanout.mdx` | Second read; model-specific estimate phrased directly; authenticated polling now fails on HTTP errors | Check result against pinned bundle |
+| `showcase/parallel-50-core.mdx` | Second read; compute-capacity purpose stated directly; authenticated polling now fails on HTTP errors | Check result against pinned bundle |
+| `showcase/slurm-local-fixture.mdx` | Second read; local adapter evidence and real-cluster limits stated once; versioned checkout and optional Desktop inspection retained | Check result against pinned bundle |
+| `tutorials/api-access.md` | Fourth read; API-only prerequisites and token limits use server language; Bash blocks parsed | Recheck commands after P0 contracts fix |
+| `tutorials/connect-cloud.md` | Third read; Desktop/API path headings now match the other task guides; valid access remains separate from nonempty catalog choices | Validate with disposable GCP account |
+| `tutorials/register-hpc.md` | Fourth read; Desktop/API headings match the other guides, and service-key and host-key fingerprints remain distinct | Validate on an approved institutional cluster |
+
+## Verification in this pass
+
+- `npm run typecheck`, `npm run build`, `npm run check:links`, and `git diff --check` passed on the editorial branch. All 125 endpoint pages generated; targeted checks confirmed the console-command request, qualified environment and workflow responses, and all six versioned first-run links.
+- All 107 fenced Bash/sh blocks in authored documentation parsed with `bash -n` on 2026-09-13. Duplicated blocks were removed as artifact, SSH, and installation guides were focused; the preferences block moved and a saved-plan import example was added. This is a syntax check, not an execution test; snippets embedded in JSX and commands outside fences need separate review.
+- The latest link check covered 466 local links/assets and 54 showcase downloads from the `v1.0.8` Git tag on 2026-09-13. It now rejects route-relative Markdown links whose source target is another documentation page.
+- Headless Chromium at 390 × 844 loaded Getting Started, Core concepts, the console guide, the new Desktop first-run page, and all seven Showcase pages without page errors or horizontal overflow. Every Showcase API tab displayed its v1.0.8 checkout command; the first-run page's mobile menu opened and showed its tutorial link.
+- These checks establish site integrity for this pass. They do not prove tutorial execution, provider support, or completion of the editorial gate.
diff --git a/docs/editorial-closeout-2026-09-13.md b/docs/editorial-closeout-2026-09-13.md
new file mode 100644
index 00000000..c8b78ac8
--- /dev/null
+++ b/docs/editorial-closeout-2026-09-13.md
@@ -0,0 +1,22 @@
+# Editorial version closeout
+
+Date: 2026-09-13. Branch: `docs/editorial-consistency`. This closes the current editorial iteration, not the external-user completion gate in `quality-plan.md`.
+
+## What changed
+
+- All 61 authored pages received an editorial inventory and at least one pass. The entry path now leads from workflow and environment to plan, run, and result. Task guides put Desktop or API steps before internal architecture; the developer pages retain implementation details.
+- Support language distinguishes verified local, SimGrid, and Kind runs from a local SLURM adapter fixture and unverified institutional HPC and live cloud paths. The Cloud support matrix states the current GCP, AWS EC2, S3, and `gs://` limits.
+- A Linux v1.0.8 Desktop package completed the documented first local workflow and produced a recorded output file and checksum. The package was extracted and launched under Xvfb with Docker; this does not establish clean-host package-manager installation or other-platform launch.
+- The generator builds 125 endpoint pages. All 61 mutating routes have handler-checked notes or versioned runnable SimGrid requests. It no longer presents inferred request bodies as runnable examples, labels illustrative response shapes, and fails on unknown success statuses.
+- Documentation navigation uses stable `/docs/...` routes. The checker rejects route-relative documentation links. The mobile menu fix and a 390 px browser pass are recorded in the audit ledger; one internal link from each authored page reached its compiled destination.
+- `documentation-plan.md` now holds the ongoing editorial contract. `editorial-audit-2026-09-12.md` records individual corrections and evidence.
+
+## Final assessment of this iteration
+
+The basic narrative, verified Linux first-run path, site navigation, and documented support boundaries are substantially improved. Current build and link checks establish that the site compiles and its checked routes resolve. They do not establish that every API field example is correct or that every procedure works on every claimed host and provider.
+
+The full completion gate remains **open**. `quality-plan.md` retains the specific work: clean-host and other-platform installation, real GCP and S3 account validation, institutional SLURM validation, field-level verification across all 125 endpoint contracts, and a final plain-language and claim pass after those corrections. The audit ledger explicitly records these as unresolved. No claim of zero P0/P1 findings is made for this version.
+
+## Handoff
+
+Keep the pull request in draft until the completion gate is evidenced. Resume with the open items in `quality-plan.md`, prioritize false or unusable instructions, and update the support matrix and page inventory as each external validation is completed. Re-run typecheck, production build, link and shell checks, then inspect the rendered first-user paths at mobile and desktop widths before marking the documentation ready.
diff --git a/docs/package.json b/docs/package.json
index 32387a9b..d11c1759 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -17,7 +17,8 @@
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc",
- "check:links": "node scripts/check-links.mjs"
+ "check:links": "node scripts/check-links.mjs",
+ "check:shell": "node scripts/check-shell-examples.mjs"
},
"dependencies": {
"@docusaurus/core": "3.8.1",
diff --git a/docs/quality-plan.md b/docs/quality-plan.md
index 981766be..b48f8d66 100644
--- a/docs/quality-plan.md
+++ b/docs/quality-plan.md
@@ -2,10 +2,12 @@
This file is the editorial backlog for preparing the AkôFlow documentation for external open-source users. Update it after each documentation unit. A checked item must point to evidence in the repository or to a recorded verification command; absence of a known defect is not sufficient evidence.
-Last audited: 2026-09-11 after the verified SimGrid first-run exercise.
+Last audited: 2026-09-13. The current iteration is assessed in [editorial-closeout-2026-09-13.md](./editorial-closeout-2026-09-13.md). The Desktop first-workflow gap and several generated-reference defects have been corrected. Clean-host installation, provider validation, remaining API contracts, and the final full-page audit still keep the completion gate open.
## Editorial contract
+The [documentation production plan](./docs/contributing/documentation-plan.md) is the writing and review contract for every authored page. This file tracks evidence and unresolved work against that contract.
+
Every user-facing page has one primary Diátaxis purpose:
- **Tutorial:** a learning path that starts from stated prerequisites and ends in a result the reader can verify.
@@ -15,17 +17,26 @@ Every user-facing page has one primary Diátaxis purpose:
Showcases are extended tutorials. They may link to how-to and reference pages, but must not duplicate those pages. Generated endpoint pages are reference material. Provider setup pages are how-to guides. Architecture and scheduling-model pages are explanations.
+When a Desktop route or daemon endpoint changes, regenerate the endpoint reference, update the task guide and the Desktop/API coverage map, and add a screenshot only when it clarifies the interface.
+
## Current evidence
- [x] The documentation builds from a clean generated state. Evidence: `cd docs && npm run clear && npm run typecheck && npm run build`, passed on 2026-09-11.
- [x] API endpoint reference is generated from `internal/api/httpserver/httpserver.go`. Evidence: `docs/scripts/generate-api-reference.mjs`; 125 generated endpoint pages in the current tree.
-- [x] Provider limitations are stated explicitly. Evidence: `guides/infrastructure/cloud-capacity.md`, `gcp.md`, and `aws.md` distinguish GCP compute provisioning from AWS S3 support.
+- [x] Generated map responses preserve checked JSON value types for nine handler responses; the execution-list endpoint documents its array and paginated-envelope variants. Evidence: `checkedMapResponses` in the generator, handler source, and generated cloud, search, provenance, planning, instance, connection, artifact, and execution pages. This is a shape check, not complete field-level validation.
+- [x] Cloud operation list, detail, and events pages distinguish retry events from final status; generated JSON examples state that optional fields may be absent. Evidence: route-checked behavior notes in `docs/scripts/generate-api-reference.mjs` and the shared `ApiEndpoint.tsx` response label. Other endpoint field contracts remain open.
+- [x] Cloud catalog, capacity-target, and instance list pages distinguish cached catalog reads, enabled-only target listing, and destroyed instance records. Evidence: route-checked notes in the generator plus handler and database queries; this is scoped read-behavior validation.
+- [x] Environment-scoped cloud API routes appear with cloud operations and point to the cloud-capacity task guide. Evidence: the generator classifies `/environments/{environmentId}/cloud-*` before generic environment routes; seven pages moved to the Cloud category without changing the 125-route total.
+- [x] Provider limitations are stated explicitly. Evidence: `guides/infrastructure/cloud-support.md`, `cloud-capacity.md`, `gcp.md`, and `aws.md` distinguish GCP compute provisioning from partial object-storage support. The current GCS connector rejects direct `gs://` transfer, and saved AWS credentials are not wired to the S3 transfer connector.
- [x] GCP catalog and provisioning access are documented as source-audited behavior rather than an unverified IAM recipe. Evidence: `guides/infrastructure/gcp.md`, `internal/provider/cloud/gcp/catalog.go`, and `internal/provider/cloud/terraform/runner.go`; a disposable-project validation remains required.
-- [x] HPC concepts and the proxy-aware connection path are documented. Evidence: `guides/infrastructure/hpc-slurm.md` and `guides/operations/interactive-console.md`.
+- [x] HPC concepts and the proxy-aware connection path are documented. Evidence: `guides/infrastructure/hpc-slurm.md` and `guides/operations/interactive-console.md`. The guide also flags the pinned example's opt-in login-node scheduling and defers compute-workspace proof to a batch allocation.
+- [x] The general environment guide does not imply a remote connection was saved after a standalone health test. It links to the complete HPC/GCP registration tutorials and uses the saved HPC template's connection ID for follow-up checks, verified on 2026-09-13.
- [x] Existing Showcase download URLs use `raw.githubusercontent.com` and the 50-core bundle was checked against repository files on 2026-09-11.
- [x] No screenshot markers remain. `rg '