## Diagnose Deployment Failures for Express

### Summary
Diagnose a failed Express deployment on Ample. Deploy is synchronous: a build failure returns `build_failed` with the deployment id, and ample logs exposes the build log and then the runtime log so the cause is read, not guessed.

### Representative Queries
- Diagnose deployment failures for Express
- Where can I host Diagnose deployment failures built with Express?
- I need framework-specific failure signatures and validation checks using only actual available observability interfaces.

### Resource Requirements
- `primitive:compute`

### Infrastructure Requirements
- **Compute**  
  Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.

### Framework
Express

### Workload
Diagnose deployment failures

### Release Status
Published

### Support Status
Verified

### Execution Status
Unbound

### Docs Only
true

### Prerequisites
- A deployment id from a failed ample deploy
- An Ample account token with `servers:read`

### Tested Configuration
- **Template**: node-22  
- **Runtime**: node  
- **Size**: s-1vcpu-1gb  
- **Install**: `npm install`  
- **Build**: `printf 'ample-build-failure-probe' >&2 && false`  
- **Start**: `npm run start`

### Workflow Steps
1. **Read the failure code**  
   Exit 1 with `build_failed` means the isolated build failed; exit 2 means a required preflight action is blocking.
2. **Read the build log**  
   The last lines name the failing command.  
   Command: `ample logs --kind build`
3. **Read the runtime log**  
   For a live-but-misbehaving app the runtime log shows the process output.  
   Command: `ample logs --kind runtime`
4. **Fix and redeploy once**  
   Change the source or the command override, then run ample deploy again. Do not loop deploys to poll status.

### Examples
- **Intentional build failure canary**  
  A failing build command is rejected synchronously and its stderr line appears in the build log.  
  Source Reference: `tests/deploy-canaries/node-package-no-lock (build-and-list-failure)`

### Success Checks
- **Expectation**: `ample logs --kind build` shows the failure line
  *Description*: build log contains the failing command output  
  *Kind*: manual

### Limitations
- Verified on the node-22 template at s-1vcpu-1gb; other templates and sizes are not verified by this recipe.
- Region, compliance attestations and request-duration limits are unknown and not claimed.
- Apps auto-pause when idle and wake on the next request; always-on is an operator setting, not a plan feature.
- This guide is documentation only; diagnosis is reading logs, and no tool is executed automatically by the catalog.

### Evidence Summary
- **Canary Run**:  
  Summary: An intentionally failing build was rejected synchronously with `build_failed` and the failure line was readable in the build log.  
  Observed At: 2026-09-19T23:55:33Z  
  Implementation Revision: 1764076-tls-account-903d345  
  Expires At: 2027-03-18T23:55:33Z  
  Scope:  
   - CLI Version: 0.1.20  
   - Platform: hosted-beta  
   - Template: node-22

- **Canary Run**:  
  Summary: Express app with npm install and npm run start deployed on the node-22 template; the public URL served the expected response.  
  Observed At: 2026-09-19T23:55:33Z  
  Implementation Revision: 1764076-tls-account-903d345  
  Expires At: 2027-03-18T23:55:33Z  
  Scope:  
   - CLI Version: 0.1.20  
   - Platform: hosted-beta  
   - Template: node-22

### Last Verified At
2026-09-19T23:55:33Z

### Unknowns
- Pricing for this recipe is unknown.
- Region availability is unknown until a verified region fact is recorded.
- Compliance attestations are unknown; none are claimed.
