You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: SKILL.md
+13-6Lines changed: 13 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -564,8 +564,9 @@ For agents that need to sign Ethereum transactions. Private keys never leave AWS
564
564
-**`allowance_status`** / **`allowance_create`** / **`allowance_export`** — local allowance management.
565
565
-**`request_faucet`** — testnet USDC.
566
566
-**`check_balance`** — USDC for an allowance address.
567
-
-**`list_projects`** — active projects for a wallet.
568
-
-**`pin_project`** — pin a project (admin only — uses the configured admin allowance wallet).
567
+
-**`list_projects`** — active projects for a wallet. Each row carries v1.57 lifecycle fields: `effective_status`, `account_lifecycle_state` (same value across every project on the billing account), `lease_perpetual`, `deleted_at`, `archived_at`.
568
+
-**`admin_set_lease_perpetual`** — operator escape hatch (v1.57+). Toggles the billing account's `lease_perpetual` flag so the account never advances past `active` regardless of lease expiry. Replaces the v1.56 per-project pin tool (gateway endpoint was removed). Enabling on a grace-state account reactivates inline.
569
+
-**`admin_archive_project`** / **`admin_reactivate_project`** — operator moderation actions on a single project (`projects.archived_at`). Independent of account-level lifecycle.
569
570
-**`project_info`** / **`project_keys`** / **`project_use`** — inspect / set the active project.
570
571
-**`send_message`** — send feedback to the Run402 team.
571
572
-**`set_agent_contact`** / **`get_agent_contact_status`** / **`verify_agent_contact_email`** — register agent contact info, read assurance status, and start the operator email reply challenge.
@@ -618,17 +619,23 @@ Project rate limit: **100 req/sec**. Exceeding returns 429 with `retry_after`. E
618
619
619
620
## Project lifecycle (~104-day soft delete)
620
621
621
-
After lease expires, projects go through a state machine. The live data plane keeps serving the whole time — only the owner's control plane gets gated:
622
+
Gateway v1.57 moved the lifecycle state machine from `internal.projects` to `internal.billing_accounts`. The grace clock now ticks per **billing account** — every project on the same account inherits the same `account_lifecycle_state`. The live data plane keeps serving the whole time; only the owner's control plane gets gated:
622
623
623
624
| State | When | What happens |
624
625
|-------|------|--------------|
625
626
|`active`| — | Full read/write |
626
627
|`past_due`| day 0 | Site, REST, email keep serving. Owner gets first email. |
627
628
|`frozen`| +14d | Control plane (deploys, secrets, subdomain claims, function upload) returns 402 with `lifecycle_state` / `entered_state_at` / `next_transition_at`. Site still serves. Subdomain reserved so the brand can't be claimed by another wallet. |
|`purged`| +104d | Cascade: schemas dropped, Lambdas deleted, mailboxes tombstoned. Subdomains become claimable 14 days later. |
630
631
631
-
Calling **`set_tier`** during grace reactivates the project and clears all timers in one transaction. Pinned projects bypass the state machine entirely.
632
+
Calling **`set_tier`** during grace reactivates the **account** inline and clears every project's timers in one transaction. Per-project fields on each `list_projects` row:
633
+
634
+
-`effective_status` — derived for serving / UX. Equals `account_lifecycle_state` unless the project is individually archived (`archived_at` set → `archived`) or deleted (`deleted_at` set → `deleted`).
635
+
-`account_lifecycle_state` — the raw per-account state. Identical across every project on the same account.
636
+
-`lease_perpetual` — operator escape hatch flag on the owning account. When `true`, the account never advances past `active`. Replaces the v1.56 per-project `pinned`. Toggle via **`admin_set_lease_perpetual`** (platform-admin only).
637
+
638
+
Operator moderation actions (independent of lifecycle, scoped to a single project): **`admin_archive_project`** and **`admin_reactivate_project`**.
632
639
633
640
## Standard Workflow
634
641
@@ -693,7 +700,7 @@ Other allowance options:
693
700
|---|---|
694
701
|`402 payment_required` on `set_tier`| Allowance is empty. Call `request_faucet` (testnet) or fund with real USDC. |
695
702
|`402` with `lifecycle_state: frozen`| Project past lease + 14 days. `set_tier` reactivates instantly. |
696
-
|`403 admin_required`| Tool is admin-only (e.g., `pin_project`). Use a platform admin allowance wallet; project owners can't pin their own projects. |
703
+
|`403 admin_required`| Tool is platform-admin only (e.g., `admin_set_lease_perpetual`, `admin_archive_project`, `admin_reactivate_project`). Use a platform admin allowance wallet; project owners can't toggle these on their own. |
697
704
| Empty `[]` from `rest_query` for anon | Table not in manifest with `expose: true`. Call `apply_expose`. |
698
705
|`403 forbidden_function` calling an RPC | Function not in the manifest's `rpcs[]`. Add `{ name, signature, grant_to: ["authenticated"] }` and re-apply. |
699
706
|`409 reserved` from `claim_subdomain`| Original owner's grace period — subdomain held until +118 days from lease expiry. |
0 commit comments