Hub API report

Pull request #100 · commit 8fbb8e2ae3 · 2026-11-04 04:08 UTC · the CI run
All API tests pass
Requests
2771/2771
Bruno requests passing
Checks
8424/8424
assertions and tests
Spec coverage
638/691
operations the tests call (92%)
p95, median route
0.95 ms
123 GET routes × 20
Slowest p95
32.9 ms
/v1/overview
Fuzzing findings
0
none

API tests (Bruno)

The collection in api-tests/bruno, run against a scratch hub: no database, no node daemon, no git host. A failing request fails the pull request.

hub11 requests
RequestCallStatusmsSizeResult
Read the hub's identityGET /v1/hub/identity 20010.099 B pass
Read the hub's overviewGET /v1/overview 2001.00202 B pass
Answer 404 for an unknown endpointGET /v1/no-such-endpoint 4043.0028 B pass
Describe the hub's identityGET /v1/hub/identity 2001.0099 B pass
Answer 502 for the hub status while its daemon is downGET /v1/hub 5021.00101 B pass
Refuse a plain HTTP GET to the event socket: it is not an upgradeGET /v1/ws 4001.0079 B pass
Refuse an event socket upgrade that speaks another WebSocket version (426)GET /v1/ws 4262.0044 B pass
Refuse an event socket upgrade with no keyGET /v1/ws 4002.0040 B pass
Refuse an event socket upgrade whose key is not 16 bytesGET /v1/ws 4003.0055 B pass
Refuse an event socket opened from another origin (403)GET /v1/ws 4033.0057 B pass
Refuse an event socket that does not offer the event protocolGET /v1/ws 4002.0065 B pass
skills106 requests
RequestCallStatusmsSizeResult
List the skill rules and the templateGET /v1/skills/rules 2002.002.3 KiB pass
Check a clean skill: no errorsPOST /v1/skills/check 2002.00281 B pass
Check a skill with no description and a dead linkPOST /v1/skills/check 2001.00454 B pass
Check a SKILL.md with no frontmatterPOST /v1/skills/check 2001.00303 B pass
Refuse a check whose file has no sizePOST /v1/skills/check 4002.0053 B pass
Refuse a check with a body that is not JSONPOST /v1/skills/check 4002.0053 B pass
The built-in skill is live and bound to the whole plazaGET /v1/skills/show-your-work 2002.007.0 KiB pass
Refuse an import preview that is not a zipPOST /v1/skills/import/preview 4221.0063 B pass
Refuse an import preview with no bodyPOST /v1/skills/import/preview 4223.0063 B pass
Answer 404 when committing an unknown previewPOST /v1/skills/import/commit 4042.0046 B pass
Refuse an import commit with a body that is not JSONPOST /v1/skills/import/commit 4002.0053 B pass
Refuse a GitHub preview for a URL that is not GitHubPOST /v1/skills/github/preview 4222.0050 B pass
Refuse a GitHub preview whose body has no urlPOST /v1/skills/github/preview 4001.0046 B pass
Answer 502 for a GitHub preview the scratch hub cannot reachPOST /v1/skills/github/preview 50225556 B pass
Refuse an export of several skills with no idsGET /v1/skills/export 4222.0024 B pass
Answer 404 when exporting an unknown skillGET /v1/skills/export?ids=no-such-skill 4042.0025 B pass
Create a skill with a reference filePOST /v1/skills 201133416 B pass
Refuse a second skill with the same idPOST /v1/skills 40971.055 B pass
Refuse a second live skill with the same frontmatter namePOST /v1/skills 40920.053 B pass
Refuse a skill id with capitals and underscoresPOST /v1/skills 4222.0098 B pass
Refuse a file path that climbs out of the skillPOST /v1/skills 4222.0062 B pass
Refuse a skill whose title is only spacesPOST /v1/skills 4222.0042 B pass
Refuse a title of 121 charactersPOST /v1/skills 4222.0042 B pass
Refuse a binding that is neither plaza nor a role or projectPOST /v1/skills 4229.0060 B pass
Refuse more than 16 tagsPOST /v1/skills 4222.0046 B pass
Refuse a file whose content is not base64POST /v1/skills 4222.0043 B pass
Refuse a create body without SKILL.mdPOST /v1/skills 4002.0053 B pass
Read the created skill backGET /v1/skills/t-skill-life 2001.00713 B pass
Read version 1 with its file and findingsGET /v1/skills/t-skill-life/versions/1 2001.00651 B pass
Download the reference file of version 1GET /v1/skills/t-skill-life/versions/1/files/reference.md 2001.0012 B pass
Answer 404 for a file the version does not holdGET /v1/skills/t-skill-life/versions/1/files/nope.md 4041.0036 B pass
Answer 404 for a version that does not existGET /v1/skills/t-skill-life/versions/9 4041.0036 B pass
Answer 404 for a version that is not a numberGET /v1/skills/t-skill-life/versions/one 4041.0036 B pass
Answer 404 for a version of an unknown skillGET /v1/skills/no-such-skill/versions/1 4041.0036 B pass
The history starts with the createGET /v1/skills/t-skill-life/history 2001.00222 B pass
Set the bindings of a skill (sorted and without repeats)PUT /v1/skills/t-skill-life/bindings 20040.0424 B pass
Refuse a binding that names no consumerPUT /v1/skills/t-skill-life/bindings 4221.0057 B pass
Answer 404 when setting bindings of an unknown skillPUT /v1/skills/no-such-skill/bindings 40419.036 B pass
Rename the skill and retag itPUT /v1/skills/t-skill-life 20012.0409 B pass
Refuse a rename to an empty titlePUT /v1/skills/t-skill-life 4222.0042 B pass
Answer 404 when renaming an unknown skillPUT /v1/skills/no-such-skill 40413.036 B pass
Add version 2 with a changed SKILL.mdPOST /v1/skills/t-skill-life/versions 20134.0289 B pass
Send the same version again: nothing new, the file by its hashPOST /v1/skills/t-skill-life/versions 2001.00290 B pass
Refuse a version built on an old base (409)POST /v1/skills/t-skill-life/versions 40922.047 B pass
Refuse a version whose file path climbs out of the skillPOST /v1/skills/t-skill-life/versions 4221.0058 B pass
Refuse a file named SKILL.md (it is the body, not a file)POST /v1/skills/t-skill-life/versions 4221.0058 B pass
Refuse a file sent by a hash the hub does not holdPOST /v1/skills/t-skill-life/versions 4223.00103 B pass
Refuse a file given both its bytes and its hashPOST /v1/skills/t-skill-life/versions 4222.0060 B pass
Refuse a version whose body is not JSONPOST /v1/skills/t-skill-life/versions 4001.0053 B pass
Answer 404 when adding a version to an unknown skillPOST /v1/skills/no-such-skill/versions 4041.0036 B pass
Add version 3 that links a file it does not hold (an error finding)POST /v1/skills/t-skill-life/versions 20114.0299 B pass
Read the broken version: the finding names the missing fileGET /v1/skills/t-skill-life/versions/3 2002.00819 B pass
Read version 2: no findings to recheckGET /v1/skills/t-skill-life/versions/2 2002.00673 B pass
Compare version 1 with version 2GET /v1/skills/t-skill-life/diff?from=1&to=2 2001.001.9 KiB pass
Compare version 2 with the broken version 3GET /v1/skills/t-skill-life/diff?from=2&to=3 2001.002.1 KiB pass
Refuse a compare without both version numbersGET /v1/skills/t-skill-life/diff?from=1 4221.0047 B pass
Answer 404 when comparing with a version that does not existGET /v1/skills/t-skill-life/diff?from=1&to=99 4042.0036 B pass
Export version 2 as a zipGET /v1/skills/t-skill-life/versions/2/export 2002.00424 B pass
Answer 404 when exporting a version that does not existGET /v1/skills/t-skill-life/versions/99/export 4041.0025 B pass
Answer 404 when exporting a version that is not a numberGET /v1/skills/t-skill-life/versions/x/export 4041.0027 B pass
The history records each version writtenGET /v1/skills/t-skill-life/history 2001.00638 B pass
Refuse to publish a version with an error findingPOST /v1/skills/t-skill-life/publish 4222.0081 B pass
Refuse to publish a version that does not existPOST /v1/skills/t-skill-life/publish 4221.0042 B pass
Answer 404 when publishing an unknown skillPOST /v1/skills/no-such-skill/publish 4042.0036 B pass
Refuse a publish whose body is not JSONPOST /v1/skills/t-skill-life/publish 4002.0053 B pass
Publish version 2 as the live onePOST /v1/skills/t-skill-life/publish 20018.0405 B pass
The live version shows what was publishedGET /v1/skills/t-skill-life 2002.001.9 KiB pass
The skill list shows the live versionGET /v1/skills 2002.00952 B pass
Unpublish the skill: nothing is livePOST /v1/skills/t-skill-life/unpublish 20028.0409 B pass
Unpublishing an unpublished skill changes nothingPOST /v1/skills/t-skill-life/unpublish 20012.0409 B pass
Answer 404 when unpublishing an unknown skillPOST /v1/skills/no-such-skill/unpublish 4048.0036 B pass
Publish the older version 1 again (a rollback)POST /v1/skills/t-skill-life/publish 2009.00405 B pass
The history records publish and unpublishGET /v1/skills/t-skill-life/history 2001.001.0 KiB pass
Create a second skill to archivePOST /v1/skills 20110.0365 B pass
Publish the second skill's version 1POST /v1/skills/t-skill-arc/publish 20012.0361 B pass
Archive the published skillPOST /v1/skills/t-skill-arc/archive 2009.00370 B pass
Archiving an archived skill keeps its first archive timePOST /v1/skills/t-skill-arc/archive 2008.00370 B pass
The default list leaves an archived skill outGET /v1/skills 2001.00952 B pass
The archived list shows the archived skillGET /v1/skills?archived=true 2001.001.3 KiB pass
An archived skill still reads with its versionsGET /v1/skills/t-skill-arc 2001.001.1 KiB pass
Refuse to export an archived skillGET /v1/skills/export?ids=t-skill-arc 4221.0035 B pass
Refuse a GitHub check on a skill made in the appPOST /v1/skills/t-skill-arc/github/check 4221.0051 B pass
Refuse a GitHub update on a skill made in the appPOST /v1/skills/t-skill-arc/github/update 4221.0051 B pass
Answer 404 for a GitHub check on an unknown skillPOST /v1/skills/no-such-skill/github/check 4042.0025 B pass
Restore the archived skillPOST /v1/skills/t-skill-arc/restore 20018.0361 B pass
The restored skill is back in the default listGET /v1/skills 2002.001.3 KiB pass
Restoring a live skill changes nothingPOST /v1/skills/t-skill-arc/restore 20016.0361 B pass
Answer 404 when archiving an unknown skillPOST /v1/skills/no-such-skill/archive 40412.036 B pass
Answer 404 when restoring an unknown skillPOST /v1/skills/no-such-skill/restore 40411.036 B pass
Export two skills as one zipGET /v1/skills/export?ids=t-skill-life,t-skill-arc 2002.00630 B pass
Export version 1 of the restored skill as a zipGET /v1/skills/t-skill-arc/versions/1/export 2002.00245 B pass
Export a skill named twice: it is zipped onceGET /v1/skills/export?ids=t-skill-life,t-skill-life 2002.00407 B pass
Answer 404 when one listed skill is unknownGET /v1/skills/export?ids=t-skill-life,no-such-skill 4041.0025 B pass
Refuse an export whose ids are only commasGET /v1/skills/export?ids=,, 4222.0024 B pass
Archive the test skill with its versionsPOST /v1/skills/t-skill-life/archive 20011.0414 B pass
Archive the second test skillPOST /v1/skills/t-skill-arc/archive 2008.00370 B pass
Neither test skill is in the default list any moreGET /v1/skills 2001.00556 B pass
Both test skills are in the archived listGET /v1/skills?archived=true 2001.001.3 KiB pass
List skills on a fresh hub (only the built-in ones)GET /v1/skills 2001.00556 B pass
Create a skillPOST /v1/skills 20121.0358 B pass
Read the skill backGET /v1/skills/pdf-forms 2002.00655 B pass
Change a skill's title and tagsPUT /v1/skills/pdf-forms 20014.0374 B pass
List skills after the changeGET /v1/skills 2001.00921 B pass
Archive a skillPOST /v1/skills/pdf-forms/archive 2009.00383 B pass
Answer 404 for an unknown skillGET /v1/skills/no-such-skill 4041.0036 B pass
Refuse a create without a titlePOST /v1/skills 4001.0053 B pass
prompts79 requests
RequestCallStatusmsSizeResult
List the prompt rules and templatesGET /v1/prompts/rules 2001.005.5 KiB pass
Check a clean system draft: no errorPOST /v1/prompts/check 20015.0905 B pass
Check a draft with an unknown template variablePOST /v1/prompts/check 2001.001.0 KiB pass
Check an empty fragment: the empty rule is an errorPOST /v1/prompts/check 2001.00279 B pass
Check an AGENTS.md draftPOST /v1/prompts/check 2002.001.3 KiB pass
Refuse a check with a kind that does not existPOST /v1/prompts/check 4221.0060 B pass
Refuse a check whose body is not JSONPOST /v1/prompts/check 4002.0053 B pass
Refuse a list filtered by a kind that does not existGET /v1/prompts?kind=bogus 4222.0060 B pass
List only the fragmentsGET /v1/prompts?kind=fragment 2002.0014 B pass
Create a system prompt bound to a rolePOST /v1/prompts 20140.0322 B pass
Refuse a second prompt with the same idPOST /v1/prompts 4099.0055 B pass
Refuse a second prompt on a role another prompt holdsPOST /v1/prompts 4098.0058 B pass
Refuse a prompt of a kind that does not existPOST /v1/prompts 4222.0060 B pass
Refuse a fragment bound to a rolePOST /v1/prompts 4222.0057 B pass
Refuse a system prompt bound to plaza (plaza is for AGENTS.md)POST /v1/prompts 4221.0047 B pass
Refuse a prompt id with a spacePOST /v1/prompts 4225.0098 B pass
Refuse a title of 121 charactersPOST /v1/prompts 4221.0042 B pass
Refuse a create without a bodyPOST /v1/prompts 4001.0053 B pass
Read the created prompt back: unpublished and unscoredGET /v1/prompts/t-prompt-life 2001.00565 B pass
Read version 1 with its findings and statsGET /v1/prompts/t-prompt-life/versions/1 2001.001.1 KiB pass
Answer 404 for a version that does not existGET /v1/prompts/t-prompt-life/versions/2 4042.0037 B pass
Answer 404 for a version that is not a numberGET /v1/prompts/t-prompt-life/versions/one 4041.0037 B pass
Download version 1 as MarkdownGET /v1/prompts/t-prompt-life/versions/1/raw 2001.0070 B pass
Answer 404 for the Markdown of an unknown promptGET /v1/prompts/no-such-prompt/versions/1/raw 4041.0037 B pass
Refuse a compare without both version numbersGET /v1/prompts/t-prompt-life/diff 4221.0047 B pass
The history starts with the createGET /v1/prompts/t-prompt-life/history 2001.00228 B pass
Refuse an edit to an empty titlePUT /v1/prompts/t-prompt-life 4221.0042 B pass
Refuse a system prompt rebound to plazaPUT /v1/prompts/t-prompt-life 4221.0047 B pass
Answer 404 when editing an unknown promptPUT /v1/prompts/no-such-prompt 4041.0037 B pass
Edit the title, description, tags and keep the bindingPUT /v1/prompts/t-prompt-life 20016.0317 B pass
Add version 2 with a Rules sectionPOST /v1/prompts/t-prompt-life/versions 20110.0243 B pass
Send the same body again: the latest comes back, nothing newPOST /v1/prompts/t-prompt-life/versions 2002.00244 B pass
Refuse a version built on an old base (409)POST /v1/prompts/t-prompt-life/versions 40933.048 B pass
Add version 3 with an unknown variable: an error and a lower scorePOST /v1/prompts/t-prompt-life/versions 2019.00248 B pass
Refuse a version whose body is not JSONPOST /v1/prompts/t-prompt-life/versions 4002.0053 B pass
Refuse a version without its base_versionPOST /v1/prompts/t-prompt-life/versions 4002.0053 B pass
Answer 404 when adding a version to an unknown promptPOST /v1/prompts/no-such-prompt/versions 4042.0037 B pass
The detail names the best version: never the broken oneGET /v1/prompts/t-prompt-life 2002.00999 B pass
Read the broken version: the finding names the ruleGET /v1/prompts/t-prompt-life/versions/3 2001.001.2 KiB pass
Download version 2 as MarkdownGET /v1/prompts/t-prompt-life/versions/2/raw 2001.00131 B pass
Compare version 1 with version 2GET /v1/prompts/t-prompt-life/diff?from=1&to=2 2001.002.6 KiB pass
Compare version 2 with the broken version 3GET /v1/prompts/t-prompt-life/diff?from=2&to=3 2001.002.8 KiB pass
Refuse a compare without the second versionGET /v1/prompts/t-prompt-life/diff?from=1 4222.0047 B pass
Answer 404 when comparing with a version that does not existGET /v1/prompts/t-prompt-life/diff?from=1&to=99 4042.0037 B pass
The history records each version writtenGET /v1/prompts/t-prompt-life/history 2001.00549 B pass
Refuse to publish a version with an errorPOST /v1/prompts/t-prompt-life/publish 4221.0081 B pass
Refuse to publish a version that does not existPOST /v1/prompts/t-prompt-life/publish 4222.0043 B pass
Answer 404 when publishing an unknown promptPOST /v1/prompts/no-such-prompt/publish 4042.0037 B pass
Refuse a publish whose body is not JSONPOST /v1/prompts/t-prompt-life/publish 4002.0053 B pass
Publish version 2 as the live onePOST /v1/prompts/t-prompt-life/publish 20019.0312 B pass
The live version shows what was publishedGET /v1/prompts/t-prompt-life 2001.002.0 KiB pass
The system list shows the live version and the best oneGET /v1/prompts?kind=system 2001.004.6 KiB pass
Unpublish the prompt: no live version and no scorePOST /v1/prompts/t-prompt-life/unpublish 20024.0317 B pass
Answer 404 when unpublishing an unknown promptPOST /v1/prompts/no-such-prompt/unpublish 40411.037 B pass
Publish the older version 1 again (a rollback)POST /v1/prompts/t-prompt-life/publish 20015.0312 B pass
The history records publish and unpublishGET /v1/prompts/t-prompt-life/history 2001.00875 B pass
Archive the prompt: its binding is releasedPOST /v1/prompts/t-prompt-life/archive 2008.00321 B pass
The default list leaves an archived prompt outGET /v1/prompts 2002.004.3 KiB pass
The archived list shows the archived promptGET /v1/prompts?archived=true 2001.004.6 KiB pass
A second prompt takes the role the archive releasedPOST /v1/prompts 20125.0261 B pass
Refuse to restore while another prompt holds the role (409)POST /v1/prompts/t-prompt-life/restore 4098.0058 B pass
Archive the second prompt: the role is free againPOST /v1/prompts/t-prompt-next/archive 2008.00270 B pass
Restore the first prompt once the role is freePOST /v1/prompts/t-prompt-life/restore 20012.0312 B pass
The restored prompt keeps its live version and bindingGET /v1/prompts/t-prompt-life 2001.002.1 KiB pass
Answer 404 when restoring an unknown promptPOST /v1/prompts/no-such-prompt/restore 4047.0037 B pass
Answer 404 when archiving an unknown promptPOST /v1/prompts/no-such-prompt/archive 4047.0037 B pass
The history records the archive and the restoreGET /v1/prompts/t-prompt-life/history 2001.001.1 KiB pass
Archive the test promptPOST /v1/prompts/t-prompt-life/archive 2008.00321 B pass
Archive the second test promptPOST /v1/prompts/t-prompt-next/archive 20010.0270 B pass
Neither test prompt is in the default list any moreGET /v1/prompts 2001.004.3 KiB pass
Both test prompts are in the archived listGET /v1/prompts?archived=true 2001.004.9 KiB pass
List the built-in promptsGET /v1/prompts 2002.004.3 KiB pass
Create a system promptPOST /v1/prompts 20116.0282 B pass
Read the created prompt backGET /v1/prompts/planner 2001.00525 B pass
Edit the prompt's detailsPUT /v1/prompts/planner 20019.0291 B pass
List the prompts after the editGET /v1/prompts 2001.004.6 KiB pass
Archive the promptPOST /v1/prompts/planner/archive 20019.0300 B pass
Answer 404 for an unknown prompt idGET /v1/prompts/no-such-prompt 4041.0037 B pass
Reject a create body without a titlePOST /v1/prompts 4001.0053 B pass
rules38 requests
RequestCallStatusmsSizeResult
Check a law source that compiles and allowsPOST /v1/laws/check 2003.0071 B pass
Refuse a law source that does not compile, with its placePOST /v1/laws/check 2002.00146 B pass
Check a source that declares no lawPOST /v1/laws/check 2003.00141 B pass
Refuse a check whose body is not a JSON objectPOST /v1/laws/check 4006.0042 B pass
Refuse a rule that does not compile, with its placePOST /v1/laws/rules 4003.00147 B pass
Add an owner rule with a lawPOST /v1/laws/rules 20133.0329 B pass
List the laws with the new owner lawGET /v1/laws 2002.00106.9 KiB pass
Disable the owner rulePOST /v1/laws/rules/R-001/disable 20052.0330 B pass
List the laws with the owner law switched offGET /v1/laws 2002.00106.9 KiB pass
Enable the owner rule againPOST /v1/laws/rules/R-001/enable 20014.0329 B pass
Refuse an edit whose source does not compile, and keep the rulePUT /v1/laws/rules/R-001 4002.00147 B pass
Change an owner rule's title and its lawPUT /v1/laws/rules/R-001 20010.0332 B pass
List the laws after the edit: the new law, not the oldGET /v1/laws 2002.00106.8 KiB pass
Answer 404 when enabling an unknown rulePOST /v1/laws/rules/R-bruno-none/enable 4041.0040 B pass
Answer 404 when editing an unknown rulePUT /v1/laws/rules/R-bruno-none 4041.0040 B pass
Delete the owner rule and its lawDELETE /v1/laws/rules/R-001 20026.032 B pass
List the laws after the delete: the law is goneGET /v1/laws 2002.00106.2 KiB pass
Refuse to switch a statute off without a reasonPUT /v1/laws/overrides/S-000a 4001.0043 B pass
Switch a statute off, with the reason on recordPUT /v1/laws/overrides/S-000a 20017.0140 B pass
List the laws with the statute switched offGET /v1/laws 2002.00106.3 KiB pass
Switch the statute back onPUT /v1/laws/overrides/S-000a 2009.0045 B pass
List the laws with the statute on againGET /v1/laws 2003.00106.2 KiB pass
Answer 404 when switching an unknown law offPUT /v1/laws/overrides/S-999z 4042.0033 B pass
Ask for the typed confirmation before a constitutional law goes offPUT /v1/laws/overrides/C-001a 4091.0086 B pass
Refuse a confirmation that names another lawPUT /v1/laws/overrides/C-001a 4091.00121 B pass
Switch a constitutional law off with its typed idPUT /v1/laws/overrides/C-001a 20042.0124 B pass
Read the rules: the law is off and the change is in the historyGET /v1/laws/rules 2001.00368 B pass
List the laws: the constitutional law is flagged offGET /v1/laws 2002.00106.3 KiB pass
Switch the constitutional law back on, which needs no confirmationPUT /v1/laws/overrides/C-001a 20027.045 B pass
Read the rules: the law is on again and the change is in the historyGET /v1/laws/rules 2001.00440 B pass
List the owner's rules on an empty hubGET /v1/laws/rules 2003.00440 B pass
Add a rulePOST /v1/laws/rules 2019.00338 B pass
List the rules after adding oneGET /v1/laws/rules 2001.00765 B pass
Rename a rulePUT /v1/laws/rules/R-001 20017.0347 B pass
List the rules after a renameGET /v1/laws/rules 2000.00774 B pass
Delete a ruleDELETE /v1/laws/rules/R-001 2009.0032 B pass
Answer 404 for an unknown ruleDELETE /v1/laws/rules/no-such-rule 4041.0040 B pass
Refuse a rule whose body is not a JSON objectPOST /v1/laws/rules 4001.0042 B pass
providers54 requests
RequestCallStatusmsSizeResult
read the settings and keep themGET /v1/settings 2001.001.2 KiB pass
switch the background health checks offPUT /v1/settings 2002.001.2 KiB pass
List the provider kinds you can addGET /v1/provider-kinds 2002.008.7 KiB pass
Show what the Add provider dialog offersGET /v1/provider-catalog 2001.0010.5 KiB pass
List the models of every providerGET /v1/models 2001112.7 KiB pass
Refuse a provider id with capitals and a spacePOST /v1/providers 4001.0042 B pass
Refuse a provider of a kind that does not existPOST /v1/providers 4001.00288 B pass
Refuse a provider accent that is not #rrggbbPOST /v1/providers 4002.0043 B pass
Add an OpenAI-compatible provider with a key slot and no key yetPOST /v1/providers 2012.00384 B pass
Refuse to add a provider whose id existsPOST /v1/providers 4091.0043 B pass
Check a provider with no key: critical, and nothing is calledPOST /v1/providers/t-prov-compat/check 2001.00119 B pass
Set the provider's key: the view shows the slot, not the valuePUT /v1/providers/t-prov-compat/secret 20035.0422 B pass
Refuse an empty keyPUT /v1/providers/t-prov-compat/secret 4001.0026 B pass
Refuse a key body without a value fieldPUT /v1/providers/t-prov-compat/secret 4001.0045 B pass
Answer 404 when setting the key of an unknown providerPUT /v1/providers/no-such-provider/secret 4041.0042 B pass
Read the provider back: keyed, and no value in the viewGET /v1/providers/t-prov-compat 2002.00422 B pass
Check a keyed provider that is unreachable: critical, not a server errorPOST /v1/providers/t-prov-compat/check 2002.00169 B pass
Test an unreachable provider's connection: the report says it failed, with the reasonPOST /v1/providers/t-prov-compat/test 2003003134 B pass
List an unreachable provider's models: 502 with the reasonGET /v1/providers/t-prov-compat/models 5021.0060 B pass
Answer 404 when checking an unknown providerPOST /v1/providers/no-such-provider/check 4042.0042 B pass
Answer 404 when testing an unknown providerPOST /v1/providers/no-such-provider/test 4042.0042 B pass
The model listing reports the unreachable provider's errorGET /v1/models 2001302.8 KiB pass
Check every enabled provider: the new one is criticalPOST /v1/providers/check 2003.001.8 KiB pass
Replace a provider's label and accent: the key slot is keptPUT /v1/providers/t-prov-compat 2002.00462 B pass
Refuse an accent with six characters after the #PUT /v1/providers/t-prov-compat 4002.0043 B pass
Refuse a blank labelPUT /v1/providers/t-prov-compat 4001.0072 B pass
Refuse a label longer than 60 charactersPUT /v1/providers/t-prov-compat 4001.0072 B pass
Refuse a replace whose body id differs from the pathPUT /v1/providers/t-prov-compat 4002.0050 B pass
Answer 404 when replacing an unknown providerPUT /v1/providers/no-such-provider 4041.0042 B pass
Refuse a replace with a kind that does not existPUT /v1/providers/t-prov-compat 4004.00278 B pass
Disable a provider: it keeps its settings and shows offPUT /v1/providers/t-prov-compat 2001.00363 B pass
A disabled provider is not in the model listingGET /v1/models 20086.02.7 KiB pass
Enable the provider againPUT /v1/providers/t-prov-compat 2002.00462 B pass
Delete the providerDELETE /v1/providers/t-prov-compat 2001.0027 B pass
Answer 404 for a provider that was deletedGET /v1/providers/t-prov-compat 4042.0039 B pass
Answer 404 when deleting a provider twiceDELETE /v1/providers/t-prov-compat 4040.0039 B pass
Answer 404 when setting the key of a deleted providerPUT /v1/providers/t-prov-compat/secret 4041.0039 B pass
The provider list no longer has the deleted providerGET /v1/providers 2001.007.0 KiB pass
The model listing forgets the deleted providerGET /v1/models 20079.02.7 KiB pass
Check every enabled provider: the deleted one is not in itPOST /v1/providers/check 2001.001.6 KiB pass
the settings go back to what they were before the folderPUT /v1/settings 2001.001.2 KiB pass
Find the scratch provider key in the vault, so this folder deletes itGET /v1/vault/secrets 2002.001.8 KiB pass
Delete the scratch provider key: the provider is gone, and its key is not keptDELETE /v1/vault/secrets/sec_yf6zofcrephy 20425.00 B pass
List the providersGET /v1/providers 2002.007.0 KiB pass
Add a providerPOST /v1/providers 2012.00333 B pass
Read the provider backGET /v1/providers/scratch-provider 2001.00333 B pass
Replace the provider's settingsPUT /v1/providers/scratch-provider 2001.00333 B pass
List the providers againGET /v1/providers 2004.007.4 KiB pass
Delete the providerDELETE /v1/providers/scratch-provider 2001.0030 B pass
Answer 404 for an unknown providerGET /v1/providers/no-such-provider 4040.0042 B pass
Refuse a provider body that does not parsePOST /v1/providers 4000.0085 B pass
List the login bridge switches (off by default)GET /v1/login-bridges 2001.00665 B pass
Switch a vendor's login bridge on and off again (owner only)PUT /v1/login-bridges/openai 2008.00320 B pass
Refuse a login bridge for a vendor it is not offered forPUT /v1/login-bridges/example 4042.0041 B pass
vault80 requests
RequestCallStatusmsSizeResult
List the vault's entries before any secret of the owner'sGET /v1/vault/secrets 2002.001.4 KiB pass
Store a secret with no bindingPOST /v1/vault/secrets 20018.0321 B pass
List the stored entry without its valueGET /v1/vault/secrets 20039.01.7 KiB pass
Refuse a test of a secret with no bindingPOST /v1/vault/secrets/sec_qjhb37cobrrf/test 4001.0046 B pass
Bind a stored secret to a tool and an MCP serverPATCH /v1/vault/secrets/sec_qjhb37cobrrf 20015.0364 B pass
List the bound entry with its bindingsGET /v1/vault/secrets 2001.001.8 KiB pass
Test a bound secret with its first bindingPOST /v1/vault/secrets/sec_qjhb37cobrrf/test 2001.0090 B pass
Rotate the value of a bound secretPUT /v1/vault/secrets/sec_qjhb37cobrrf/value 20014.0441 B pass
List the rotated entry at version 2GET /v1/vault/secrets 2001.001.8 KiB pass
Roll the secret back to version 1POST /v1/vault/secrets/sec_qjhb37cobrrf/rollback 20041.0441 B pass
Refuse a rollback to a version that does not existPOST /v1/vault/secrets/sec_qjhb37cobrrf/rollback 4040.0026 B pass
Refuse a rotation to an empty valuePUT /v1/vault/secrets/sec_qjhb37cobrrf/value 4001.0030 B pass
Unbind the secret from all its consumersPATCH /v1/vault/secrets/sec_qjhb37cobrrf 20028.0404 B pass
Refuse a test once the secret has no bindingPOST /v1/vault/secrets/sec_qjhb37cobrrf/test 4001.0046 B pass
Refuse a binding that is not onePATCH /v1/vault/secrets/sec_qjhb37cobrrf 4001.0091 B pass
Delete the unbound secretDELETE /v1/vault/secrets/sec_qjhb37cobrrf 20416.00 B pass
The list no longer shows the deleted secretGET /v1/vault/secrets 2002.001.4 KiB pass
Refuse a second delete of the same secretDELETE /v1/vault/secrets/sec_qjhb37cobrrf 4041.0026 B pass
Refuse a rotation of the deleted secretPUT /v1/vault/secrets/sec_qjhb37cobrrf/value 4041.0026 B pass
Add a passphrase unlock slotPOST /v1/vault/slots 200761340 B pass
Refuse a passphrase slot with no passphrasePOST /v1/vault/slots 4001.0048 B pass
Refuse a rekey that leaves out the passphrase slotPOST /v1/vault/rekey 4001.0088 B pass
Rekey the vault with the passphrase of its slotPOST /v1/vault/rekey 200725349 B pass
Make a recovery code, shown oncePOST /v1/vault/recovery 20028.084 B pass
The status lists the recovery slot but not the codeGET /v1/vault 2002.00442 B pass
Seal the vaultPOST /v1/vault/seal 20051.0441 B pass
Refuse a secret read while the vault is sealedGET /v1/vault/secrets 4230.0024 B pass
Refuse an unlock with the wrong passphrasePOST /v1/vault/unseal 40158345 B pass
Unseal the vault with its passphrasePOST /v1/vault/unseal 200877442 B pass
Seal the vault againPOST /v1/vault/seal 20053.0441 B pass
Unseal the vault with the recovery codePOST /v1/vault/unseal 20023.0442 B pass
Seal the vault before the key file unsealPOST /v1/vault/seal 200143441 B pass
Unseal the vault from its key filePOST /v1/vault/unseal 20055.0442 B pass
Refuse to remove a slot that does not existDELETE /v1/vault/slots/slt_doesnotexist 4042.0026 B pass
Remove the recovery slotDELETE /v1/vault/slots/slt_5wppilmuctkv 20048.0349 B pass
Remove the passphrase slotDELETE /v1/vault/slots/slt_5jmsoqk2pzu3 20034.0254 B pass
Refuse to remove the last key slotDELETE /v1/vault/slots/slt_r2hc4yijcvxn 4091.0046 B pass
Import two secrets from a dotenv filePOST /v1/vault/import 20051.0161 B pass
List the imported entries with their bindingsGET /v1/vault/secrets 2002.002.1 KiB pass
Read the consumers and the entry each one resolvesGET /v1/vault/consumers 2002.005.6 KiB pass
Test an imported secret with its bound toolPOST /v1/vault/secrets/sec_jzchllqxm4b6/test 2002.0090 B pass
Delete the first imported secretDELETE /v1/vault/secrets/sec_jzchllqxm4b6 20450.00 B pass
Delete the second imported secretDELETE /v1/vault/secrets/sec_wlckupibm6n3 20426.00 B pass
Read the audit log and verify its chainGET /v1/vault/audit?limit=500&verify=1 2003.0031.6 KiB pass
The audit names each lifecycle event of the secretGET /v1/vault/audit?limit=500 2001.0031.6 KiB pass
Page the audit log from the start with a limitGET /v1/vault/audit?after=0&limit=2 2002.00637 B pass
Refuse an audit cursor that is not a numberGET /v1/vault/audit?after=abc 4000.0034 B pass
Refuse an audit page size that is not a numberGET /v1/vault/audit?limit=lots 4001.0034 B pass
Refuse a secret body that is not JSONPOST /v1/vault/secrets 4003.0053 B pass
Refuse a secret name in lower casePOST /v1/vault/secrets 4001.0087 B pass
Refuse a secret of an unknown kindPOST /v1/vault/secrets 4001.0068 B pass
Refuse an empty secret valuePOST /v1/vault/secrets 4001.0030 B pass
Refuse a secret value over the size limitPOST /v1/vault/secrets 4001.0053 B pass
Refuse a binding that is not onePOST /v1/vault/secrets 4001.0091 B pass
Refuse a malformed node id in a scopePOST /v1/vault/secrets 4002.0042 B pass
Refuse a node scope that names a node not of this plazaPOST /v1/vault/secrets 4001.0042 B pass
Refuse a node scope with no nodePOST /v1/vault/secrets 4001.0049 B pass
Refuse a label longer than 200 charactersPOST /v1/vault/secrets 4001.0051 B pass
Create the first plaza entry of a namePOST /v1/vault/secrets 20031.0307 B pass
Refuse a second plaza entry for the same namePOST /v1/vault/secrets 4091.0077 B pass
Delete the first entry of the duplicate nameDELETE /v1/vault/secrets/sec_acbchin2zsw7 20445.00 B pass
Refuse a patch of an unknown secretPATCH /v1/vault/secrets/sec_doesnotexist 4045.0026 B pass
Refuse a patch that is not JSONPATCH /v1/vault/secrets/sec_doesnotexist 4001.0053 B pass
Refuse a rotation of an unknown secretPUT /v1/vault/secrets/sec_doesnotexist/value 4041.0026 B pass
Refuse a test of an unknown secretPOST /v1/vault/secrets/sec_doesnotexist/test 4041.0026 B pass
Refuse a test on a node that is not of this plazaPOST /v1/vault/secrets/sec_doesnotexist/test 4001.0042 B pass
Refuse a rollback without a version numberPOST /v1/vault/secrets/sec_doesnotexist/rollback 4001.0053 B pass
Refuse an unlock with both a passphrase and a recovery codePOST /v1/vault/unseal 4001.0058 B pass
Refuse a slot of an unknown kindPOST /v1/vault/slots 4005.0048 B pass
Refuse a second key file slotPOST /v1/vault/slots 4092.0050 B pass
Refuse an import in another formatPOST /v1/vault/import 4001.0039 B pass
Refuse a vault read from a host that does not name loopbackGET /v1/vault/secrets 4036.0046 B pass
Refuse a duplicate name given twice in a dotenv filePOST /v1/vault/import 2001.00139 B pass
Show the vault's stateGET /v1/vault 2002.00254 B pass
Create a secretPOST /v1/vault/secrets 20039.0333 B pass
Change a secret's labelPATCH /v1/vault/secrets/sec_kmm43bvdkgqz 20015.0342 B pass
Read the secret's metadata back from the listGET /v1/vault/secrets 2001.001.8 KiB pass
Delete a secretDELETE /v1/vault/secrets/sec_kmm43bvdkgqz 20463.00 B pass
Answer 404 for an unknown secret idDELETE /v1/vault/secrets/sec_doesnotexist 4042.0026 B pass
Refuse a secret body without a valuePOST /v1/vault/secrets 4001.0053 B pass
settings7 requests
RequestCallStatusmsSizeResult
Read the hub's settingsGET /v1/settings 2002.001.2 KiB pass
Save a valid change to the settingsPUT /v1/settings 2001.001.2 KiB pass
Refuse a settings value out of rangePUT /v1/settings 4001.0044 B pass
Refuse a settings body that is not valid JSON for the typePUT /v1/settings 4001.0094 B pass
Read the saved change backGET /v1/settings 2000.001.2 KiB pass
Check the session is signed inGET /v1/auth/check 2001.0011 B pass
Refuse a sign-in with a wrong owner tokenPOST /v1/auth/session 4015.0039 B pass
plaza53 requests
RequestCallStatusmsSizeResult
Resume the plaza so it runs: the hold is offPOST /v1/plaza/resume 2002.0080 B pass
Read the plaza state: runningGET /v1/plaza/state 2001.0080 B pass
Stop all work and hold the plaza, with a reasonPOST /v1/plaza/stop 2002.00111 B pass
Read the plaza state: held, with who held it and whyGET /v1/plaza/state 2001.00111 B pass
Refuse a decision call while the plaza is heldPOST /v1/decisions 4093.0073 B pass
Create a project while the plaza is held: planning is not heldPOST /v1/projects 2012.00559 B pass
Put the held project in maintenancePOST /v1/projects/pr1/mode 2001.00655 B pass
Refuse a maintenance sweep while the plaza is heldPOST /v1/projects/pr1/maintenance/sweep 4091.0043 B pass
Stopping again keeps the holdPOST /v1/plaza/stop 2002.0079 B pass
Refuse a stop whose body is not JSONPOST /v1/plaza/stop 4001.0093 B pass
Resume the plaza: the hold endsPOST /v1/plaza/resume 2002.0080 B pass
Read the plaza state: running againGET /v1/plaza/state 2001.0080 B pass
Decision calls are no longer refused for the hold: a missing key is the refusalPOST /v1/decisions 50215.0101 B pass
A sweep of the held project is refused for having no agents, not for the holdPOST /v1/projects/pr1/maintenance/sweep 4091.00101 B pass
Resuming a running plaza changes nothingPOST /v1/plaza/resume 2001.0080 B pass
Read the default decision model before any changeGET /v1/decisions/default 2000.0030 B pass
Refuse a default whose provider does not existPUT /v1/decisions/default 4001.0030 B pass
Refuse a default that is a chat provider, not a decision modelPUT /v1/decisions/default 4001.0061 B pass
Refuse a default model the decision provider does not listPUT /v1/decisions/default 4004.0061 B pass
Refuse a default with no modelPUT /v1/decisions/default 4001.0068 B pass
Refuse a default body that is not JSONPUT /v1/decisions/default 4001.0096 B pass
The refused defaults changed nothingGET /v1/decisions/default 2000.0030 B pass
Refuse a decision call with no questionsPOST /v1/decisions 4002.0043 B pass
Refuse a decision call with more than 128 questionsPOST /v1/decisions 4001.0045 B pass
Refuse a decision call whose provider is a chat providerPOST /v1/decisions 4001.0058 B pass
Refuse a decision call for a model the provider does not listPOST /v1/decisions 4002.0061 B pass
Refuse a choice question with a single choicePOST /v1/decisions 4001.0057 B pass
Refuse a question with no instructionsPOST /v1/decisions 4001.0044 B pass
Refuse two questions with the same namePOST /v1/decisions 4001.0043 B pass
Refuse a score question with one levelPOST /v1/decisions 4001.0055 B pass
Refuse a body with no inputPOST /v1/decisions 4001.0064 B pass
Refuse a decision body that is not JSONPOST /v1/decisions 4001.0093 B pass
A valid decision call goes to the gateway: without a key it is a 502POST /v1/decisions 5028.00101 B pass
List the tasks on an empty hubGET /v1/tasks 2001.0012 B pass
Open a project for the tasksPOST /v1/projects 20110.0690 B pass
Create a taskPOST /v1/tasks 2012.00333 B pass
Read the task backGET /v1/tasks/t1 2001.00333 B pass
List the tasks after a createGET /v1/tasks 2000.00345 B pass
Withdraw an open taskDELETE /v1/tasks/t1 2001.00346 B pass
Answer 404 for an unknown taskGET /v1/tasks/t999999 4041.0035 B pass
Refuse a task with no goalPOST /v1/tasks 4000.0075 B pass
Read the boardGET /v1/board 2001.00134 B pass
Refuse a board post from an unknown agentPOST /v1/board 4041.0037 B pass
Refuse a board post with an empty subjectPOST /v1/board 4001.0037 B pass
Create a task others will run afterPOST /v1/tasks 2010.00288 B pass
Create a task that runs after anotherPOST /v1/tasks 2011.00307 B pass
List only the tasks that can be claimed nowGET /v1/tasks?ready=true 2001.00300 B pass
Refuse a ready filter that is not true or falseGET /v1/tasks?ready=maybe 4000.0054 B pass
Refuse links that would close a cyclePATCH /v1/tasks/t2 4001.0080 B pass
Relink an open taskPATCH /v1/tasks/t3 2001.00298 B pass
Answer 404 for relinking an unknown taskPATCH /v1/tasks/t999999 4041.0035 B pass
Refuse a task outside a projectPOST /v1/tasks 4001.0093 B pass
Refuse a task for an unknown projectPOST /v1/tasks 4041.0038 B pass
library31 requests
RequestCallStatusmsSizeResult
List the library's tool versionsGET /v1/library 2002.002 B pass
Answer 404 for files of an unknown tool versionGET /v1/library/no-such-tool/1/files 4040.0027 B pass
Answer 409 when reviewing an unknown tool versionPOST /v1/library/no-such-tool/1/review 4091.0027 B pass
Answer 400 when a review has no approve fieldPOST /v1/library/no-such-tool/1/review 4001.0054 B pass
Answer 404 when deleting an unknown tool versionDELETE /v1/library/no-such-tool/1 4041.0027 B pass
List the projectsGET /v1/projects 2001.001.6 KiB pass
Answer 404 for an unknown projectGET /v1/projects/no-such-project 4041.0027 B pass
Answer 409 when approving an unknown projectPOST /v1/projects/no-such-project/approve 4092.0044 B pass
Answer 404 for an unknown project's task graphGET /v1/projects/no-such-project/graph 4041.0027 B pass
Pause a projectPOST /v1/projects/pr2/pause 2001.001.0 KiB pass
Resume a paused projectPOST /v1/projects/pr2/resume 2001.001.1 KiB pass
Refuse a project with no titlePOST /v1/projects 4001.0045 B pass
Open a project to archivePOST /v1/projects 20123.0650 B pass
Archive a projectPOST /v1/projects/pr3/archive 2001.00725 B pass
Refuse a task for an archived projectPOST /v1/tasks 4091.0058 B pass
Refuse to resume an archived projectPOST /v1/projects/pr3/resume 4090.0035 B pass
Answer 404 when pausing an unknown projectPOST /v1/projects/no-such-project/pause 4041.0027 B pass
Answer 404 when moving an unknown task into a projectPOST /v1/tasks/t999/move 4041.0032 B pass
Refuse to move a task out of its projectPOST /v1/tasks/t1/move 4091.0070 B pass
Refuse a move that names no projectPOST /v1/tasks/t1/move 4001.0046 B pass
Read a project's settings, none set yetGET /v1/projects/pr2/settings 2000.002 B pass
Override a project's effort and task budgetPATCH /v1/projects/pr2/settings 2001.0036 B pass
Refuse an effort the plaza does not knowPATCH /v1/projects/pr2/settings 4001.00101 B pass
Refuse a setting projects do not havePATCH /v1/projects/pr2/settings 4000.00510 B pass
Show where each of a project's settings comes fromGET /v1/projects/pr2/settings/effective 2001.00750 B pass
Set a project's effort back to the plaza'sPATCH /v1/projects/pr2/settings 2001.0020 B pass
Answer 404 for an unknown project's settingsGET /v1/projects/no-such-project/settings 4041.0027 B pass
Answer 404 when recording tests of an unknown tool versionPOST /v1/library/no-such-tool/1/tests 4091.0027 B pass
Refuse to promote an unknown tool versionPOST /v1/library/no-such-tool/1/promote 4091.0027 B pass
Refuse to stage an unknown replacementPOST /v1/library/no-such-tool/1/stage 4092.0027 B pass
Propose removal of harmful and unused toolsPOST /v1/library/sweep 2001.0011 B pass
mcp86 requests
RequestCallStatusmsSizeResult
List the MCP servers on an empty hubGET /v1/mcp/servers 2001.002 B pass
Add an MCP server at a fake addressPOST /v1/mcp/servers 2001.00482 B pass
Refuse a server with an id that is already takenPOST /v1/mcp/servers 4091.0068 B pass
Refuse a plain-http address while private addresses are offPOST /v1/mcp/servers 4001.00105 B pass
List the catalog of MCP server presetsGET /v1/mcp/catalog 2001.004.8 KiB pass
List the servers and find the added oneGET /v1/mcp/servers 2001.00484 B pass
Read the added server backGET /v1/mcp/servers/bru-fake-mcp 2001.00482 B pass
Test the server and refuse its tools while it is unreachablePOST /v1/mcp/servers/bru-fake-mcp/test 2001.00107 B pass
List the tools of an unreachable server: noneGET /v1/mcp/servers/bru-fake-mcp/tools 2003.002 B pass
Start the unreachable server and report its errorPOST /v1/mcp/servers/bru-fake-mcp/start 2001.00515 B pass
Read the logs of the unreachable serverGET /v1/mcp/servers/bru-fake-mcp/logs?limit=5 2001.002 B pass
Stop the unreachable serverPOST /v1/mcp/servers/bru-fake-mcp/stop 2000.00515 B pass
Refuse the logs of an unknown serverGET /v1/mcp/servers/no-such-mcp/logs 4040.0052 B pass
Rename the server and change its limitsPATCH /v1/mcp/servers/bru-fake-mcp 2002.00514 B pass
Refuse a change of the server's idPATCH /v1/mcp/servers/bru-fake-mcp 4001.0048 B pass
Refuse a change to a plain-http address while private addresses are offPATCH /v1/mcp/servers/bru-fake-mcp 4001.00105 B pass
Refuse a change to an unknown serverPATCH /v1/mcp/servers/no-such-mcp 4041.0052 B pass
Refuse a change that is not a JSON objectPATCH /v1/mcp/servers/bru-fake-mcp 4001.0079 B pass
Add a server whose header reads a vault secretPOST /v1/mcp/servers 2001.00547 B pass
The vault lists the server as a consumer of that secretGET /v1/vault/consumers 2001.005.8 KiB pass
Refuse a header whose format has no placeholderPOST /v1/mcp/servers 4001.00111 B pass
Refuse a stdio server given a container imagePOST /v1/mcp/servers 4000.00140 B pass
Delete the fake serverDELETE /v1/mcp/servers/bru-fake-mcp 2041.000 B pass
Refuse to read the deleted serverGET /v1/mcp/servers/bru-fake-mcp 4041.0053 B pass
Refuse a second delete of the same serverDELETE /v1/mcp/servers/bru-fake-mcp 4040.0053 B pass
Delete the server with the vault headerDELETE /v1/mcp/servers/bru-vault-mcp 2041.000 B pass
The deleted servers are gone from the listGET /v1/mcp/servers 2001.002 B pass
Show the hub's MCP server as switched offGET /v1/hub-mcp 2003.00263 B pass
Refuse an MCP message while the server is offPOST /mcp 4041.0028 B pass
Refuse a GET on the MCP endpoint while the server is offGET /mcp 4041.0028 B pass
Refuse a settings change with an unknown bindPUT /v1/hub-mcp 4001.0035 B pass
Refuse settings that are not JSONPUT /v1/hub-mcp 4001.00101 B pass
Refuse an unknown auth modePUT /v1/hub-mcp 4001.0039 B pass
Refuse an unknown open scopePUT /v1/hub-mcp 4001.0052 B pass
Refuse an origin that carries a pathPUT /v1/hub-mcp 4001.0086 B pass
Refuse remote binding while the hub is not on TLSPUT /v1/hub-mcp 4001.0059 B pass
Turn the hub's MCP server on, locally, in secure modePUT /v1/hub-mcp 20039.0262 B pass
Refuse an MCP message with no token in secure modePOST /mcp 4011.0038 B pass
Refuse an MCP message from a foreign originPOST /mcp 4032.0057 B pass
Refuse a bad token even while the server is onPOST /mcp 4012.0025 B pass
Answer 405 to a GET on the MCP endpoint while it is onGET /mcp 4051.0038 B pass
Refuse remote binding over TLS-less listener even while onPUT /v1/hub-mcp 4002.0059 B pass
Refuse an open-mode anonymous scope that is not a scopePUT /v1/hub-mcp 4001.0052 B pass
Create an observe tokenPOST /v1/hub-mcp/tokens 20143.0253 B pass
Create an operate tokenPOST /v1/hub-mcp/tokens 20158.0253 B pass
Create a govern tokenPOST /v1/hub-mcp/tokens 20153.0251 B pass
List the tokens without their valuesGET /v1/hub-mcp/tokens 2001.00526 B pass
Refuse a token of an unknown scopePOST /v1/hub-mcp/tokens 4001.0047 B pass
Refuse an observe token that names an operate toolPOST /v1/hub-mcp/tokens 4001.0054 B pass
Refuse a token with an empty namePOST /v1/hub-mcp/tokens 4001.0038 B pass
Refuse a token that expires in zero daysPOST /v1/hub-mcp/tokens 4001.0037 B pass
Initialize an MCP session with the observe tokenPOST /mcp 2002.00267 B pass
List the tools an observe token may seePOST /mcp 2002.0010.8 KiB pass
Call an observe tool with the observe tokenPOST /mcp 20054.0396 B pass
Refuse an operate tool called with the observe tokenPOST /mcp 20039.086 B pass
Refuse a govern tool called with the observe tokenPOST /mcp 20028.088 B pass
Initialize an MCP session with the operate tokenPOST /mcp 2001.00267 B pass
List the tools an operate token may seePOST /mcp 2004.0028.2 KiB pass
Refuse a govern tool called with the operate tokenPOST /mcp 20072.088 B pass
Refuse a call with no sessionPOST /mcp 4002.0071 B pass
Refuse a call with an unknown sessionPOST /mcp 4041.0056 B pass
Answer a parse error for a message that is not JSONPOST /mcp 2002.0075 B pass
Read the call log of the observe tokenGET /v1/hub-mcp/calls?token=mcp_605e21c29c41&limit=50 2002.00673 B pass
Refuse a call-log limit that is not a numberGET /v1/hub-mcp/calls?limit=lots 4001.0029 B pass
Filter the call log by tool and limitGET /v1/hub-mcp/calls?tool=plaza_status&limit=5 2002.00225 B pass
Revoke the operate tokenDELETE /v1/hub-mcp/tokens/mcp_cf553e7a2115 20447.00 B pass
Refuse a second revoke of the same tokenDELETE /v1/hub-mcp/tokens/mcp_cf553e7a2115 40412.037 B pass
Refuse a call with the revoked tokenPOST /mcp 4012.0025 B pass
List the revoked token with its revocation timeGET /v1/hub-mcp/tokens 2001.00544 B pass
Keep the observe token working after the operate token is revokedPOST /mcp 2002.0010.8 KiB pass
Refuse to revoke a token that does not existDELETE /v1/hub-mcp/tokens/tok_doesnotexist 40414.037 B pass
Switch the hub's MCP server off againPUT /v1/hub-mcp 2008.00263 B pass
Refuse an observe token's call while the server is offPOST /mcp 4041.0028 B pass
Show the server as off with its live tokensGET /v1/hub-mcp 2001.00263 B pass
Revoke the observe tokenDELETE /v1/hub-mcp/tokens/mcp_605e21c29c41 20414.00 B pass
Revoke the govern tokenDELETE /v1/hub-mcp/tokens/mcp_efe5a1e88d48 2048.000 B pass
Every token of this area is revoked at the endGET /v1/hub-mcp/tokens 2001.00562 B pass
Add an MCP serverPOST /v1/mcp/servers 2003.00553 B pass
Read the MCP server backGET /v1/mcp/servers/test-server 2001.00553 B pass
Change an MCP server's namePATCH /v1/mcp/servers/test-server 2001.00556 B pass
Answer 404 for an unknown MCP serverGET /v1/mcp/servers/no-such-server 4041.0055 B pass
Refuse an MCP server with an invalid idPOST /v1/mcp/servers 4001.00110 B pass
Delete an MCP serverDELETE /v1/mcp/servers/test-server 2040.000 B pass
Create an MCP tokenPOST /v1/hub-mcp/tokens 201112252 B pass
List the MCP tokensGET /v1/hub-mcp/tokens 2001.00733 B pass
Revoke an MCP tokenDELETE /v1/hub-mcp/tokens/mcp_6f32b2750496 20442.00 B pass
metrics103 requests
RequestCallStatusmsSizeResult
List the metric scopesGET /v1/metrics/scopes 2002.006.3 KiB pass
Compose the alerts tab over a weekGET /v1/metrics/view?tab=alerts&range=7d&scope=global 2004.003.6 KiB pass
Compose the capacity tab zoomed to a part of the monthGET /v1/metrics/view?tab=capacity&range=30d&zoom=0.25,0.75&width=400&tz=60&compare=prev 2002.003.2 KiB pass
Compose the tokens tab from the built-in fixtureGET /v1/metrics/view?tab=tokens&range=24h&fixture=1 20010057.3 KiB pass
Refuse a view with an unknown tabGET /v1/metrics/view?tab=nowhere 4003.0063 B pass
Refuse a view with a zero widthGET /v1/metrics/view?tab=overview&width=0 4000.0041 B pass
Refuse a view wider than 4000 pixelsGET /v1/metrics/view?tab=overview&width=4001 4001.0044 B pass
Refuse a zoom whose ends are out of orderGET /v1/metrics/view?tab=overview&zoom=0.8,0.2 4000.0080 B pass
Refuse a view whose shift is not a numberGET /v1/metrics/view?tab=overview&shift=soon 4000.0048 B pass
Show what changed around a timeGET /v1/metrics/around?tab=overview&range=1h&t=1000 2002.00187 B pass
Refuse an around-time that is not a numberGET /v1/metrics/around?tab=overview&range=1h&t=now 4001.0043 B pass
Export a fixture view as CSVGET /v1/metrics/export?tab=overview&range=1h&fixture=1 20013.081.0 KiB pass
Refuse a CSV export with an unknown rangeGET /v1/metrics/export?tab=overview&range=2w 4001.0075 B pass
Read a series grouped by entityPOST /v1/metrics/query 2001.0013 B pass
Read a series grouped by the model labelPOST /v1/metrics/query 2000.0013 B pass
Read a series grouped by the role propertyPOST /v1/metrics/query 2001.0013 B pass
Refuse a grouping with an empty labelPOST /v1/metrics/query 4001.0087 B pass
Refuse a query with a zero stepPOST /v1/metrics/query 4001.0076 B pass
Refuse a query that ends before it startsPOST /v1/metrics/query 4001.0076 B pass
Read a series with a step as large as a u64POST /v1/metrics/query 2001.0013 B pass
Answer no groups for an unknown metricPOST /v1/metrics/query 2001.0013 B pass
Read a series for a scope that does not existPOST /v1/metrics/query 2001.0013 B pass
Keep only the top group of a queryPOST /v1/metrics/query 2005.0013 B pass
Refuse a query with an unknown aggregatePOST /v1/metrics/query 4002.00183 B pass
Refuse a query without an aggregatePOST /v1/metrics/query 4002.0073 B pass
Refuse a query body that is not JSONPOST /v1/metrics/query 4001.00138 B pass
List the events of the global scopeGET /v1/metrics/events?scope=global&limit=5 2001.002 B pass
List events with a limit above the cap and kind filtersGET /v1/metrics/events?scope=global&from=0&to=3600000&limit=99999&kinds=lifecycle,alert 2001.002 B pass
Refuse an events window whose start is not a numberGET /v1/metrics/events?scope=global&from=yesterday 4001.0052 B pass
List the agents' calls with a limitGET /v1/metrics/calls?scope=global&limit=10 2002.002 B pass
Refuse a calls page with a before that is not a numberGET /v1/metrics/calls?scope=global&before=x 4001.0046 B pass
Compose the next page of calls from the fixtureGET /v1/metrics/calls/page?tab=agents&range=24h&fixture=1 2001.0018.8 KiB pass
Refuse a call page whose before is not a numberGET /v1/metrics/calls/page?before=x 4001.0046 B pass
List the kept tracesGET /v1/metrics/traces?scope=global&limit=5 2002.002 B pass
Refuse a trace window whose start is not a numberGET /v1/metrics/traces?scope=global&from=x 4001.0044 B pass
Answer 404 for a trace that was not keptGET /v1/metrics/traces/no-such-trace 4042.0043 B pass
List the service-level objectivesGET /v1/metrics/slos 2002.00785 B pass
Read the capacity forecast panel over 30 daysGET /v1/metrics/forecast?range=30d 2002.00187 B pass
Refuse a forecast with an unknown rangeGET /v1/metrics/forecast?range=2w 4001.0075 B pass
Scrape the hub's Prometheus metricsGET /v1/metrics 2001.005.1 KiB pass
Renew the live lease for a console viewPOST /v1/metrics/live 2000.0011 B pass
Refuse a live lease without its tab and rangePOST /v1/metrics/live 4001.0073 B pass
Mark agent 1 as open in the tracesPOST /v1/metrics/open/1 2001.0011 B pass
Refuse to open an agent whose id is not a numberPOST /v1/metrics/open/first 4001.0041 B pass
Refuse a query whose tiny step over a long window would make too many pointsPOST /v1/metrics/query 4001.00122 B pass
Read the default metrics settingsGET /v1/metrics/settings 2001.00292 B pass
Save changed settings and see them repairedPUT /v1/metrics/settings 20017.0321 B pass
Read back the saved settingsGET /v1/metrics/settings 2000.00321 B pass
Refuse settings with an unknown levelPUT /v1/metrics/settings 4001.00129 B pass
Refuse settings that are not JSONPUT /v1/metrics/settings 4001.00130 B pass
Switch OpenMetrics on and receive its token oncePUT /v1/metrics/settings 2001.00362 B pass
Refuse the OpenMetrics scrape without a tokenGET /metrics 4011.0053 B pass
Refuse the OpenMetrics scrape with a wrong tokenGET /metrics 4011.0053 B pass
Scrape OpenMetrics with its tokenGET /metrics 2002.0084.0 KiB pass
Save OpenMetrics on again without a new tokenPUT /v1/metrics/settings 20010.0291 B pass
Scrape again with the same tokenGET /metrics 2002.0084.0 KiB pass
Switch OpenMetrics offPUT /v1/metrics/settings 2002.00292 B pass
Answer 404 for the scrape once it is off againGET /metrics 4042.0021 B pass
Restore the default settingsPUT /v1/metrics/settings 2002.00292 B pass
Read the restored settingsGET /v1/metrics/settings 2001.00292 B pass
List the alerts with only the starter rulesGET /v1/metrics/alerts 2002.002.3 KiB pass
Refuse an alert rule without its metricPUT /v1/metrics/alerts/rules 4001.0077 B pass
Refuse an alert rule with an unknown severityPUT /v1/metrics/alerts/rules 4001.00113 B pass
Answer 404 when switching a rule that does not existPOST /v1/metrics/alerts/no-such-rule/on 4042.0024 B pass
Refuse to delete a rule that does not existDELETE /v1/metrics/alerts/rules/no-such-rule 4001.0024 B pass
Refuse to delete a starter ruleDELETE /v1/metrics/alerts/rules/starter-ttft 4001.0044 B pass
Switch a starter rule off and keep its thresholdPUT /v1/metrics/alerts/rules 20011.0275 B pass
Switch the starter rule back onPUT /v1/metrics/alerts/rules 2002.00274 B pass
Add an owner's alert rulePUT /v1/metrics/alerts/rules 2002.00247 B pass
List the alerts and find the added ruleGET /v1/metrics/alerts 2001.002.6 KiB pass
Switch the owner's rule offPOST /v1/metrics/alerts/rule-1/on 20027.0248 B pass
Switch the owner's rule back onPOST /v1/metrics/alerts/rule-1/on 2001.00247 B pass
Save the owner's rule again with a new thresholdPUT /v1/metrics/alerts/rules 2001.00255 B pass
Mute the owner's rule until 2100POST /v1/metrics/alerts/rule-1/mute 2001.0011 B pass
Acknowledge the owner's rule for the global scopePOST /v1/metrics/alerts/rule-1/ack 2002.0011 B pass
List the alerts and see the mute, the ack and their historyGET /v1/metrics/alerts 2001.002.7 KiB pass
Refuse an acknowledgement without a subjectPOST /v1/metrics/alerts/rule-1/ack 4001.0077 B pass
Refuse a mute without an end timePOST /v1/metrics/alerts/rule-1/mute 4001.0078 B pass
Delete the owner's ruleDELETE /v1/metrics/alerts/rules/rule-1 2002.0011 B pass
Refuse to delete the same rule twiceDELETE /v1/metrics/alerts/rules/rule-1 4001.0024 B pass
List the alerts without the deleted ruleGET /v1/metrics/alerts 2002.002.4 KiB pass
Answer 404 when switching a deleted rulePOST /v1/metrics/alerts/rule-1/on 4041.0024 B pass
Read the saved dashboards before any saveGET /v1/metrics/dashboards 2001.0050 B pass
Save the dashboards with a pinned scopePUT /v1/metrics/dashboards 2009.0067 B pass
Read back the saved dashboardsGET /v1/metrics/dashboards 2001.0067 B pass
Refuse dashboards whose scopes are not a listPUT /v1/metrics/dashboards 4003.00107 B pass
Clear the saved dashboard pins againPUT /v1/metrics/dashboards 2002.0051 B pass
Show the price of a model a vendor publishesGET /v1/prices/meta/muse-wonder-1.0 2001.00122 B pass
Show a vendor price with the model id in capitalsGET /v1/prices/META/muse-wonder-1.0 2002.00122 B pass
Answer 404 for an encoded model with no priceGET /v1/prices/no/such-model-xyz 4042.0042 B pass
Refresh the model prices and list both sourcesPOST /v1/prices/refresh 200120520.2 KiB pass
Show the vendor price after a refreshGET /v1/prices/meta/muse-wonder-1.0 2001.00122 B pass
Read the metric catalogGET /v1/metrics/catalog 2001.0027.3 KiB pass
Compose the overview view on an empty hubGET /v1/metrics/view?tab=overview&range=24h 2006.003.6 KiB pass
Refuse a view with an unknown rangeGET /v1/metrics/view?tab=overview&range=2w 4002.0075 B pass
Read a metric series grouped by allPOST /v1/metrics/query 2001.0013 B pass
Refuse a query with an unknown groupPOST /v1/metrics/query 4001.0088 B pass
Read the metrics settingsGET /v1/metrics/settings 2004.00292 B pass
Answer 404 for the scrape endpoint while OpenMetrics is offGET /metrics 4042.0021 B pass
Summarize usage over a valid windowGET /v1/usage/summary?from=0&to=1000 2002.00231 B pass
Refuse a usage window that ends before it startsGET /v1/usage/summary?from=2000&to=1000 4001.0042 B pass
List the model pricesGET /v1/prices 2007.00520.2 KiB pass
Answer 404 for a model with no priceGET /v1/prices/no-such-model-xyz 4041.0042 B pass
joining29 requests
RequestCallStatusmsSizeResult
List the node join codes on an empty hubGET /v1/nodes/codes 2001.002 B pass
Issue a join code for a new nodePOST /v1/nodes/codes 2011.00221 B pass
List the join codes shows the new code as activeGET /v1/nodes/codes 2001.00120 B pass
Revoke an unused node join codeDELETE /v1/nodes/codes/c1 2001.0026 B pass
List the join codes after revoking shows the code as revokedGET /v1/nodes/codes 2000.00121 B pass
Answer 404 when revoking an unknown node join codeDELETE /v1/nodes/codes/c999999 4040.0024 B pass
Answer 400 when the node join code body is not JSONPOST /v1/nodes/codes 4001.00111 B pass
Refuse a node join with a bad join codePOST /v1/nodes/join 4031.0039 B pass
List the workstation join codes on an empty hubGET /v1/stations/codes 2000.002 B pass
Answer 400 when the workstation join code body is not JSONPOST /v1/stations/codes 4001.00111 B pass
Answer 404 when revoking an unknown workstation join codeDELETE /v1/stations/codes/c999999 4041.0024 B pass
Refuse a workstation join with a bad join codePOST /v1/stations/join 4031.0095 B pass
Answer 404 when stopping an unknown nodePOST /v1/nodes/n999/stop 4041.0024 B pass
Answer 404 when resuming an unknown nodePOST /v1/nodes/n999/resume 4042.0024 B pass
Answer 400 when a transfer names no filesPOST /v1/transfers 4001.0046 B pass
Stopping the hub's own node n0 takes it out of servicePOST /v1/nodes/n0/stop 20015.0679 B pass
Answer 502 when a transfer names an unknown nodePOST /v1/transfers 5021.0024 B pass
Resuming the hub's own node n0 puts it back in servicePOST /v1/nodes/n0/resume 20021.0679 B pass
A dry-run rebalance lists its moves and starts nonePOST /v1/nodes/rebalance 2004.0028 B pass
List the test lab on a fresh hubGET /v1/test-lab 2001.00250 B pass
Answer 404 for an unknown test-lab runGET /v1/test-lab/runs/q999 4041.0023 B pass
Answer 404 when setting the roles of an unknown nodePOST /v1/nodes/n999/roles 4042.0024 B pass
Refuse a collector's logs for an unknown test-lab runPOST /v1/test-lab/runs/q999/otlp/logs 4041.0023 B pass
Answer 404 for the observations of an unknown test-lab runGET /v1/test-lab/runs/q999/observations 4041.0023 B pass
Answer 404 for assessing an unknown test-lab runPOST /v1/test-lab/runs/q999/assess 4042.0023 B pass
Answer 404 for the performance of an unknown test-lab runGET /v1/test-lab/runs/q999/performance 4042.0023 B pass
Answer 404 for the UI checks of an unknown test-lab runPOST /v1/test-lab/runs/q999/ux 4041.0023 B pass
Refuse a scrubbed copy for an unknown test-lab runPOST /v1/test-lab/runs/q999/scrub 4042.0023 B pass
Answer 404 for the scrubbed copies of an unknown test-lab runGET /v1/test-lab/runs/q999/scrub 4041.0023 B pass
agents153 requests
RequestCallStatusmsSizeResult
List the agents on a hub with no nodeGET /v1/agents 2000.002 B pass
Answer 404 for an agent that does not existGET /v1/agents/999999 4041.0025 B pass
Answer 400 for an agent id that is not a numberGET /v1/agents/not-a-number 4001.0032 B pass
Answer 404 when deleting an agent that does not existDELETE /v1/agents/999999 4042.0025 B pass
List the roles before any custom role existsGET /v1/roles 2001.0044.0 KiB pass
Refuse a custom role with missing fieldsPOST /v1/roles 4001.0062 B pass
Create a custom rolePOST /v1/roles 2001.00267 B pass
Read the custom role back from the listGET /v1/roles 2003.0044.4 KiB pass
Change a custom role by saving it againPOST /v1/roles 2001.00311 B pass
Delete a custom roleDELETE /v1/roles/scout-test 2001.0034 B pass
Answer 404 when deleting a role that is already goneDELETE /v1/roles/scout-test 4041.0030 B pass
Answer 404 for an unknown project's rosterGET /v1/agents?project=no-such-project 4041.0038 B pass
Answer 404 when deleting a custom role that does not existDELETE /v1/roles/t-agents-lead 4041.0033 B pass
Refuse a custom role with no responsibilitiesPOST /v1/roles 4001.0052 B pass
Refuse a custom role with no deliverablesPOST /v1/roles 4001.0049 B pass
Refuse a custom role with an empty titlePOST /v1/roles 4001.0026 B pass
Refuse a custom role whose title is over 60 charactersPOST /v1/roles 4001.0046 B pass
Refuse a custom role whose purpose is over 600 charactersPOST /v1/roles 4001.0049 B pass
Refuse a custom role whose purpose is only spacesPOST /v1/roles 4001.0028 B pass
Refuse a custom role whose id is one characterPOST /v1/roles 4001.0082 B pass
Refuse a custom role whose id is over 32 charactersPOST /v1/roles 4000.0082 B pass
Refuse a custom role whose id has capital lettersPOST /v1/roles 4001.0082 B pass
Refuse a custom role that takes a built-in role's idPOST /v1/roles 4091.0038 B pass
Refuse a custom role body that is not JSONPOST /v1/roles 4001.0055 B pass
Answer 404 when deleting a built-in roleDELETE /v1/roles/architect 4041.0029 B pass
The refused custom roles were not savedGET /v1/roles 2002.0044.0 KiB pass
Create a custom role with unicode textPOST /v1/roles 2002.00324 B pass
Read the new custom role back in the listGET /v1/roles 2001.0044.4 KiB pass
A spawn of the custom role reaches noded and is refusedPOST /v1/agents 5021.00108 B pass
The custom role still has no agents after the refused spawnGET /v1/roles 2001.0044.4 KiB pass
Make sure the custom role exists before it changesPOST /v1/roles 2001.00324 B pass
Change a custom role by saving it again with a new titlePOST /v1/roles 2001.00281 B pass
Read the changed role backGET /v1/roles 2000.0044.4 KiB pass
Refuse a change that empties the purposePOST /v1/roles 4004.0028 B pass
The refused change leaves the saved titleGET /v1/roles 2001.0044.4 KiB pass
Make sure the custom role exists before it is deletedPOST /v1/roles 2001.00324 B pass
Delete a custom roleDELETE /v1/roles/t-agents-lead 2001.0037 B pass
The deleted role is no longer listedGET /v1/roles 2001.0044.0 KiB pass
Answer 404 when deleting the role againDELETE /v1/roles/t-agents-lead 4040.0033 B pass
Refuse a spawn of the deleted rolePOST /v1/agents 4001.0038 B pass
Answer 404 for an agent that does not exist when readGET /v1/agents/999999 4040.0025 B pass
Answer 404 when renaming an agent that does not existPATCH /v1/agents/999999 4041.0025 B pass
Answer 404 for the context of an agent that does not existGET /v1/agents/999999/context 4041.0025 B pass
Answer 404 for the transcript of an agent that does not existGET /v1/agents/999999/transcript 4041.0025 B pass
Answer 404 for the VM checkpoints of an agent that does not existGET /v1/agents/999999/vm-checkpoints 4041.0027 B pass
Answer 404 when checkpointing an agent that does not existPOST /v1/agents/999999/vm-checkpoints 4041.0027 B pass
Answer 404 when deleting a checkpoint of an agent that does not existDELETE /v1/agents/999999/vm-checkpoints/c1 4045.0027 B pass
Answer 404 when restoring a checkpoint of an agent that does not existPOST /v1/agents/999999/vm-checkpoints/c1/restore 4041.0027 B pass
Answer 404 when forking an agent that does not existPOST /v1/agents/999999/fork 4041.0027 B pass
Answer 404 when moving an agent that does not existPOST /v1/agents/999999/move 4041.0025 B pass
Answer 409 when steering an agent that does not existPOST /v1/agents/999999/control 4091.0027 B pass
Answer 404 when restarting an agent that does not existPOST /v1/agents/999999/restart 4042.0027 B pass
Answer 404 when wiping an agent that does not existPOST /v1/agents/999999/wipe 4040.0027 B pass
Answer 404 when retiring an agent that does not existPOST /v1/agents/999999/retire 4041.0027 B pass
Answer 404 when putting an agent that does not exist to sleepPOST /v1/agents/999999/sleep 4041.0025 B pass
Answer 404 when waking an agent that does not existPOST /v1/agents/999999/wake 4041.0025 B pass
Answer 404 when stopping an agent that does not existPOST /v1/agents/999999/stop 4041.0025 B pass
Answer 404 when messaging an agent that does not existPOST /v1/agents/999999/tell 4041.0025 B pass
Answer 404 when chatting with an agent that does not existPOST /v1/agents/999999/chat 4040.0025 B pass
Answer 404 when assigning a task to an agent that does not existPOST /v1/agents/999999/assign 4041.0025 B pass
Answer 404 when cancelling the work of an agent that does not existPOST /v1/agents/999999/cancel 4041.0025 B pass
An agent that does not exist has the default limitsGET /v1/agents/999999/limits 2003.0056 B pass
Show the default permission mode for an agent that is not on the hubGET /v1/agents/999999/permissions 2001.0040 B pass
Refuse a permission mode that is not one of the threePUT /v1/agents/999999/permissions 4001.0077 B pass
Refuse a spawn of a role that does not existPOST /v1/agents 4002.0037 B pass
Refuse a spawn of a role whose id has capitalsPOST /v1/agents 4001.0034 B pass
Refuse a spawn of zero agentsPOST /v1/agents 4001.0032 B pass
Refuse a spawn of 17 agentsPOST /v1/agents 4001.0032 B pass
Refuse a spawn whose count is textPOST /v1/agents 4000.0082 B pass
Refuse a spawn with no rolePOST /v1/agents 4001.0061 B pass
Refuse a spawn with a model that has no providerPOST /v1/agents 4001.0074 B pass
Refuse a spawn on a node that does not existPOST /v1/agents 4001.0027 B pass
Refuse a spawn whose body is not JSONPOST /v1/agents 4001.0061 B pass
A spawn of an architect reaches noded and is refusedPOST /v1/agents 5022.00108 B pass
A spawn of the orchestrator reaches noded and is refusedPOST /v1/agents 5022.00108 B pass
Refuse an agent's hello without the internal tokenPOST /internal/v1/agents/999999/hello 4031.0043 B pass
Refuse an agent's hello with a wrong internal tokenPOST /internal/v1/agents/999999/hello 4031.0043 B pass
Refuse an agent's hello whose CID is not a numberPOST /internal/v1/agents/abc/hello 4001.0036 B pass
Refuse an agent's hello whose VM is not a numberPOST /internal/v1/agents/999999/hello 4001.0072 B pass
Refuse a GET of an agent's helloGET /internal/v1/agents/999999/hello 4051.0038 B pass
Refuse the limits of an agent whose id is not a numberGET /v1/agents/abc/limits 4001.0024 B pass
Refuse setting the permission mode of an agent that is not on the hubPUT /v1/agents/999999/permissions 4041.0025 B pass
The agent's VM says hello with the internal tokenPOST /internal/v1/agents/41001/hello 20010.055.0 KiB pass
A registered agent is listedGET /v1/agents 2001.00397 B pass
Read the registered agentGET /v1/agents/41001 2001.00395 B pass
A registered agent's context is emptyGET /v1/agents/41001/context 2002.00351 B pass
A registered agent's transcript is emptyGET /v1/agents/41001/transcript 2001.002 B pass
A registered agent has no limits setGET /v1/agents/41001/limits 2001.0056 B pass
A registered agent's permission mode is the defaultGET /v1/agents/41001/permissions 2002.0040 B pass
Make sure the agent is registered before it is configuredPOST /internal/v1/agents/41001/hello 2007.0055.0 KiB pass
Give the agent its own modelPATCH /v1/agents/41001 2003.00414 B pass
Refuse a model name with no providerPATCH /v1/agents/41001 4001.0065 B pass
Refuse a model that is not textPATCH /v1/agents/41001 4001.0042 B pass
Clear the agent's modelPATCH /v1/agents/41001 2006.00395 B pass
Refuse a rename whose body is not JSONPATCH /v1/agents/41001 4002.0055 B pass
Set the agent's permission mode to askPUT /v1/agents/41001/permissions 20021.027 B pass
Read the permission mode back, now set for this agentGET /v1/agents/41001/permissions 2001.0031 B pass
Refuse a permission mode that is not one of the threePUT /v1/agents/41001/permissions 4001.0077 B pass
Restore the permission mode to autonomousPUT /v1/agents/41001/permissions 20011.034 B pass
Set the agent's turn limitPOST /v1/agents/41001/control 2005.0082 B pass
Read the turn limit backGET /v1/agents/41001/limits 2001.0053 B pass
Refuse a compress threshold that is out of rangePOST /v1/agents/41001/control 4092.0067 B pass
Show the agent's control statePOST /v1/agents/41001/control 2003.00130 B pass
Refuse an unknown control actionPOST /v1/agents/41001/control 4091.0091 B pass
Refuse a control request with no actionPOST /v1/agents/41001/control 4090.0086 B pass
Refuse a steer when the agent has no running workPOST /v1/agents/41001/control 4090.0043 B pass
Refuse a steer with no textPOST /v1/agents/41001/control 4091.0028 B pass
Refuse a compress when the agent has no running workPOST /v1/agents/41001/control 4091.0043 B pass
Refuse extending turns when the agent has no running workPOST /v1/agents/41001/control 4091.0043 B pass
Refuse extending turns by zeroPOST /v1/agents/41001/control 4091.0050 B pass
Cancel an agent with no work in progressPOST /v1/agents/41001/cancel 2001.0019 B pass
Make sure the first agent is registeredPOST /internal/v1/agents/41001/hello 2006.0055.0 KiB pass
Register the second agent from its VMPOST /internal/v1/agents/41002/hello 2006.0055.0 KiB pass
Make sure the agent is registered before its work is refusedPOST /internal/v1/agents/41001/hello 2004.0055.0 KiB pass
Refuse an assignment of a task that does not existPOST /v1/agents/41001/assign 4041.0024 B pass
Refuse an assignment that names no taskPOST /v1/agents/41001/assign 4001.0064 B pass
Refuse to stop an agent whose node cannot be reachedPOST /v1/agents/41001/stop 5021.00101 B pass
Refuse a VM checkpoint of an agent with no VMPOST /v1/agents/41001/vm-checkpoints 4091.0046 B pass
List the VM checkpoints of an agent with no VMGET /v1/agents/41001/vm-checkpoints 4091.0046 B pass
Refuse restoring a checkpoint of an agent with no VMPOST /v1/agents/41001/vm-checkpoints/c1/restore 4091.0046 B pass
Refuse deleting a checkpoint of an agent with no VMDELETE /v1/agents/41001/vm-checkpoints/c1 4091.0046 B pass
Refuse forking an agent with no VMPOST /v1/agents/41001/fork 4091.0046 B pass
Refuse a fork of zero agentsPOST /v1/agents/41001/fork 4001.0028 B pass
Refuse a move to a node that does not existPOST /v1/agents/41001/move 4041.0032 B pass
Refuse a move that names no nodePOST /v1/agents/41001/move 4001.0061 B pass
Refuse putting an agent with no VM to sleepPOST /v1/agents/41001/sleep 4091.0046 B pass
Refuse waking an agent that is not asleepPOST /v1/agents/41001/wake 4091.0047 B pass
Refuse restarting an agent with no VMPOST /v1/agents/41001/restart 4093.0046 B pass
Refuse retiring an agent with no VMPOST /v1/agents/41001/retire 4091.0046 B pass
Refuse wiping an agent with no VMPOST /v1/agents/41001/wipe 4091.0046 B pass
Refuse a wipe whose body is not JSONPOST /v1/agents/41001/wipe 4001.0055 B pass
Make sure the agent is registered before its session endsPOST /internal/v1/agents/41001/hello 2004.0055.0 KiB pass
Refuse an agent's session-ended report without the internal tokenPOST /internal/v1/agents/41001/gone 4031.0043 B pass
Record that the agent's session has endedPOST /internal/v1/agents/41001/gone 2001.002 B pass
Read the agent offlineGET /v1/agents/41001 2001.00398 B pass
Refuse a chat message to an offline agentPOST /v1/agents/41001/chat 4091.0028 B pass
The agent's VM says hello againPOST /internal/v1/agents/41001/hello 2005.0055.0 KiB pass
The agent is idle after its hello againGET /v1/agents/41001 2001.00395 B pass
Make sure the first agent is registered before it is deletedPOST /internal/v1/agents/41001/hello 2005.0055.0 KiB pass
Make sure the peer is registered before it is deletedPOST /internal/v1/agents/41002/hello 2005.0055.0 KiB pass
Delete an agent and its runDELETE /v1/agents/41001 2001.0034 B pass
Delete the peer agentDELETE /v1/agents/41002 2001.0034 B pass
Refuse deleting an agent whose id is not a numberDELETE /v1/agents/abc 4001.0032 B pass
The deleted agent is off the rosterGET /v1/agents/41001 4041.0025 B pass
The deleted peer is off the rosterGET /v1/agents/41002 4041.0025 B pass
List the agent proposalsGET /v1/agent-proposals 2001.002 B pass
Refuse to reject a proposal that does not existPOST /v1/agent-proposals/ap-none/reject 4092.0031 B pass
Refuse to reject a proposal that does not exist when no reason is sentPOST /v1/agent-proposals/ap-none/reject 4090.0031 B pass
Refuse a reject whose body is not JSON for a proposal that does not existPOST /v1/agent-proposals/ap-none/reject 4092.0031 B pass
Refuse to approve a proposal that does not existPOST /v1/agent-proposals/ap-none/approve 4091.0031 B pass
Refuse an approval whose role is textPOST /v1/agent-proposals/ap-none/approve 4001.0073 B pass
Refuse an approval whose role has no titlePOST /v1/agent-proposals/ap-none/approve 4001.0043 B pass
Refuse an approval whose body is not JSON for a proposal that does not existPOST /v1/agent-proposals/ap-none/approve 4091.0031 B pass
governance47 requests
RequestCallStatusmsSizeResult
Refuse an agent's hello without the internal tokenPOST /internal/v1/agents/8601/hello 4031.0043 B pass
Register a test agent through the internal APIPOST /internal/v1/agents/8601/hello 2005.0055.0 KiB pass
Register a second test agent, which stays off any projectPOST /internal/v1/agents/8602/hello 2004.0055.0 KiB pass
Open a project for the board testsPOST /v1/projects 20110.0663 B pass
Post to the board as the owner, for the projectPOST /v1/board/posts 2011.00245 B pass
Post to the board as an agent on a projectPOST /v1/board 2011.00244 B pass
Answer 404 for a post by an unknown agentPOST /v1/board 4041.0040 B pass
Refuse an agent's post whose body is not an objectPOST /v1/board 4001.0095 B pass
Refuse an owner post with an empty bodyPOST /v1/board/posts 4001.0034 B pass
Refuse an owner post that mentions no agentPOST /v1/board/posts 4001.0081 B pass
Refuse an owner post for an unknown projectPOST /v1/board/posts 4003.0030 B pass
Read the board for the project: both posts are thereGET /v1/board?project=pr4 2001.00437 B pass
Comment as the owner on the agent's postPOST /v1/board/p2/comments 2011.00135 B pass
Refuse an empty commentPOST /v1/board/p2/comments 4001.0039 B pass
Answer 404 for a comment on an unknown postPOST /v1/board/p-none/comments 4041.0026 B pass
Read the board: the comment is on the agent's postGET /v1/board 2002.00816 B pass
Mark the board read by an agent up to its own postPOST /v1/board/read 2001.0042 B pass
Refuse a read up to a post that is past the newestPOST /v1/board/read 4091.0052 B pass
Answer 404 for a read by an unknown agentPOST /v1/board/read 4041.0040 B pass
Pause the board's deliveries for the projectPOST /v1/board/pause 2001.00101 B pass
Post as an agent while the project's deliveries are paused: storedPOST /v1/board 2011.00229 B pass
Post as the owner while the project's deliveries are paused: storedPOST /v1/board/posts 2011.00240 B pass
Refuse a pause for an unknown projectPOST /v1/board/pause 4001.0030 B pass
Refuse a pause that does not say on or offPOST /v1/board/pause 4001.0072 B pass
Resume the project's deliveriesPOST /v1/board/pause 2001.0098 B pass
Pause the whole board's deliveriesPOST /v1/board/pause 2003.0094 B pass
Resume the whole board's deliveriesPOST /v1/board/pause 2001.0097 B pass
Export the project's board thread as MarkdownGET /v1/board/export 2001.00531 B pass
Export the project's board thread as JSONGET /v1/board/export?format=json 2000.001.1 KiB pass
Refuse an export in a format other than md or jsonGET /v1/board/export?project=pr4&format=xml 4001.0046 B pass
Refuse an export of an unknown projectGET /v1/board/export?project=pr-none 4001.0030 B pass
Mark the first test agent gonePOST /internal/v1/agents/8601/gone 2002.002 B pass
Mark the second test agent gonePOST /internal/v1/agents/8602/gone 2001.002 B pass
Register a test agent that holds no council seatPOST /internal/v1/agents/8603/hello 20010.055.0 KiB pass
Open a project for the motion testsPOST /v1/projects 20126.0668 B pass
Mark the test agent gonePOST /internal/v1/agents/8603/gone 2001.002 B pass
List the approvals on an empty hubGET /v1/approvals 2001.002 B pass
Register agent 7 through its VM's hello, for the permission mode checksPOST /internal/v1/agents/7/hello 2004.0055.0 KiB pass
Read an agent's permission mode before any changeGET /v1/agents/7/permissions 2002.0040 B pass
Set an agent's permission mode to read_onlyPUT /v1/agents/7/permissions 20023.033 B pass
Read back the permission mode after the changeGET /v1/agents/7/permissions 2001.0037 B pass
Refuse a permission mode that is not one of the threePUT /v1/agents/7/permissions 4002.0077 B pass
Decide an approval that does not existPOST /v1/approvals/no-such-approval 4041.0028 B pass
Delete agent 7 again, so later folders don't see itDELETE /v1/agents/7 2001.0034 B pass
Refuse a default decision model without a provider and modelPUT /v1/decisions/default 4001.0068 B pass
List the agent proposals on an empty hubGET /v1/agent-proposals 2001.002 B pass
Approve an agent proposal that does not existPOST /v1/agent-proposals/no-such-proposal/approve 4091.0040 B pass
foundry158 requests
RequestCallStatusmsSizeResult
List the recipes and read the seeded rung recipe's pinGET /v1/foundry/recipes 2001.00541 B pass
Refuse a vet whose commit is not hexPOST /v1/foundry/recipes/rung-predictor@1/vet 4001.0044 B pass
Refuse a vet with no commitPOST /v1/foundry/recipes/rung-predictor@1/vet 4001.0044 B pass
Refuse a vet of a recipe that does not existPOST /v1/foundry/recipes/no-such-recipe@1/vet 4041.0038 B pass
Refuse to vet the seeded dev recipe at another commitPOST /v1/foundry/recipes/rung-predictor@1/vet 4031.0060 B pass
Vet the seeded dev recipe at its own pinPOST /v1/foundry/recipes/rung-predictor@1/vet 2001.00535 B pass
The vet is kept in the recipe listGET /v1/foundry/recipes 2001.00537 B pass
Upload 20 rows of two classes as a datasetPOST /v1/foundry/datasets/upload?name=t-ds-clean 20119.0483 B pass
List the datasets and find the clean uploadGET /v1/foundry/datasets 2005.00485 B pass
Upload rows with a column the format does not knowPOST /v1/foundry/datasets/upload?name=t-ds-unknown 201157504 B pass
Upload an empty body as a datasetPOST /v1/foundry/datasets/upload?name=t-ds-empty 20114.0430 B pass
Upload rows that all carry one labelPOST /v1/foundry/datasets/upload?name=t-ds-oneclass 20127.0507 B pass
Refuse an upload with a line that is not JSONPOST /v1/foundry/datasets/upload?name=t-ds-bad 4001.0063 B pass
Refuse an upload row with no timestampPOST /v1/foundry/datasets/upload?name=t-ds-bad 4002.0056 B pass
Refuse an upload row with an unknown labelPOST /v1/foundry/datasets/upload?name=t-ds-bad 4002.0066 B pass
Refuse an upload row whose number is a stringPOST /v1/foundry/datasets/upload?name=t-ds-bad 4002.0055 B pass
Refuse an upload with no name and a body that is not JSONPOST /v1/foundry/datasets/upload 4001.0051 B pass
Refuse a named upload from a body with no name or pathPOST /v1/foundry/datasets/upload 4002.0041 B pass
Refuse an upload from a relative pathPOST /v1/foundry/datasets/upload 4002.0028 B pass
Refuse an upload from an absolute path that is not therePOST /v1/foundry/datasets/upload 4001.0085 B pass
An upload with an empty name takes a dated namePOST /v1/foundry/datasets/upload?name= 20117.0510 B pass
Export a cascade dataset from the plaza's recordsPOST /v1/foundry/datasets 20115.02.4 KiB pass
Refuse an export of an unknown kindPOST /v1/foundry/datasets 4005.0076 B pass
Refuse an export whose body is not JSONPOST /v1/foundry/datasets 4001.0058 B pass
An export with no name is kept (the name is optional)POST /v1/foundry/datasets 20128.02.4 KiB pass
The export appears in the dataset listGET /v1/foundry/datasets 2001.003.9 KiB pass
Upload a clean dataset for the jobPOST /v1/foundry/datasets/upload?name=t-job-clean 20121.0484 B pass
Plan a job with no GPU machines and see it refusedPOST /v1/foundry/plan 4221.00131 B pass
Submit the job and see it refused without GPU machinesPOST /v1/foundry/jobs 4222.00131 B pass
Read the refused job: there is no such jobGET /v1/foundry/jobs/t-job-nogpu 4041.0023 B pass
The job list does not hold the refused jobGET /v1/foundry/jobs 2001.002 B pass
Cancel the refused job: there is no such jobPOST /v1/foundry/jobs/t-job-nogpu/cancel 4041.0023 B pass
Resubmit the refused id: it is still free, so the refusal repeatsPOST /v1/foundry/jobs 4222.00131 B pass
Upload a dataset with a column the format does not knowPOST /v1/foundry/datasets/upload?name=t-job-unknown 20121.0505 B pass
Plan a job on the flagged dataset and see it refusedPOST /v1/foundry/plan 4091.0093 B pass
Submit a job on the flagged dataset and see it refusedPOST /v1/foundry/jobs 4091.0093 B pass
The flagged job is not recordedGET /v1/foundry/jobs/t-job-taint 4043.0023 B pass
Upload an empty datasetPOST /v1/foundry/datasets/upload?name=t-job-empty 20116.0431 B pass
Submit a job on the empty dataset and see it refusedPOST /v1/foundry/jobs 4092.0081 B pass
The empty job is not recordedGET /v1/foundry/jobs/t-job-empty 4041.0023 B pass
Upload a dataset whose rows all carry one labelPOST /v1/foundry/datasets/upload?name=t-job-oneclass 20127.0508 B pass
Submit a job on the one-label dataset and see it refusedPOST /v1/foundry/jobs 4091.0088 B pass
Refuse a job document that is not a JSON objectPOST /v1/foundry/jobs 4001.0036 B pass
Refuse a job body that is not JSONPOST /v1/foundry/jobs 4002.0063 B pass
Refuse a job with no recipePOST /v1/foundry/jobs 4001.0043 B pass
Refuse a recipe name with capital lettersPOST /v1/foundry/jobs 4001.0049 B pass
Refuse a job with no datasetsPOST /v1/foundry/jobs 4002.0056 B pass
Refuse a job with an empty dataset listPOST /v1/foundry/jobs 4001.0056 B pass
Refuse a dataset id that is not a stringPOST /v1/foundry/jobs 4001.0032 B pass
Refuse a budget of zero GPU-hoursPOST /v1/foundry/jobs 4001.0048 B pass
Refuse a negative budgetPOST /v1/foundry/jobs 4003.0048 B pass
Refuse a budget over the eight GPU-hour capPOST /v1/foundry/jobs 4031.0057 B pass
Refuse an unknown job fieldPOST /v1/foundry/jobs 4001.0042 B pass
Refuse a job id with a spacePOST /v1/foundry/jobs 4001.0087 B pass
Refuse a job id of forty-one charactersPOST /v1/foundry/jobs 4001.0087 B pass
Refuse an unknown modePOST /v1/foundry/jobs 4002.0042 B pass
Refuse an unknown targetPOST /v1/foundry/jobs 4001.0044 B pass
Refuse an export format other than onnxPOST /v1/foundry/jobs 4001.0030 B pass
Refuse train overrides that are not an objectPOST /v1/foundry/jobs 4001.0043 B pass
Refuse a device block with a string where a number goesPOST /v1/foundry/jobs 4001.0063 B pass
Refuse a recipe that does not existPOST /v1/foundry/jobs 4041.0038 B pass
Refuse a dataset that does not existPOST /v1/foundry/jobs 4041.0035 B pass
Refuse a plan that is not a JSON objectPOST /v1/foundry/plan 4001.0036 B pass
Cancel a job that does not existPOST /v1/foundry/jobs/tj-0000000000/cancel 4041.0023 B pass
Cancel a job id with a space in itPOST /v1/foundry/jobs/bad id/cancel 4041.0023 B pass
List the accelerators: every device is free, nothing is allocatedGET /v1/foundry/devices 2001.0015 B pass
Call the hub of a loose job that does not exist (init)POST /v1/foundry/jobs/t-job-nohub/hub/init 4041.0037 B pass
Call the hub of a loose job that does not exist (state)GET /v1/foundry/jobs/t-job-nohub/hub/state 4041.0037 B pass
Call the hub of a loose job that does not exist (round)POST /v1/foundry/jobs/t-job-nohub/hub/round 4041.0037 B pass
Call the hub of a loose job that does not exist (health)GET /v1/foundry/jobs/t-job-nohub/hub/health 4041.0037 B pass
List the models: none of ours yetGET /v1/foundry/models 2002.0013 B pass
List the base modelsGET /v1/foundry/models?kind=base 2002.0013 B pass
Refuse a model kind other than baseGET /v1/foundry/models?kind=other 4001.0044 B pass
Read a model that does not existGET /v1/foundry/models/t-no-model 4041.0025 B pass
Refuse a model import from a relative pathPOST /v1/foundry/models/import 4000.0028 B pass
Refuse a model import from a directory that is not therePOST /v1/foundry/models/import 4002.0075 B pass
Refuse a model import with no pathPOST /v1/foundry/models/import 4001.0061 B pass
Refuse a model import whose body is not JSONPOST /v1/foundry/models/import 4001.0055 B pass
Shadow a model that does not existPOST /v1/foundry/models/t-no-model/shadow 4041.0031 B pass
Promote a model that does not existPOST /v1/foundry/models/t-no-model/promote 4043.0031 B pass
Retire a model that does not existPOST /v1/foundry/models/t-no-model/retire 4042.0031 B pass
Invoke a model that does not exist is refused and the error names itPOST /v1/foundry/models/t-no-model/invoke 4042.0031 B pass
Re-derive a model that does not existPOST /v1/foundry/models/t-no-model/rederive 4041.0025 B pass
Register the shadow-promote model from its directoryPOST /v1/foundry/models/import 20022.01.6 KiB pass
Register the same model directory againPOST /v1/foundry/models/import 4001.0075 B pass
Invoke a trained model: only shadow and promoted models runPOST /v1/foundry/models/t-shadow-promote-314457fd/invoke 4001.0091 B pass
Promote a trained model: refused, it must be shadow firstPOST /v1/foundry/models/t-shadow-promote-314457fd/promote 4092.0081 B pass
Move a trained model to shadowPOST /v1/foundry/models/t-shadow-promote-314457fd/shadow 2001.001.6 KiB pass
Move a shadow model to shadow again: refusedPOST /v1/foundry/models/t-shadow-promote-314457fd/shadow 4091.0081 B pass
Invoke a shadow model on a valid inputPOST /v1/foundry/models/t-shadow-promote-314457fd/invoke 2002.00129 B pass
Invoke a shadow model with a feature missingPOST /v1/foundry/models/t-shadow-promote-314457fd/invoke 4002.0046 B pass
Invoke a shadow model with a feature that is a stringPOST /v1/foundry/models/t-shadow-promote-314457fd/invoke 4001.0046 B pass
Promote a shadow model to a model agentPOST /v1/foundry/models/t-shadow-promote-314457fd/promote 2001.001.6 KiB pass
Promote a promoted model again: refusedPOST /v1/foundry/models/t-shadow-promote-314457fd/promote 4091.0082 B pass
Shadow a promoted model: refusedPOST /v1/foundry/models/t-shadow-promote-314457fd/shadow 4091.0083 B pass
Invoke a promoted modelPOST /v1/foundry/models/t-shadow-promote-314457fd/invoke 2001.00129 B pass
Read the promoted model with its agent cidGET /v1/foundry/models/t-shadow-promote-314457fd 2002.001.6 KiB pass
Retire the promoted modelPOST /v1/foundry/models/t-shadow-promote-314457fd/retire 2001.001.6 KiB pass
Retire a retired model again: refusedPOST /v1/foundry/models/t-shadow-promote-314457fd/retire 4091.0056 B pass
Invoke a retired model: refusedPOST /v1/foundry/models/t-shadow-promote-314457fd/invoke 4002.0091 B pass
Shadow a retired model: refusedPOST /v1/foundry/models/t-shadow-promote-314457fd/shadow 4091.0082 B pass
Register the retire-trained model from its directoryPOST /v1/foundry/models/import 2003.001.6 KiB pass
Invoke a trained model: refusedPOST /v1/foundry/models/t-retire-trained-314457fd/invoke 4002.0091 B pass
Promote a trained model: refusedPOST /v1/foundry/models/t-retire-trained-314457fd/promote 4091.0081 B pass
Retire a trained model (the deny branch)POST /v1/foundry/models/t-retire-trained-314457fd/retire 2001.001.6 KiB pass
Move a retired model to shadow: refusedPOST /v1/foundry/models/t-retire-trained-314457fd/shadow 4091.0082 B pass
Promote a retired model: refusedPOST /v1/foundry/models/t-retire-trained-314457fd/promote 4091.0081 B pass
Retire a retired model again: refusedPOST /v1/foundry/models/t-retire-trained-314457fd/retire 4091.0056 B pass
Read the retired modelGET /v1/foundry/models/t-retire-trained-314457fd 2001.001.6 KiB pass
Read the Hugging Face status with no tokenGET /v1/foundry/hf/status 2002.00116 B pass
Remove a token that was never setDELETE /v1/foundry/hf/token 2001.0022 B pass
Refuse a token with a space in itPUT /v1/foundry/hf/token 4001.0053 B pass
Refuse an empty tokenPUT /v1/foundry/hf/token 4001.0053 B pass
Refuse a token with a line break in itPUT /v1/foundry/hf/token 4002.0053 B pass
Refuse a token longer than 512 charactersPUT /v1/foundry/hf/token 4002.0053 B pass
Refuse a token that is not a stringPUT /v1/foundry/hf/token 4001.0086 B pass
Refuse a token body that is not JSONPUT /v1/foundry/hf/token 4001.0055 B pass
The status still shows no token after the refusalsGET /v1/foundry/hf/status 2001.00116 B pass
Save a Hugging Face token (a fake test value)PUT /v1/foundry/hf/token 20020.021 B pass
The status shows a token is setGET /v1/foundry/hf/status 2004.00115 B pass
Replace the saved tokenPUT /v1/foundry/hf/token 20017.021 B pass
Remove the saved tokenDELETE /v1/foundry/hf/token 20017.022 B pass
The status shows no token after removalGET /v1/foundry/hf/status 2001.00116 B pass
Remove the token again: still no tokenDELETE /v1/foundry/hf/token 2001.0022 B pass
Read the owner's fetch block list to restore it laterGET /v1/settings 2001.001.2 KiB pass
Block huggingface.co for the owner's fetch (no network is ever used)PUT /v1/settings 2002.001.2 KiB pass
Refuse a search with a limit of zeroGET /v1/foundry/hf/models?search=t-llama&limit=0 4002.0044 B pass
Refuse a search with a limit over the maximumGET /v1/foundry/hf/models?search=t-llama&limit=101 4001.0046 B pass
Refuse a search with a limit that is not a numberGET /v1/foundry/hf/models?search=t-llama&limit=ten 4001.0046 B pass
A search is refused while huggingface.co is blockedGET /v1/foundry/hf/models?search=t-llama 4033.0061 B pass
Refuse a model id with three partsGET /v1/foundry/hf/models/a/b/c 4001.0070 B pass
Refuse a revision with two dotsGET /v1/foundry/hf/models/t-org/t-model?revision=a..b 4001.0038 B pass
A model detail is refused while huggingface.co is blockedGET /v1/foundry/hf/models/t-org/t-model 40313.0106 B pass
Refuse an import of a repo id with a spacePOST /v1/foundry/hf/import 4003.0072 B pass
Refuse an import kind that is neither base nor servablePOST /v1/foundry/hf/import 4001.0054 B pass
Refuse an import whose file path climbs out of the repoPOST /v1/foundry/hf/import 4001.0057 B pass
Refuse an import of an absolute file pathPOST /v1/foundry/hf/import 4001.0055 B pass
Refuse an import revision with two dotsPOST /v1/foundry/hf/import 4001.0038 B pass
Refuse an import body that is not JSONPOST /v1/foundry/hf/import 4001.0055 B pass
A base import is refused while huggingface.co is blocked (nothing is downloaded)POST /v1/foundry/hf/import 40355.0106 B pass
A servable import is refused while huggingface.co is blocked (nothing is downloaded)POST /v1/foundry/hf/import 40318.0106 B pass
No Hugging Face import is listed after the refusalsGET /v1/foundry/hf/imports 2001.0014 B pass
Read an import number that does not existGET /v1/foundry/hf/imports/999 4041.0026 B pass
Read an import number that is not a numberGET /v1/foundry/hf/imports/abc 4000.0052 B pass
Remove an import number that does not existDELETE /v1/foundry/hf/imports/999 4041.0026 B pass
Remove an import number that is not a numberDELETE /v1/foundry/hf/imports/abc 4001.0052 B pass
Re-derive a model that does not exist (Hugging Face side)POST /v1/foundry/models/t-no-model/rederive 4041.0025 B pass
A model detail with the slash encoded is refused while huggingface.co is blockedGET /v1/foundry/hf/models/t-org/t-model 40321.0106 B pass
Restore the owner's fetch block listPUT /v1/settings 2001.001.2 KiB pass
List the datasetsGET /v1/foundry/datasets 2001.001.9 KiB pass
List the jobs (empty on a fresh hub)GET /v1/foundry/jobs 2001.002 B pass
Get a job that does not existGET /v1/foundry/jobs/no-such-job 4041.0023 B pass
List the events of a job that does not existGET /v1/foundry/jobs/no-such-job/events?after=0 4041.0023 B pass
Export a dataset from a body that is not JSONPOST /v1/foundry/datasets 4001.0058 B pass
Upload a dataset with no file namedPOST /v1/foundry/datasets/upload 4001.0041 B pass
List the IDE's workspaces (only project repos on a fresh hub)GET /v1/ide/workspaces 2002.00713 B pass
Read the checkpoints of a workspace that does not existGET /v1/ide/workspaces/repo:no-such-repo@main/checkpoints 4041.0047 B pass
Read the checkpoints of a malformed workspace idGET /v1/ide/workspaces/not-a-workspace/checkpoints 4002.0066 B pass
e2b170 requests
RequestCallStatusmsSizeResult
Create a live E2B key for the later foldersPOST /v1/e2b/keys 20028.0130 B pass
Create a key with a unicode label, trimmedPOST /v1/e2b/keys 20022.0136 B pass
Refuse a key label that is only spacesPOST /v1/e2b/keys 4001.0088 B pass
Refuse a key label of 81 charactersPOST /v1/e2b/keys 4005.0088 B pass
List the keys without their secretsGET /v1/e2b/keys 2001.00172 B pass
Accept an E2B key sent as a Bearer tokenGET /e2b/sandboxes 2001.002 B pass
Refuse an E2B key that was never issuedGET /e2b/sandboxes 4012.0092 B pass
Revoke the unicode keyDELETE /v1/e2b/keys/e2k-cf3e55deb192 20010.011 B pass
Refuse a revoked E2B keyGET /e2b/sandboxes 4012.0092 B pass
Refuse to revoke the same key twiceDELETE /v1/e2b/keys/e2k-cf3e55deb192 4042.0081 B pass
The owner list no longer shows the revoked keyGET /v1/e2b/keys 2002.0088 B pass
Refuse a sandbox the node cannot startPOST /e2b/sandboxes 5032.00148 B pass
Refuse a v2 sandbox the node cannot startPOST /e2b/v2/sandboxes 5031.00148 B pass
Accept a Bearer key on create, then refuse for the nodePOST /e2b/sandboxes 5031.00148 B pass
Refuse a create without an E2B keyPOST /e2b/sandboxes 4011.0092 B pass
Refuse a create with a key that was never issuedPOST /e2b/sandboxes 4010.0092 B pass
Accept the longest timeout a sandbox may havePOST /e2b/sandboxes 5031.00148 B pass
Refuse a timeout of zeroPOST /e2b/sandboxes 4003.0090 B pass
Refuse a timeout over a dayPOST /e2b/sandboxes 4001.0090 B pass
Refuse a timeout that is not a numberPOST /e2b/sandboxes 4002.00129 B pass
Refuse a create without a templatePOST /e2b/sandboxes 4002.00121 B pass
Refuse a blank template idPOST /e2b/sandboxes 4001.00121 B pass
Refuse a template id longer than 128 charactersPOST /e2b/sandboxes 4001.00121 B pass
Refuse a create with a truncated bodyPOST /e2b/sandboxes 4001.00111 B pass
Refuse volume mounts on a sandboxPOST /e2b/sandboxes 4002.00136 B pass
Refuse network rules on a sandboxPOST /e2b/sandboxes 4002.00143 B pass
Refuse an egress proxy on a sandboxPOST /e2b/sandboxes 4002.00140 B pass
Refuse a masked request host on a sandboxPOST /e2b/sandboxes 4001.0093 B pass
Refuse an allowOut entry that is not a hostPOST /e2b/sandboxes 4001.00137 B pass
Refuse a denyOut entry that names a hostPOST /e2b/sandboxes 4001.00128 B pass
Refuse a denyOut block with a prefix over 32POST /e2b/sandboxes 4001.00128 B pass
Refuse a metadata key that holds an equals signPOST /e2b/sandboxes 4004.0090 B pass
Refuse a metadata value over 1024 charactersPOST /e2b/sandboxes 4001.00104 B pass
Refuse a metadata key with a control characterPOST /e2b/sandboxes 4001.00126 B pass
Accept an egress policy with no internet, then refuse for the nodePOST /e2b/v2/sandboxes 5031.00148 B pass
Refuse an unknown sandbox state in the listGET /e2b/v2/sandboxes?state=frozen 4001.0080 B pass
List running and paused sandboxes by a filter no sandbox hasGET /e2b/v2/sandboxes?state=running,paused&metadata=e2bnone%3Dyes 2001.002 B pass
Refuse a metadata filter that is not key=valueGET /e2b/sandboxes?metadata=novalue 4002.00100 B pass
List the running sandboxes by a filter no sandbox hasGET /e2b/sandboxes?metadata=e2bnone%3Dyes 2001.002 B pass
List the snapshotsGET /e2b/snapshots 2001.002 B pass
Refuse the metrics of several sandboxes without ids (sandbox_ids is required)GET /e2b/sandboxes/metrics 4001.0079 B pass
Answer the metrics of unknown sandboxes with an empty mapGET /e2b/sandboxes/metrics?sandbox_ids=sbe2bnone1,sbe2bnone2 2001.0016 B pass
Refuse the metrics of more than 100 sandboxesGET /e2b/sandboxes/metrics?sandbox_ids=sbe2bmany000,sbe2bmany001,sbe2bmany002,sbe2bmany003,sbe2bmany004,sbe2bmany005,sbe2bmany006,sbe2bmany007,sbe2bmany008,sbe2bmany009,sbe2bmany010,sbe2bmany011,sbe2bmany012,sbe2bmany013,sbe2bmany014,sbe2bmany015,sbe2bmany016,sbe2bmany017,sbe2bmany018,sbe2bmany019,sbe2bmany020,sbe2bmany021,sbe2bmany022,sbe2bmany023,sbe2bmany024,sbe2bmany025,sbe2bmany026,sbe2bmany027,sbe2bmany028,sbe2bmany029,sbe2bmany030,sbe2bmany031,sbe2bmany032,sbe2bmany033,sbe2bmany034,sbe2bmany035,sbe2bmany036,sbe2bmany037,sbe2bmany038,sbe2bmany039,sbe2bmany040,sbe2bmany041,sbe2bmany042,sbe2bmany043,sbe2bmany044,sbe2bmany045,sbe2bmany046,sbe2bmany047,sbe2bmany048,sbe2bmany049,sbe2bmany050,sbe2bmany051,sbe2bmany052,sbe2bmany053,sbe2bmany054,sbe2bmany055,sbe2bmany056,sbe2bmany057,sbe2bmany058,sbe2bmany059,sbe2bmany060,sbe2bmany061,sbe2bmany062,sbe2bmany063,sbe2bmany064,sbe2bmany065,sbe2bmany066,sbe2bmany067,sbe2bmany068,sbe2bmany069,sbe2bmany070,sbe2bmany071,sbe2bmany072,sbe2bmany073,sbe2bmany074,sbe2bmany075,sbe2bmany076,sbe2bmany077,sbe2bmany078,sbe2bmany079,sbe2bmany080,sbe2bmany081,sbe2bmany082,sbe2bmany083,sbe2bmany084,sbe2bmany085,sbe2bmany086,sbe2bmany087,sbe2bmany088,sbe2bmany089,sbe2bmany090,sbe2bmany091,sbe2bmany092,sbe2bmany093,sbe2bmany094,sbe2bmany095,sbe2bmany096,sbe2bmany097,sbe2bmany098,sbe2bmany099,sbe2bmany100 4001.0079 B pass
Refuse to end a sandbox that does not existDELETE /e2b/sandboxes/sbffffffffffffffff 4042.0087 B pass
Refuse to set the end of a sandbox that does not existPOST /e2b/sandboxes/sbffffffffffffffff/timeout 4041.0087 B pass
Refuse a timeout without a valuePOST /e2b/sandboxes/sbffffffffffffffff/timeout 4003.0075 B pass
Refuse a negative timeoutPOST /e2b/sandboxes/sbffffffffffffffff/timeout 4002.0090 B pass
Refuse to extend a sandbox that does not existPOST /e2b/sandboxes/sbffffffffffffffff/refreshes 4041.0087 B pass
Refuse a refresh longer than an hourPOST /e2b/sandboxes/sbffffffffffffffff/refreshes 4001.0090 B pass
Refuse to pause a sandbox that does not existPOST /e2b/sandboxes/sbffffffffffffffff/pause 4042.0087 B pass
Refuse to resume a sandbox that does not existPOST /e2b/sandboxes/sbffffffffffffffff/resume 4041.0087 B pass
Refuse a v1 connect to a sandbox that does not existPOST /e2b/sandboxes/sbffffffffffffffff/connect 4042.0087 B pass
Refuse a v1 connect without a timeoutPOST /e2b/sandboxes/sbffffffffffffffff/connect 4001.0075 B pass
Refuse a v2 connect to a sandbox that does not existPOST /e2b/v2/sandboxes/sbffffffffffffffff/connect 4041.0087 B pass
Refuse the metrics of a sandbox that does not existGET /e2b/sandboxes/sbffffffffffffffff/metrics 4042.0087 B pass
Refuse the v2 logs of a sandbox that does not existGET /e2b/v2/sandboxes/sbffffffffffffffff/logs?limit=10 4041.0087 B pass
Refuse the v1 logs of a sandbox that does not existGET /e2b/sandboxes/sbffffffffffffffff/logs?start=0 4041.0087 B pass
Refuse to replace the network rules of a sandbox that does not existPUT /e2b/sandboxes/sbffffffffffffffff/network 4041.0087 B pass
Refuse a network rule that is not an address on denyPUT /e2b/sandboxes/sbffffffffffffffff/network 4003.00126 B pass
Refuse a snapshot of a sandbox that does not existPOST /e2b/sandboxes/sbffffffffffffffff/snapshots 4041.0087 B pass
Refuse a snapshot name with a control characterPOST /e2b/sandboxes/sbffffffffffffffff/snapshots 4002.0097 B pass
Refuse a fork of a sandbox that does not existPOST /e2b/sandboxes/sbffffffffffffffff/fork 4041.0087 B pass
Refuse a fork of nine sandboxesPOST /e2b/sandboxes/sbffffffffffffffff/fork 4001.0076 B pass
Refuse a fork of no sandboxPOST /e2b/sandboxes/sbffffffffffffffff/fork 4001.0076 B pass
Refuse to delete a template that does not existDELETE /e2b/templates/e2b-nope-tmpl 4041.0084 B pass
Refuse the owner's end of a sandbox that does not existDELETE /v1/e2b/sandboxes/sbffffffffffffffff 4041.0087 B pass
Refuse the owner's pause of a sandbox that does not existPOST /v1/e2b/sandboxes/sbffffffffffffffff/pause 4041.0087 B pass
Refuse the owner's resume of a sandbox that does not existPOST /v1/e2b/sandboxes/sbffffffffffffffff/resume 4041.0087 B pass
Refuse a sandbox id that is not an id at allGET /e2b/sandboxes/SB-not-an-id 4041.0081 B pass
Request a build for the held checksPOST /e2b/v3/templates 20245.0174 B pass
Hold the plaza with STOP ALLPOST /v1/plaza/stop 2002.00100 B pass
Refuse a sandbox while the plaza is heldPOST /e2b/sandboxes 4091.00118 B pass
Refuse a v2 sandbox while the plaza is heldPOST /e2b/v2/sandboxes 4092.00118 B pass
Refuse a fork while held, before the sandbox is looked upPOST /e2b/sandboxes/sbffffffffffffffff/fork 4091.00118 B pass
Refuse a build start while the plaza is heldPOST /e2b/v2/templates/5dfaa8aa3688b587141f/builds/b2d60ebe-3451-42f2-9f91-75ae5815ad66 4091.00118 B pass
Leave the build waiting after a refused startGET /e2b/templates/5dfaa8aa3688b587141f/builds/b2d60ebe-3451-42f2-9f91-75ae5815ad66/status 2000.00339 B pass
Release the STOP ALL holdPOST /v1/plaza/resume 2001.0080 B pass
Reach the node again after the releasePOST /e2b/sandboxes 5031.00148 B pass
Start the build after the releasePOST /e2b/v2/templates/5dfaa8aa3688b587141f/builds/b2d60ebe-3451-42f2-9f91-75ae5815ad66 20246.02 B pass
Read the held build as failed at its baseGET /e2b/templates/5dfaa8aa3688b587141f/builds/b2d60ebe-3451-42f2-9f91-75ae5815ad66/status 2002.00907 B pass
Delete the held templateDELETE /e2b/templates/5dfaa8aa3688b587141f 20426.00 B pass
Request a build of a new templatePOST /e2b/v3/templates 2027.00171 B pass
Read the new build as waitingGET /e2b/templates/441a772d82c84fbd9e3a/builds/494a64f1-7774-4680-8a26-a95a58980442/status 2002.00339 B pass
Find the template by its aliasGET /e2b/templates/aliases/e2b-fail-tmpl 2001.0052 B pass
Refuse an alias no template hasGET /e2b/templates/aliases/e2b-no-such-tmpl 4041.0087 B pass
Show the waiting build in the owner's listGET /v1/e2b/templates 2003.00344 B pass
Ask for an upload link for the archiveGET /e2b/templates/441a772d82c84fbd9e3a/files/abababababababababababababababababababababababababababababababab 2011.00250 B pass
Refuse an upload link for a file hash that is not hexGET /e2b/templates/441a772d82c84fbd9e3a/files/not-a-hash 4001.0085 B pass
Refuse an upload without its link tokenPUT /e2b/templates/441a772d82c84fbd9e3a/files/abababababababababababababababababababababababababababababababab 4032.00106 B pass
Upload the archive with its link tokenPUT /e2b/templates/441a772d82c84fbd9e3a/files/abababababababababababababababababababababababababababababababab 20014.02 B pass
Refuse a second upload on a spent linkPUT /e2b/templates/441a772d82c84fbd9e3a/files/abababababababababababababababababababababababababababababababab 4030.00106 B pass
Show the archive as present once uploadedGET /e2b/templates/441a772d82c84fbd9e3a/files/abababababababababababababababababababababababababababababababab 2011.00249 B pass
Start the build with a copied archive and a commandPOST /e2b/v2/templates/441a772d82c84fbd9e3a/builds/494a64f1-7774-4680-8a26-a95a58980442 20220.02 B pass
Refuse a second start of the same buildPOST /e2b/v2/templates/441a772d82c84fbd9e3a/builds/494a64f1-7774-4680-8a26-a95a58980442 4091.00122 B pass
Read the build while it runs or has failedGET /e2b/templates/441a772d82c84fbd9e3a/builds/494a64f1-7774-4680-8a26-a95a58980442/status 2001.00907 B pass
Read the build as failed at its baseGET /e2b/templates/441a772d82c84fbd9e3a/builds/494a64f1-7774-4680-8a26-a95a58980442/status 2001.00907 B pass
Refuse a tag on a build that failedPOST /e2b/templates/tags 4041.00104 B pass
Refuse a start of the failed buildPOST /e2b/v2/templates/441a772d82c84fbd9e3a/builds/494a64f1-7774-4680-8a26-a95a58980442 4091.00122 B pass
Show the failed build and its reason in the owner's listGET /v1/e2b/templates 2003.00471 B pass
Delete the failed templateDELETE /e2b/templates/441a772d82c84fbd9e3a 2041170 B pass
Refuse a second delete of the templateDELETE /e2b/templates/441a772d82c84fbd9e3a 4042.0091 B pass
The alias is gone with the templateGET /e2b/templates/aliases/e2b-fail-tmpl 4041.0084 B pass
The build's status is gone with the templateGET /e2b/templates/441a772d82c84fbd9e3a/builds/494a64f1-7774-4680-8a26-a95a58980442/status 4041.0091 B pass
The owner's list no longer has the templateGET /v1/e2b/templates 2001.0016 B pass
Request a build named with a tag, and more tagsPOST /e2b/v3/templates 20221.0180 B pass
Request a second build of the same templatePOST /e2b/v3/templates 2029.00174 B pass
The owner sees both waiting buildsGET /v1/e2b/templates 2001.00523 B pass
Refuse a tag on a build that is not readyPOST /e2b/templates/tags 4042.00104 B pass
Refuse a tag on a template that does not existPOST /e2b/templates/tags 4041.0084 B pass
Refuse a tag with a space in itPOST /e2b/templates/tags 4001.00116 B pass
Refuse an empty list of tagsPOST /e2b/templates/tags 4001.0073 B pass
Refuse more than 32 tagsPOST /e2b/templates/tags 4004.0073 B pass
Remove tags no build holdsDELETE /e2b/templates/tags 2041.000 B pass
Refuse removing tags from a template that does not existDELETE /e2b/templates/tags 4041.0084 B pass
List a template's tags by its nameGET /e2b/templates/e2b-wait-tmpl/tags 2001.002 B pass
Refuse the tags of a template that does not existGET /e2b/templates/e2b-nope-tmpl/tags 4041.0084 B pass
Delete the waiting template from the owner consoleDELETE /v1/e2b/templates/66fb2ad1b09e18e4cd0c 20423.00 B pass
Refuse a second owner delete of the templateDELETE /v1/e2b/templates/66fb2ad1b09e18e4cd0c 4041.0091 B pass
The alias is goneGET /e2b/templates/aliases/e2b-wait-tmpl 4041.0084 B pass
Refuse the status of a deleted buildGET /e2b/templates/66fb2ad1b09e18e4cd0c/builds/306d25be-6398-4e4f-ac2e-fcd8ed2c7230/status 4041.0091 B pass
Refuse a start of a deleted buildPOST /e2b/v2/templates/66fb2ad1b09e18e4cd0c/builds/306d25be-6398-4e4f-ac2e-fcd8ed2c7230 4042.0091 B pass
Request a build for the refused startsPOST /e2b/v3/templates 20213.0180 B pass
Refuse a start with a malformed bodyPOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4001.00111 B pass
Refuse a start with no base image or templatePOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4002.0086 B pass
Refuse another base imagePOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4000.00181 B pass
Refuse a registry image sourcePOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4001.00138 B pass
Refuse a source template that does not existPOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4001.00103 B pass
Refuse a RUN step with no commandPOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4001.0080 B pass
Refuse a COPY whose files were never uploadedPOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4002.00163 B pass
Refuse a step that is not a build stepPOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4001.00119 B pass
Refuse an ENV step with an odd number of argumentsPOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4001.00100 B pass
Refuse an ENV step whose name is not a variable namePOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4001.0099 B pass
Refuse a USER step for a user the sandbox lacksPOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4002.00117 B pass
Refuse a start command longer than 64 KiBPOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4001.00106 B pass
Refuse a start of a build that does not existPOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/00000000-0000-4000-8000-000000000000 4042.00110 B pass
Refuse a start of a template that does not existPOST /e2b/v2/templates/e2b-nope-tmpl/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4041.0084 B pass
Refuse a start without an E2B keyPOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 4011.0092 B pass
Leave the build waiting after all the refusalsGET /e2b/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a/status 2001.00345 B pass
Start the build after the refusalsPOST /e2b/v2/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a 20232.02 B pass
Read the build as failed at its baseGET /e2b/templates/2f4cae852e4745175b6a/builds/9faf64fc-58b9-412e-bd8b-839625c08e2a/status 2001.00913 B pass
Delete the template by its nameDELETE /e2b/templates/e2b-refused-tmpl 20428.00 B pass
Refuse a template named basePOST /e2b/v3/templates 4002.0089 B pass
Refuse a template named aliasesPOST /e2b/v3/templates 4001.0091 B pass
Refuse a template named tagsPOST /e2b/v3/templates 4001.0088 B pass
Refuse a template name with a spacePOST /e2b/v3/templates 4001.00165 B pass
Refuse a template name that starts with a dashPOST /e2b/v3/templates 4001.00162 B pass
Refuse a template name longer than 128 charactersPOST /e2b/v3/templates 4004.00286 B pass
Refuse a template name with accentsPOST /e2b/v3/templates 4001.00164 B pass
Refuse an empty template namePOST /e2b/v3/templates 4001.00157 B pass
Refuse a tag with a space in itPOST /e2b/v3/templates 4001.00116 B pass
Refuse more than 32 tagsPOST /e2b/v3/templates 4001.0071 B pass
Refuse a CPU count of zeroPOST /e2b/v3/templates 4001.0073 B pass
Refuse a CPU count of ninePOST /e2b/v3/templates 4001.0073 B pass
Refuse a memory size of 127 MiBPOST /e2b/v3/templates 4001.0081 B pass
Refuse a memory size of 16385 MiBPOST /e2b/v3/templates 4001.0083 B pass
Refuse a build request with no bodyPOST /e2b/v3/templates 4001.00110 B pass
Refuse a malformed build requestPOST /e2b/v3/templates 4002.00110 B pass
Refuse a build request without an E2B keyPOST /e2b/v3/templates 4011.0092 B pass
Accept the largest VM a build may ask forPOST /e2b/v3/templates 20217.0172 B pass
Delete the largest-VM template as the ownerDELETE /v1/e2b/templates/ccc48e08e0cb5e416ef7 2048.000 B pass
Revoke the live key at the endDELETE /v1/e2b/keys/e2k-1e03ab3607f6 2009.0011 B pass
Refuse the revoked live keyGET /e2b/sandboxes 4011.0092 B pass
Create an E2B key for the readsPOST /v1/e2b/keys 20024.0131 B pass
List the running sandboxes (empty)GET /e2b/sandboxes 2001.002 B pass
List the sandboxes by state (empty)GET /e2b/v2/sandboxes?state=running,paused 2000.002 B pass
List every sandbox for the owner's console (empty)GET /v1/e2b/sandboxes 2001.0016 B pass
Get a sandbox that does not existGET /e2b/sandboxes/sb0000000000000000 4040.0087 B pass
Refuse the sandbox list without an E2B keyGET /e2b/sandboxes 4011.0092 B pass
List the templates and their builds (empty)GET /v1/e2b/templates 2000.0016 B pass
Revoke the E2B keyDELETE /v1/e2b/keys/e2k-7b02876ad5bc 20014.011 B pass
evals8 requests
RequestCallStatusmsSizeResult
The cost and success report by stepGET /v1/evals/costs?by=step 2002.00443 B pass
A cost report refuses a grouping it does not knowGET /v1/evals/costs?by=seat 4004.0065 B pass
The leaderboard of the build stepGET /v1/evals/leaderboard?step=build 2001.00242 B pass
Each reviewer model's precision and missesGET /v1/evals/reviewers 2001.002 B pass
The benchmark's replays of archived tasksGET /v1/evals/bench 2001.002 B pass
Archive a task with its known outcome as a benchmark casePOST /v1/evals/archive 20129.08 B pass
Replay an archived case as a task in its projectPOST /v1/evals/bench/1 20110860 B pass
Record a task's qualification stages and lab minutesPOST /v1/evals/qualified 2008.0037 B pass
weft60 requests
RequestCallStatusmsSizeResult
Create a Weft repo as the owner, through the consolePOST /v1/weft/console 2008.0048 B pass
The new repo is in the list of repos, with its projectGET /v1/weft/repos 2001.00945 B pass
Read the new repo by its nameGET /v1/weft/repos/t-weft-repo-a 2001.00181 B pass
Refuse a second repo with the same namePOST /v1/weft/console 4092.0037 B pass
Refuse a repo name with a space in itPOST /v1/weft/console 4002.0036 B pass
Refuse a repo name with non-ASCII lettersPOST /v1/weft/console 4001.0045 B pass
Refuse a console statement with no kindPOST /v1/weft/console 4001.0028 B pass
Refuse a console body that is not JSONPOST /v1/weft/console 4005.0055 B pass
Answer 404 for a repo that does not existGET /v1/weft/repos/t-weft-no-such-repo 4041.0024 B pass
Create the repo a connection will be added toPOST /v1/weft/console 20023.049 B pass
Add a connection from the repo to a remote, as the ownerPOST /v1/weft/console 20012.087 B pass
The repo shows its connection as in step, with no credential in itGET /v1/weft/repos/t-weft-repo-b 2002.00383 B pass
Refuse a second connection with the same id on the repoPOST /v1/weft/console 4091.0059 B pass
Refuse a connection whose exported commits have no author emailPOST /v1/weft/console 4001.0049 B pass
Refuse a connection to a repo that does not existPOST /v1/weft/console 4001.0039 B pass
Remove the connection from the repo, as the ownerPOST /v1/weft/console 2008.0058 B pass
After the removal the repo lists no connectionGET /v1/weft/repos/t-weft-repo-b 2001.00173 B pass
Refuse removing a connection that is already gonePOST /v1/weft/console 4001.0034 B pass
Create the repo a change will be opened inPOST /v1/weft/console 20052.049 B pass
Open a lane on the repo's main for a task, as the ownerPOST /v1/weft/lanes 20057.0398 B pass
Read the open change by its nameGET /v1/weft/changes/w-1 2002.00372 B pass
Refuse a lane on a repo that does not existPOST /v1/weft/lanes 4002.0039 B pass
Refuse a lane whose author is not a known actorPOST /v1/weft/lanes 4002.0085 B pass
Refuse a release proposal on a repo with nothing landedPOST /v1/weft/repos/t-weft-repo-d/releases 4002.0041 B pass
Answer 404 for a change that does not existGET /v1/weft/changes/w-999999 4041.0030 B pass
Upload an object whose bytes hash to its namePUT /v1/weft/wire/objects/af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 20039.077 B pass
Read the uploaded object back by its hashGET /v1/weft/wire/objects/af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 2001.000 B pass
Refuse an upload whose bytes do not hash to the name givenPUT /v1/weft/wire/objects/0000000000000000000000000000000000000000000000000000000000000000 4001.0060 B pass
Refuse an upload whose name is not a hashPUT /v1/weft/wire/objects/not-a-hash 4001.0022 B pass
Refuse a statement that is not signedPOST /v1/weft/records 4001.0024 B pass
Answer 404 for an object no one storedGET /v1/weft/wire/objects/1111111111111111111111111111111111111111111111111111111111111111 4041.0032 B pass
List the review recipes, with the three built in at their versionsGET /v1/recipes 2006.001.8 KiB pass
Show the built-in docs recipe, with its TOMLGET /v1/recipes/docs 2002.002.6 KiB pass
Show the docs recipe at the version namedGET /v1/recipes/docs?version=1 2003.002.6 KiB pass
Answer 404 for a recipe version that was never savedGET /v1/recipes/docs?version=9 4042.0026 B pass
Answer 404 for a recipe that does not existGET /v1/recipes/t-no-such-recipe 4042.0026 B pass
Refuse saving docs at version 1, which the built-in already holdsPUT /v1/recipes/docs 4002.0049 B pass
Refuse a recipe saved under another recipe's idPUT /v1/recipes/research 4002.0046 B pass
Refuse recipe TOML that does not parsePUT /v1/recipes/docs 4002.00152 B pass
Refuse a recipe with two gatesPUT /v1/recipes/docs 4001.0041 B pass
Refuse a recipe whose nodes wait on each otherPUT /v1/recipes/docs 4001.0043 B pass
Refuse a recipe node of a kind the graph does not knowPUT /v1/recipes/docs 4001.0037 B pass
Refuse a recipe save with no TOML in itPUT /v1/recipes/docs 4002.0030 B pass
Answer 409 when deciding a recipe proposal that is not pendingPOST /v1/recipes/proposals/rp-999 4090.0038 B pass
Save the owner's docs recipe as version 2PUT /v1/recipes/docs 20015.0649 B pass
The latest docs recipe is the owner's version 2GET /v1/recipes/docs 2003.001.3 KiB pass
The built-in docs version 1 still reads as built inGET /v1/recipes/docs?version=1 2001.002.6 KiB pass
The recipe list keeps both docs versionsGET /v1/recipes 2006.002.0 KiB pass
Refuse saving docs at version 2 a second timePUT /v1/recipes/docs 4002.0049 B pass
Revert docs to the built-in content, saved as a newer version 3PUT /v1/recipes/docs 20017.01.2 KiB pass
The latest docs recipe is the reverted version 3, with the built-in titleGET /v1/recipes/docs 2001.002.6 KiB pass
The owner's version 2 is kept in the history after the revertGET /v1/recipes/docs?version=2 2001.001.3 KiB pass
Refuse saving the code recipe at version 3, which the built-in holdsPUT /v1/recipes/code 4002.0049 B pass
Show whether Weft is running on a fresh hubGET /v1/weft 2000.0046 B pass
List the Weft repositories on a fresh hubGET /v1/weft/repos 2001.001.3 KiB pass
List the language packs Weft has loadedGET /v1/weft/packs 2001.00318 B pass
List the Weft keys, with the owner's on a fresh hubGET /v1/weft/keys 2002.00634 B pass
List the Weft operations log, newest firstGET /v1/weft/ops?limit=20 2002.002.2 KiB pass
List the review recipes and the proposals waitingGET /v1/recipes 2006.002.1 KiB pass
Show the code review recipe as its TOMLGET /v1/recipes/code 2001.006.7 KiB pass
platforms55 requests
RequestCallStatusmsSizeResult
Record a GitLab OAuth app, its secret kept out of the answerPOST /v1/platforms/registrations 20092.0136 B pass
List the registered app with no secret in the listGET /v1/platforms 2001.00459 B pass
Refuse an OAuth app with no client secretPOST /v1/platforms/registrations 4001.0037 B pass
Refuse an OAuth app whose client id is blankPOST /v1/platforms/registrations 4001.0033 B pass
Refuse an OAuth app on a platform the plaza does not knowPOST /v1/platforms/registrations 4001.0045 B pass
Refuse a platform host that is not an http(s) URLPOST /v1/platforms/registrations 4001.0072 B pass
Forget the registered app and its secretDELETE /v1/platforms/registrations/gitlab-app-1 20031.026 B pass
Answer 404 when forgetting an app already forgottenDELETE /v1/platforms/registrations/gitlab-app-1 4041.0023 B pass
Refuse a sign-in with an app that was forgottenPOST /v1/platforms/authorize 4043.0023 B pass
The forgotten app is gone from the listGET /v1/platforms 2000.00323 B pass
Record a Forgejo OAuth app for a sign-in the platform declinesPOST /v1/platforms/registrations 20022.0147 B pass
Start the owner's sign-in on the registered appPOST /v1/platforms/authorize 2000.00129 B pass
Show the started sign-in as pendingGET /v1/platforms/flows/f88f356f952e3ad38acf9eb24bb4fba2 2001.0020 B pass
Open the go page, which redirects to the platform's authorize pageGET /v1/platforms/flows/f88f356f952e3ad38acf9eb24bb4fba2/go 3021.000 B pass
Take the browser back with the platform's refusalGET /v1/platforms/callback?error=access_denied&state=f88f356f952e3ad38acf9eb24bb4fba2 4001.00484 B pass
Show the declined sign-in as failed, with the platform's reasonGET /v1/platforms/flows/f88f356f952e3ad38acf9eb24bb4fba2 2000.0085 B pass
Refuse a callback that replays a state already usedGET /v1/platforms/callback?code=t-replayed-code&state=f88f356f952e3ad38acf9eb24bb4fba2 4002.00501 B pass
Forget the app the sign-in was declined onDELETE /v1/platforms/registrations/forgejo-app-2 20094.027 B pass
Record a GitLab OAuth app whose token exchange will be refusedPOST /v1/platforms/registrations 20061.0145 B pass
Start the sign-in on the app whose exchange will failPOST /v1/platforms/authorize 2000.00129 B pass
Take the browser back with a code, and the exchange is refused by the hostGET /v1/platforms/callback?code=t-platforms-code&state=ef3c8113dff994fc5e749b8f31445346 4001.00509 B pass
Show the failed exchange as failed, without the codeGET /v1/platforms/flows/ef3c8113dff994fc5e749b8f31445346 2001.00110 B pass
Forget the app whose exchange failedDELETE /v1/platforms/registrations/gitlab-app-3 20041.026 B pass
Start creating the plaza's GitHub App on a host that refusesPOST /v1/platforms/github/app 2001.00129 B pass
Refuse a GitHub host that is not an http(s) URLPOST /v1/platforms/github/app 4001.0072 B pass
Show the app creation as pendingGET /v1/platforms/flows/41f9c83bdb9f30bd0d585059fe3714b2 2002.0020 B pass
Open the go page, which carries the manifest form for the hostGET /v1/platforms/flows/41f9c83bdb9f30bd0d585059fe3714b2/go 2001.001.4 KiB pass
Take the browser back with a code the host refuses to convertGET /v1/platforms/callback?code=t-manifest-code&state=41f9c83bdb9f30bd0d585059fe3714b2 4002.00546 B pass
Show the failed app creation as failedGET /v1/platforms/flows/41f9c83bdb9f30bd0d585059fe3714b2 2001.00147 B pass
Refuse an install of a GitHub App that was never createdPOST /v1/platforms/github/install 4041.0030 B pass
Refuse an install with no registration namedPOST /v1/platforms/github/install 4041.0030 B pass
Refuse a token the platform cannot check, and never echo itPOST /v1/platforms/tokens 4001.0092 B pass
Refuse a token for a platform the plaza does not knowPOST /v1/platforms/tokens 4000.0045 B pass
Refuse a token with a level the plaza does not knowPOST /v1/platforms/tokens 4001.0049 B pass
Refuse a repository-level token that names no repositoryPOST /v1/platforms/tokens 4001.0071 B pass
Refuse a blank tokenPOST /v1/platforms/tokens 4001.0029 B pass
Refuse a token against a host that is not an http(s) URLPOST /v1/platforms/tokens 4001.0072 B pass
Refuse a token request with no bodyPOST /v1/platforms/tokens 4001.0045 B pass
Answer 404 when reading an unknown authorization againPOST /v1/platforms/gitlab-99/sync 4041.0033 B pass
Answer 404 when forgetting an unknown authorizationDELETE /v1/platforms/gitlab-99 4040.0033 B pass
Answer 404 for the namespaces of an unknown authorizationGET /v1/platforms/gitlab-99/namespaces 4043.0033 B pass
Answer 404 for the repositories of an unknown authorizationGET /v1/platforms/gitlab-99/repos?namespace=t-platforms-group 4041.0033 B pass
Refuse a repositories list with no namespace on an unknown authorizationGET /v1/platforms/gitlab-99/repos 4041.0033 B pass
Answer 404 when choosing the grants of an unknown authorizationPUT /v1/platforms/gitlab-99/grants 4041.0033 B pass
Answer 404 for a grants body of the wrong shape on an unknown authorizationPUT /v1/platforms/gitlab-99/grants 4041.0033 B pass
Answer 404 when connecting a repository of an unknown authorizationPOST /v1/platforms/gitlab-99/connect 4041.0033 B pass
Answer 404 when disconnecting on an unknown authorizationPOST /v1/platforms/gitlab-99/disconnect 4041.0033 B pass
Answer 404 for a flow that was never startedGET /v1/platforms/flows/0123456789abcdef0123456789abcdef 4041.0024 B pass
Show the expired page for the go link of a flow that was never startedGET /v1/platforms/flows/0123456789abcdef0123456789abcdef/go 4000.00487 B pass
Answer 404 when forgetting an app that was never registeredDELETE /v1/platforms/registrations/gitlab-app-999 4041.0023 B pass
Refuse a callback whose state was never started, with a platform errorGET /v1/platforms/callback?error=access_denied&state=0123456789abcdef0123456789abcdef 4001.00484 B pass
List the git platforms on a fresh hubGET /v1/platforms 2000.00323 B pass
Start creating the GitHub AppPOST /v1/platforms/github/app 2001.00129 B pass
A callback with an unknown state does nothingGET /v1/platforms/callback?code=x&state=unknown 4000.00501 B pass
An organisation-level token must name its organisationPOST /v1/platforms/tokens 4002.0071 B pass
projects-life121 requests
RequestCallStatusmsSizeResult
Open a project for the owner with a title and a goalPOST /v1/projects 2018.00675 B pass
Read the project back in its opening stateGET /v1/projects/pr6 2000.00675 B pass
List the projects includes the new oneGET /v1/projects 2001.004.5 KiB pass
Read the new project's task graph: no tasks and nothing waitingGET /v1/projects/pr6/graph 2001.00110 B pass
Refuse a project with no titlePOST /v1/projects 4001.0045 B pass
Refuse a project whose title is longer than 120 charactersPOST /v1/projects 4000.0045 B pass
Refuse a project with an empty goalPOST /v1/projects 4001.0045 B pass
Refuse a project kind that is neither code nor otherPOST /v1/projects 4000.0038 B pass
Refuse a project body that is not JSONPOST /v1/projects 4001.0045 B pass
Open an other-kind project with a unicode titlePOST /v1/projects 201415686 B pass
Refuse approval of a project whose plan is not awaiting approvalPOST /v1/projects/pr6/approve 4093.0064 B pass
Refuse a veto to a stage the project has not reached yetPOST /v1/projects/pr6/veto 4091.0074 B pass
Refuse a veto to a stage that does not existPOST /v1/projects/pr6/veto 4090.0034 B pass
Refuse a mode that does not existPOST /v1/projects/pr6/mode 4001.0034 B pass
Refuse a mode change with no mode namedPOST /v1/projects/pr6/mode 4001.0024 B pass
Put the project in build mode it is already inPOST /v1/projects/pr6/mode 2000.00675 B pass
Adopt a finished project: it opens delivered, in maintenancePOST /v1/projects/adopt 2018.001010 B pass
Refuse an adoption with no titlePOST /v1/projects/adopt 4000.0063 B pass
Refuse an adoption with a kind that is neither code nor otherPOST /v1/projects/adopt 4001.0038 B pass
Read the project's settings overrides: none yetGET /v1/projects/pr6/settings 2001.002 B pass
Set the project's default task budget in its settingsPATCH /v1/projects/pr6/settings 2001.0019 B pass
Read the effective settings: the task budget comes from the projectGET /v1/projects/pr6/settings/effective 2002.00745 B pass
Refuse a settings change that names no such settingPATCH /v1/projects/pr6/settings 4001.00510 B pass
Refuse a permission mode that does not existPATCH /v1/projects/pr6/settings 4001.0084 B pass
Create a task with no budget: it takes the project's task budgetPOST /v1/tasks 2011.00300 B pass
Clear the project's task budget setting: the plaza's default applies againPATCH /v1/projects/pr6/settings 2001.002 B pass
Put the project in build mode: a no-op for the active projectPOST /v1/projects/pr6/mode 2001.00762 B pass
Pause the project: its agents' work waitsPOST /v1/projects/pr6/pause 2001.00835 B pass
Pausing a paused project changes nothingPOST /v1/projects/pr6/pause 2001.00835 B pass
Read the paused project: still in its stage, its history records the pauseGET /v1/projects/pr6 2001.00835 B pass
A task added to a paused project waits: it is not refusedPOST /v1/tasks 2011.00298 B pass
Refuse a maintenance sweep of a paused projectPOST /v1/projects/pr6/maintenance/sweep 4091.0045 B pass
Resume the paused project: its waiting work goes outPOST /v1/projects/pr6/resume 2002.00999 B pass
Resuming a project that is not paused changes nothingPOST /v1/projects/pr6/resume 2001.00999 B pass
The task added while paused is still open after the resumeGET /v1/tasks/t6 2001.00298 B pass
The project's graph lists the resumed work as readyGET /v1/projects/pr6/graph 2001.00479 B pass
Put the project in maintenance modePOST /v1/projects/pr6/mode 2001.001.1 KiB pass
Read the maintenance view: the default interval, no signals, no proposalsGET /v1/projects/pr6/maintenance 2001.00357 B pass
Change the maintenance settings: every 6 hours, with a focusPATCH /v1/projects/pr6/maintenance 2001.00365 B pass
Refuse a maintenance interval over 720 hoursPATCH /v1/projects/pr6/maintenance 4001.0040 B pass
Refuse a watcher that is not on the projectPATCH /v1/projects/pr6/maintenance 4001.0044 B pass
Refuse a maintenance interval that is not a numberPATCH /v1/projects/pr6/maintenance 4001.0040 B pass
Refuse a maintenance sweep with no agents to watch the projectPOST /v1/projects/pr6/maintenance/sweep 4091.00101 B pass
Add a signal to the project's inboxPOST /v1/projects/pr6/maintenance/signals 2012.00120 B pass
Refuse a signal with no textPOST /v1/projects/pr6/maintenance/signals 4001.0025 B pass
Delete the signal from the inboxDELETE /v1/projects/pr6/maintenance/signals/s1 2001.0016 B pass
Refuse to delete a signal that does not existDELETE /v1/projects/pr6/maintenance/signals/s999999 4041.0026 B pass
Make the project's ingest addressPOST /v1/projects/pr6/maintenance/ingest 2011.00139 B pass
Making a new ingest address stops the old onePOST /v1/projects/pr6/maintenance/ingest 2011.00139 B pass
The old ingest address no longer takes signalsPOST /v1/ingest/apzi_31060ca20b1aa8bc9332837f9d78a39e0b95e89a1c23fed5 4040.0034 B pass
Stop the project's ingest addressDELETE /v1/projects/pr6/maintenance/ingest 2001.0016 B pass
Stopping an ingest address that is already stopped changes nothingDELETE /v1/projects/pr6/maintenance/ingest 2000.0016 B pass
Refuse to decline a proposal that does not existPOST /v1/projects/pr6/maintenance/proposals/p999999/decline 4040.0028 B pass
Refuse to put off a proposal that does not existPOST /v1/projects/pr6/maintenance/proposals/p999999/later 4041.0028 B pass
Put a development environment on the projectPUT /v1/projects/pr6/environments/probe-env 2002.00211 B pass
List the environments: the new one is thereGET /v1/projects/pr6/environments 2001.00213 B pass
Refuse an environment name with capital lettersPUT /v1/projects/pr6/environments/Probe_Env 4001.0098 B pass
Refuse an environment kind that does not existPUT /v1/projects/pr6/environments/probe-env 4001.0080 B pass
Set a secret for the development environmentPUT /v1/projects/pr6/environments/probe-env/secrets/PROBE_TOKEN 20030.056 B pass
Remove the environment's secretDELETE /v1/projects/pr6/environments/probe-env/secrets/PROBE_TOKEN 20018.016 B pass
Refuse to remove a secret that the environment does not haveDELETE /v1/projects/pr6/environments/probe-env/secrets/NOT_THERE 4040.0026 B pass
Remove the environment and its secretsDELETE /v1/projects/pr6/environments/probe-env 2001.0016 B pass
Refuse to remove an environment that is already goneDELETE /v1/projects/pr6/environments/probe-env 4041.0031 B pass
Refuse a maintenance settings body that is a JSON string, not an objectPATCH /v1/projects/pr6/maintenance 4001.0042 B pass
Archive the project: its open tasks are withdrawn and its budget goes backPOST /v1/projects/pr6/archive 2001.001.1 KiB pass
Archiving an archived project changes nothingPOST /v1/projects/pr6/archive 2000.001.1 KiB pass
The default-budget task is withdrawnGET /v1/tasks/t5 2003.00313 B pass
The paused-period task is withdrawn tooGET /v1/tasks/t6 2000.00311 B pass
Refuse to pause an archived projectPOST /v1/projects/pr6/pause 40912.035 B pass
Refuse to resume an archived projectPOST /v1/projects/pr6/resume 4091.0035 B pass
Refuse a mode change on an archived projectPOST /v1/projects/pr6/mode 4091.0035 B pass
Refuse a new task on an archived projectPOST /v1/tasks 4091.0058 B pass
Refuse a maintenance sweep of an archived projectPOST /v1/projects/pr6/maintenance/sweep 4090.0045 B pass
Read the archived project: its history records the archiveGET /v1/projects/pr6 2001.001.1 KiB pass
Read the archived project's graph: none of its tasks is still openGET /v1/projects/pr6/graph 2001.00445 B pass
Open a project for the veto branchPOST /v1/projects 20125.0663 B pass
Veto the project back to brief: its plan is no longer approvedPOST /v1/projects/pr9/veto 2001.00766 B pass
Refuse a veto to a later stage than the project is atPOST /v1/projects/pr9/veto 4091.0065 B pass
Refuse a veto with no stage: it defaults to proposal, later than briefPOST /v1/projects/pr9/veto 4091.0065 B pass
Refuse a task while the plan is at briefPOST /v1/tasks 4092.0087 B pass
Refuse approval while the plan is at briefPOST /v1/projects/pr9/approve 4091.0055 B pass
Read the vetoed project: still at briefGET /v1/projects/pr9 2001.00766 B pass
Open a project for the paused-then-archived branchPOST /v1/projects 2018.00700 B pass
Create a task with a budget of 200POST /v1/tasks 2011.00301 B pass
Pause the projectPOST /v1/projects/pr10/pause 2001.00860 B pass
Archive the paused project: the pause ends with itPOST /v1/projects/pr10/archive 2001.00936 B pass
The task is withdrawnGET /v1/tasks/t7 2001.00314 B pass
Refuse to resume the archived projectPOST /v1/projects/pr10/resume 4091.0036 B pass
Answer 404 for a project that does not existGET /v1/projects/pr999999 4040.0027 B pass
Answer 404 when pausing a project that does not existPOST /v1/projects/pr999999/pause 4041.0027 B pass
Answer 404 when resuming a project that does not existPOST /v1/projects/pr999999/resume 4042.0027 B pass
Answer 404 when archiving a project that does not existPOST /v1/projects/pr999999/archive 4040.0027 B pass
Answer 404 when changing the mode of a project that does not existPOST /v1/projects/pr999999/mode 4041.0027 B pass
Answer 404 for the graph of a project that does not existGET /v1/projects/pr999999/graph 4041.0027 B pass
Answer 404 for the budget of a project that does not existGET /v1/projects/pr999999/budget 4040.0031 B pass
Answer 404 for the maintenance of a project that does not existGET /v1/projects/pr999999/maintenance 4040.0027 B pass
Answer 404 for the settings of a project that does not existGET /v1/projects/pr999999/settings 4041.0027 B pass
Answer 404 for the environments of a project that does not existGET /v1/projects/pr999999/environments 4040.0027 B pass
Answer 404 for a project id that is not a project at allGET /v1/projects/not-a-project 4040.0027 B pass
A project's build plan: targets on the pools that build themGET /v1/projects/pr2/build-plan 2002.0014 B pass
List the project modesGET /v1/project-modes 2001.00371 B pass
Bring in a finished project from a git addressPOST /v1/projects/adopt 20123.01.4 KiB pass
Put the project back in buildPOST /v1/projects/pr11/mode 2000.001007 B pass
Answer 400 for a mode that does not existPOST /v1/projects/pr11/mode 4002.0035 B pass
Get the maintenance view of a fresh projectGET /v1/projects/pr11/maintenance 2000.00358 B pass
Add a signal to the project's inboxPOST /v1/projects/pr11/maintenance/signals 2011.00183 B pass
Make the project's ingest addressPOST /v1/projects/pr11/maintenance/ingest 2011.00139 B pass
Send a signal to the ingest address without a tokenPOST /v1/ingest/apzi_6032e8b3ff0d4216b309dc78884fbb75c27b3ca9bb0a9796 2021.0011 B pass
Answer 404 for an ingest address that does not existPOST /v1/ingest/apzi_not-a-real-address 4041.0034 B pass
Answer 404 when approving a proposal that does not existPOST /v1/projects/pr11/maintenance/proposals/mp999/approve 4040.0028 B pass
List the project's environmentsGET /v1/projects/pr11/environments 2001.00247 B pass
Put a staging environment that tracks mainPUT /v1/projects/pr11/environments/staging 2001.00239 B pass
Deploy a named version to stagingPOST /v1/projects/pr11/environments/staging/deploy 2001.0096 B pass
Put a secret for the staging environmentPUT /v1/projects/pr11/environments/staging/secrets/STAGING_DEPLOY_TOKEN 20065.064 B pass
Upload a file's bytes into the projectPUT /v1/projects/pr11/uploads 20144.085 B pass
Land the uploaded file on main as one changePOST /v1/projects/pr11/files 20047.0110 B pass
A project's test topologies: typed, one per file under .plaza/topologiesGET /v1/projects/pr11/topologies 2001.0017 B pass
Topologies of an unknown projectGET /v1/projects/no-such-project/topologies 4040.0027 B pass
Importing a topology into an unknown projectPOST /v1/projects/no-such-project/topologies/import 4041.0027 B pass
A topology import from a source it does not readPOST /v1/projects/pr11/topologies/import 4000.0069 B pass
A Compose file that is not on main is not importedPOST /v1/projects/pr11/topologies/import 4042.0045 B pass
looks214 requests
RequestCallStatusmsSizeResult
Refuse an agent's artifact without the internal tokenPUT /internal/v1/agents/5/gateway/artifacts 4031.0043 B pass
Refuse an agent's artifact with a wrong internal tokenPUT /internal/v1/agents/5/gateway/artifacts 4031.0043 B pass
Refuse an agent's artifact from a cid that is not a numberPUT /internal/v1/agents/abc/gateway/artifacts 4001.0036 B pass
Refuse an artifact with no panelsPUT /internal/v1/agents/5/gateway/artifacts 40018.0105 B pass
Refuse a panel whose span is not a width of the gridPUT /internal/v1/agents/5/gateway/artifacts 40010.099 B pass
Refuse an artifact body that is not JSONPUT /internal/v1/agents/5/gateway/artifacts 4001.00101 B pass
Make the artifact t-looks Notes as an agentPUT /internal/v1/agents/5/gateway/artifacts 20139.0105 B pass
Read the artifact as the ownerGET /v1/artifacts/ac7yadxhfch2 2002.00343 B pass
Read the artifact as the agent that made itGET /internal/v1/agents/5/gateway/artifacts/ac7yadxhfch2 2001.00343 B pass
Refuse an agent reading an artifact another agent madeGET /internal/v1/agents/6/gateway/artifacts/ac7yadxhfch2 4041.0028 B pass
List the artifacts with a query that matches the titleGET /v1/artifacts?q=t-looks%20Notes 2001.00164 B pass
List the artifacts of a projectGET /v1/artifacts?project=t-looks 2001.00164 B pass
List the artifacts of a project that has noneGET /v1/artifacts?project=t-nope-project 2001.002 B pass
Refuse a version that is not a numberGET /v1/artifacts/ac7yadxhfch2?v=abc 4001.0046 B pass
Refuse a version that does not existGET /v1/artifacts/ac7yadxhfch2?v=99 4041.0039 B pass
Refuse the versions of an artifact that does not existGET /v1/artifacts/aunknownid00/versions 4041.0028 B pass
Add a second version to the artifact as its authorPUT /internal/v1/agents/5/gateway/artifacts/ac7yadxhfch2 20124.0107 B pass
Refuse a new version from an agent that did not make the artifactPUT /internal/v1/agents/6/gateway/artifacts/ac7yadxhfch2 4031.0056 B pass
Refuse a new version of an artifact that does not existPUT /internal/v1/agents/5/gateway/artifacts/aunknownid00 4041.0028 B pass
Refuse a new version with no specPUT /internal/v1/agents/5/gateway/artifacts/ac7yadxhfch2 4001.0051 B pass
Refuse a new version whose panels are emptyPUT /internal/v1/agents/5/gateway/artifacts/ac7yadxhfch2 40012.0105 B pass
Read the first version after a second one existsGET /v1/artifacts/ac7yadxhfch2?v=1 2001.00343 B pass
Read the newest version when no version is namedGET /v1/artifacts/ac7yadxhfch2 2001.00334 B pass
List the versions oldest firstGET /v1/artifacts/ac7yadxhfch2/versions 2001.00131 B pass
Register agent 5 through its VM hello, so the agent routes take its uploadsPOST /internal/v1/agents/5/hello 2008.0055.0 KiB pass
Store a CSV data blob for the artifactPUT /internal/v1/agents/5/gateway/artifacts/blobs?content_type=text/csv 20160.072 B pass
Refuse a data blob with an empty bodyPUT /internal/v1/agents/5/gateway/artifacts/blobs?content_type=text/csv 4001.0029 B pass
Add a version that reads the CSV blob in a dataset panelPUT /internal/v1/agents/5/gateway/artifacts/ac7yadxhfch2 20133.0108 B pass
Read one page of the dataset's rowsGET /v1/artifacts/ac7yadxhfch2/rows?panel=sales&limit=1 2001.00154 B pass
Sort and filter the dataset's rowsGET /v1/artifacts/ac7yadxhfch2/rows?panel=sales&sort=total&desc=1&filter=north 2001.00154 B pass
Refuse rows of a panel that is not a datasetGET /v1/artifacts/ac7yadxhfch2/rows?panel=notes 4001.0044 B pass
Refuse rows of a panel that does not existGET /v1/artifacts/ac7yadxhfch2/rows?panel=nope 4001.0029 B pass
Refuse rows of an artifact that does not existGET /v1/artifacts/aunknownid00/rows?panel=sales 4041.0028 B pass
Read the CSV blob the dataset referencesGET /v1/artifacts/ac7yadxhfch2/blobs/b1d8ea613033ff4fd 2001.0030 B pass
Refuse a blob the artifact does not referenceGET /v1/artifacts/ac7yadxhfch2/blobs/b0000000000000000 4041.0024 B pass
Refuse a blob of an artifact that does not existGET /v1/artifacts/aunknownid00/blobs/b0000000000000000 4041.0024 B pass
Export the dataset panel as CSVGET /v1/artifacts/ac7yadxhfch2/export?format=csv&panel=sales 2001.0037 B pass
Export the whole artifact as JSON by defaultGET /v1/artifacts/ac7yadxhfch2/export 2001.00971 B pass
Export the chart panel as PNGGET /v1/artifacts/ac7yadxhfch2/export?format=png&panel=trend 20011.069.5 KiB pass
Refuse a CSV export without a panelGET /v1/artifacts/ac7yadxhfch2/export?format=csv 4002.0050 B pass
Refuse a PNG export of a table panelGET /v1/artifacts/ac7yadxhfch2/export?format=png&panel=sales 4001.0068 B pass
Refuse an export in a format that does not existGET /v1/artifacts/ac7yadxhfch2/export?format=xml 4001.0051 B pass
Refuse a CSV export of a panel that does not existGET /v1/artifacts/ac7yadxhfch2/export?format=csv&panel=nope 4001.0029 B pass
Refuse an export of a version that does not existGET /v1/artifacts/ac7yadxhfch2/export?v=99 4041.0039 B pass
Delete agent 5 again, so later folders do not see itDELETE /v1/agents/5 2001.0034 B pass
Delete the artifact and the data only it usesDELETE /v1/artifacts/ac7yadxhfch2 20011926 B pass
Read the deleted artifactGET /v1/artifacts/ac7yadxhfch2 4040.0039 B pass
Delete the artifact a second timeDELETE /v1/artifacts/ac7yadxhfch2 40438.028 B pass
Refuse rows of the deleted artifactGET /v1/artifacts/ac7yadxhfch2/rows?panel=sales 4041.0028 B pass
The deleted artifact's data blob is goneGET /v1/artifacts/ac7yadxhfch2/blobs/b1d8ea613033ff4fd 4040.0024 B pass
The agent cannot read its deleted artifactGET /internal/v1/agents/5/gateway/artifacts/ac7yadxhfch2 4041.0028 B pass
The deleted artifact is not listedGET /v1/artifacts?q=t-looks%20Notes 2000.002 B pass
Make the artifact t-looks share 01 as an agentPUT /internal/v1/agents/5/gateway/artifacts 20179.0108 B pass
Create a live share link of the artifactPOST /v1/shares 20137.0461 B pass
List the artifacts shows the artifact as sharedGET /v1/artifacts?q=t-looks%20share%2001 2000.00146 B pass
Read the shared artifact through its linkGET /artifact/e3147a278fd73c6082d8c9bc747b28c3/data 20033.0555 B pass
The share counts the viewGET /v1/shares?target=artifact:anraelfeztvf 2001.00463 B pass
The view is in the share's events, through the network linkGET /v1/shares/e3147a278fd73c6082d8c9bc747b28c3/events 2001.0098 B pass
Refuse the events of an artifact id, which is not a shareGET /v1/shares/anraelfeztvf/events 4040.0025 B pass
Make the artifact t-looks share 02 as an agentPUT /internal/v1/agents/5/gateway/artifacts 20148.0108 B pass
Create a share with a passwordPOST /v1/shares 20158.0460 B pass
Refuse a forged unlock cookieGET /artifact/c6fa69f2a9007e14732fb2cbc7a5c27c/data 4010.0023 B pass
Read a password-protected share without unlocking itGET /artifact/c6fa69f2a9007e14732fb2cbc7a5c27c/data 4012.0023 B pass
Refuse a wrong passwordPOST /artifact/c6fa69f2a9007e14732fb2cbc7a5c27c/unlock 40355.026 B pass
Refuse an unlock without a password fieldPOST /artifact/c6fa69f2a9007e14732fb2cbc7a5c27c/unlock 4001.0056 B pass
Unlock with the right password and keep the unlock cookiePOST /artifact/c6fa69f2a9007e14732fb2cbc7a5c27c/unlock 20444.00 B pass
Read the share with the unlock cookieGET /artifact/c6fa69f2a9007e14732fb2cbc7a5c27c/data 20029.0555 B pass
Change the passwordPATCH /v1/shares/c6fa69f2a9007e14732fb2cbc7a5c27c 20039.0460 B pass
The old unlock cookie stops working after the password changesGET /artifact/c6fa69f2a9007e14732fb2cbc7a5c27c/data 4011.0023 B pass
Unlock with the new passwordPOST /artifact/c6fa69f2a9007e14732fb2cbc7a5c27c/unlock 20424.00 B pass
Clear the passwordPATCH /v1/shares/c6fa69f2a9007e14732fb2cbc7a5c27c 20012.0461 B pass
Read the share without a password or cookieGET /artifact/c6fa69f2a9007e14732fb2cbc7a5c27c/data 20026.0555 B pass
Unlocking a share with no password does nothing and succeedsPOST /artifact/c6fa69f2a9007e14732fb2cbc7a5c27c/unlock 2041.000 B pass
Make the artifact t-looks share 03 as an agentPUT /internal/v1/agents/5/gateway/artifacts 20163.0108 B pass
Create a share with a password for the lockoutPOST /v1/shares 20166.0460 B pass
Unlock with a wrong password, attempt 1 of tenPOST /artifact/13faeed558ad7fe8f9cb4e10c0957525/unlock 40333.026 B pass
Unlock with a wrong password, attempt 2 of tenPOST /artifact/13faeed558ad7fe8f9cb4e10c0957525/unlock 40327.026 B pass
Unlock with a wrong password, attempt 3 of tenPOST /artifact/13faeed558ad7fe8f9cb4e10c0957525/unlock 40333.026 B pass
Unlock with a wrong password, attempt 4 of tenPOST /artifact/13faeed558ad7fe8f9cb4e10c0957525/unlock 40333.026 B pass
Unlock with a wrong password, attempt 5 of tenPOST /artifact/13faeed558ad7fe8f9cb4e10c0957525/unlock 40327.026 B pass
Unlock with a wrong password, attempt 6 of tenPOST /artifact/13faeed558ad7fe8f9cb4e10c0957525/unlock 40327.026 B pass
Unlock with a wrong password, attempt 7 of tenPOST /artifact/13faeed558ad7fe8f9cb4e10c0957525/unlock 40346.026 B pass
Unlock with a wrong password, attempt 8 of tenPOST /artifact/13faeed558ad7fe8f9cb4e10c0957525/unlock 40327.026 B pass
Unlock with a wrong password, attempt 9 of tenPOST /artifact/13faeed558ad7fe8f9cb4e10c0957525/unlock 40342.026 B pass
Unlock with a wrong password, attempt 10 of tenPOST /artifact/13faeed558ad7fe8f9cb4e10c0957525/unlock 40372.026 B pass
Refuse the right password after ten failed unlocksPOST /artifact/13faeed558ad7fe8f9cb4e10c0957525/unlock 4291.0046 B pass
Reading the locked share still needs the passwordGET /artifact/13faeed558ad7fe8f9cb4e10c0957525/data 4011.0023 B pass
Make the artifact t-looks share 04 as an agentPUT /internal/v1/agents/5/gateway/artifacts 20141.0108 B pass
Create a share pinned to version 1POST /v1/shares 20130.0458 B pass
Add version 2 to the artifactPUT /internal/v1/agents/5/gateway/artifacts/a2k53nyckmy5 20148.0110 B pass
The pinned link keeps serving version 1GET /artifact/d98ea1e3e967405655bde98aa78b4e30/data 20011.0542 B pass
Clear the pinned versionPATCH /v1/shares/d98ea1e3e967405655bde98aa78b4e30 20022.0461 B pass
With the pin cleared the link serves the latest versionGET /artifact/d98ea1e3e967405655bde98aa78b4e30/data 20022.0545 B pass
Pin the version back to 1PATCH /v1/shares/d98ea1e3e967405655bde98aa78b4e30 20014.0458 B pass
The link serves version 1 againGET /artifact/d98ea1e3e967405655bde98aa78b4e30/data 2008.00542 B pass
Make the artifact t-looks share 05 as an agentPUT /internal/v1/agents/5/gateway/artifacts 20144.0109 B pass
Create a share with downloads off by defaultPOST /v1/shares 20131.0461 B pass
Refuse a JSON export while downloads are offGET /artifact/dc70a7d36a3300729bb9153dd1970d8c/export?format=json 4031.0044 B pass
Refuse a CSV export while downloads are offGET /artifact/dc70a7d36a3300729bb9153dd1970d8c/export?format=csv&panel=sales 4031.0044 B pass
Turn downloads onPATCH /v1/shares/dc70a7d36a3300729bb9153dd1970d8c 2007.00460 B pass
Export the artifact as JSON with downloads onGET /artifact/dc70a7d36a3300729bb9153dd1970d8c/export?format=json 2008.00770 B pass
Export the dataset panel as CSVGET /artifact/dc70a7d36a3300729bb9153dd1970d8c/export?format=csv&panel=sales 20011.033 B pass
Export the chart panel as PNGGET /artifact/dc70a7d36a3300729bb9153dd1970d8c/export?format=png&panel=trend 20035.069.5 KiB pass
Refuse a CSV export without a panelGET /artifact/dc70a7d36a3300729bb9153dd1970d8c/export?format=csv 4001.0050 B pass
Refuse an export format that does not existGET /artifact/dc70a7d36a3300729bb9153dd1970d8c/export?format=xml 4001.0051 B pass
Refuse a PNG of a table panelGET /artifact/dc70a7d36a3300729bb9153dd1970d8c/export?format=png&panel=sales 4002.0068 B pass
The events record the downloadsGET /v1/shares/dc70a7d36a3300729bb9153dd1970d8c/events 2001.00304 B pass
Turn downloads off againPATCH /v1/shares/dc70a7d36a3300729bb9153dd1970d8c 20019.0461 B pass
Refuse a JSON export after downloads are turned offGET /artifact/dc70a7d36a3300729bb9153dd1970d8c/export?format=json 4031.0044 B pass
Make the artifact t-looks share 06 as an agentPUT /internal/v1/agents/5/gateway/artifacts 20193.0108 B pass
Create the first share linkPOST /v1/shares 201120461 B pass
Create the second share linkPOST /v1/shares 20115.0461 B pass
Read the first link before revoking itGET /artifact/7315751b8a6ee53dbc54ab1fc6974ab7/data 2008.00555 B pass
Revoke the first linkDELETE /v1/shares/7315751b8a6ee53dbc54ab1fc6974ab7 2007.00473 B pass
A revoked link answers as a missing oneGET /artifact/7315751b8a6ee53dbc54ab1fc6974ab7/data 4041.0019 B pass
A revoked link cannot be unlockedPOST /artifact/7315751b8a6ee53dbc54ab1fc6974ab7/unlock 4040.0019 B pass
A revoked link cannot be exportedGET /artifact/7315751b8a6ee53dbc54ab1fc6974ab7/export?format=json 4041.0019 B pass
Revoke the first link a second timeDELETE /v1/shares/7315751b8a6ee53dbc54ab1fc6974ab7 20020.0473 B pass
The artifact stays shared while the second link is liveGET /v1/artifacts?q=t-looks%20share%2006 2002.00146 B pass
Revoke the second linkDELETE /v1/shares/c4cd16d69ca1d51d8da1838b93cb6f41 20014.0473 B pass
The artifact is not shared once no link is liveGET /v1/artifacts?q=t-looks%20share%2006 2000.00147 B pass
The events of a revoked link stay readableGET /v1/shares/7315751b8a6ee53dbc54ab1fc6974ab7/events 2001.0098 B pass
Revoke a share that does not existDELETE /v1/shares/00000000000000000000000000000000 4048.0025 B pass
Make the artifact t-looks share 07 as an agentPUT /internal/v1/agents/5/gateway/artifacts 20122.0108 B pass
Create a share that expired at oncePOST /v1/shares 20117.0461 B pass
Read an expired linkGET /artifact/31c0569f37a7482ff129bdc4a9bca68a/data 4100.0019 B pass
Unlocking an expired link is refused as expiredPOST /artifact/31c0569f37a7482ff129bdc4a9bca68a/unlock 4100.0019 B pass
Create a link that lasts one dayPOST /v1/shares 20123.0470 B pass
Read a link that is still liveGET /artifact/5def2fbcacf30c875cf89ad84d6b353e/data 2008.00555 B pass
Move the expiry into the pastPATCH /v1/shares/5def2fbcacf30c875cf89ad84d6b353e 2009.00461 B pass
Read the link after its expiry was moved into the pastGET /artifact/5def2fbcacf30c875cf89ad84d6b353e/data 4101.0019 B pass
Clear the expiryPATCH /v1/shares/5def2fbcacf30c875cf89ad84d6b353e 20012.0461 B pass
Read the link once its expiry is clearedGET /artifact/5def2fbcacf30c875cf89ad84d6b353e/data 2008.00555 B pass
Make the artifact t-looks share 08 as an agentPUT /internal/v1/agents/5/gateway/artifacts 20122.0108 B pass
Create a link to the artifactPOST /v1/shares 20116.0461 B pass
Read the link before the artifact is deletedGET /artifact/8c5519057c5795d87eeb84d1ddf684f2/data 2007.00555 B pass
Delete the artifact the link points atDELETE /v1/artifacts/aisiutkmqsdv 2009.0026 B pass
The link answers missing once the artifact is goneGET /artifact/8c5519057c5795d87eeb84d1ddf684f2/data 4041.0019 B pass
The link's blob is missing tooGET /artifact/8c5519057c5795d87eeb84d1ddf684f2/blobs/b0000000000000000 4040.0019 B pass
Revoke the link to the deleted artifactDELETE /v1/shares/8c5519057c5795d87eeb84d1ddf684f2 20022.0473 B pass
Make the artifact t-looks share 09 as an agentPUT /internal/v1/agents/5/gateway/artifacts 20121.0108 B pass
Refuse a share of a file that does not existPOST /v1/shares 4040.0036 B pass
Refuse a share of an unknown target kindPOST /v1/shares 4001.0058 B pass
Refuse a share with an empty idPOST /v1/shares 4001.0058 B pass
Refuse a share with no targetPOST /v1/shares 4000.0053 B pass
Refuse a share body that is not JSONPOST /v1/shares 4001.0053 B pass
Refuse a password of seven charactersPOST /v1/shares 4001.0047 B pass
Refuse a negative number of daysPOST /v1/shares 4000.0053 B pass
Refuse an expiry that is not a numberPOST /v1/shares 4001.0053 B pass
An empty password means no passwordPOST /v1/shares 201116461 B pass
Revoke the link with the empty passwordDELETE /v1/shares/b547939cdac1792813f99ee557790505 20025.0473 B pass
Make the artifact t-looks share 10 as an agentPUT /internal/v1/agents/5/gateway/artifacts 20121.0108 B pass
Create a link to changePOST /v1/shares 20114.0461 B pass
Refuse a change to a link that does not existPATCH /v1/shares/00000000000000000000000000000000 4048.0025 B pass
Refuse a change whose body is a listPATCH /v1/shares/7196cbe2580c89d04fcc7f2e2e3562d3 4001.0037 B pass
Refuse a password of five charactersPATCH /v1/shares/7196cbe2580c89d04fcc7f2e2e3562d3 4000.0047 B pass
Refuse a download setting that is not true or falsePATCH /v1/shares/7196cbe2580c89d04fcc7f2e2e3562d3 4000.0043 B pass
Refuse an expiry that is not a numberPATCH /v1/shares/7196cbe2580c89d04fcc7f2e2e3562d3 4001.0065 B pass
Refuse a version that is not a numberPATCH /v1/shares/7196cbe2580c89d04fcc7f2e2e3562d3 4000.0062 B pass
Refuse a change body that is not JSONPATCH /v1/shares/7196cbe2580c89d04fcc7f2e2e3562d3 4001.0037 B pass
An empty change leaves the link as it wasPATCH /v1/shares/7196cbe2580c89d04fcc7f2e2e3562d3 20017.0461 B pass
Revoke the linkDELETE /v1/shares/7196cbe2580c89d04fcc7f2e2e3562d3 20025.0473 B pass
Make the artifact t-looks share 11a as an agentPUT /internal/v1/agents/5/gateway/artifacts 20120.0109 B pass
Make the artifact t-looks share 11b as an agentPUT /internal/v1/agents/5/gateway/artifacts 20136.0109 B pass
Create a first link to artifact aPOST /v1/shares 20126.0462 B pass
Create a second link to artifact aPOST /v1/shares 20116.0462 B pass
Create a link to artifact bPOST /v1/shares 20120.0462 B pass
List the links of artifact aGET /v1/shares?target=artifact:axyn6cktpzhv 2001.00927 B pass
List the links of artifact bGET /v1/shares?target=artifact:ahdbdrh7w54z 2001.00464 B pass
Read the link to artifact a once, to make an eventGET /artifact/25187658c916c798f643349dfb2e3f95/data 20056.0557 B pass
Limit the events to oneGET /v1/shares/25187658c916c798f643349dfb2e3f95/events?limit=1 2001.0098 B pass
A limit of zero is read as oneGET /v1/shares/25187658c916c798f643349dfb2e3f95/events?limit=0 2001.0098 B pass
A limit above the most events is cappedGET /v1/shares/25187658c916c798f643349dfb2e3f95/events?limit=5000 2002.0098 B pass
Refuse a target filter that is not a targetGET /v1/shares?target=bogus 4001.0048 B pass
Refuse a target filter of an unknown kindGET /v1/shares?target=other:x 4000.0048 B pass
A file target with no shares lists nothingGET /v1/shares?target=file:fnope 2001.002 B pass
Revoke the first link to artifact aDELETE /v1/shares/25187658c916c798f643349dfb2e3f95 20024.0474 B pass
Revoke the second link to artifact aDELETE /v1/shares/6918ffccaee02a3a71fe912aa6f91e47 20050.0474 B pass
Revoke the link to artifact bDELETE /v1/shares/9908e0bb906eae4a511a6dca45b473d9 20042.0474 B pass
Register agent 5 through its VM hello, so the agent routes take its uploadsPOST /internal/v1/agents/5/hello 2003.0055.0 KiB pass
Store a picture blob for the artifactPUT /internal/v1/agents/5/gateway/artifacts/blobs?content_type=image/png 20186.073 B pass
Make the artifact t-looks share 12 as an agentPUT /internal/v1/agents/5/gateway/artifacts 20137.0109 B pass
Create a link to the picture and frame artifactPOST /v1/shares 20178.0461 B pass
Read the picture blob through the linkGET /artifact/e26342d9933ad0e9822f26846cebee61/blobs/bbaba9aba10ca9576 2001.0022 B pass
Refuse a blob the artifact does not nameGET /artifact/e26342d9933ad0e9822f26846cebee61/blobs/b0000000000000000 4041.0019 B pass
Refuse a blob name with a slash in itGET /artifact/e26342d9933ad0e9822f26846cebee61/blobs/x/y 4041.0019 B pass
Read the HTML panel's page through the linkGET /artifact/e26342d9933ad0e9822f26846cebee61/frame/page/index.html 2001.0077 B pass
Refuse a frame of a panel that does not existGET /artifact/e26342d9933ad0e9822f26846cebee61/frame/nope/index.html 4041.0021 B pass
Refuse a frame path that climbs out of the panelGET /artifact/e26342d9933ad0e9822f26846cebee61/frame/page/../secret 4041.0019 B pass
The owner gets the content URL of an HTML panelGET /v1/artifacts/adg5djzfccl3/frame?panel=page 2001.00132 B pass
Refuse the owner's frame URL of a panel that is not HTMLGET /v1/artifacts/adg5djzfccl3/frame?panel=words 4041.0030 B pass
Refuse the owner's frame URL of an artifact that does not existGET /v1/artifacts/aunknownid00/frame?panel=page 4042.0028 B pass
Refuse a frame version that is not a numberGET /v1/artifacts/adg5djzfccl3/frame?panel=page&v=x 4000.0038 B pass
Revoke the picture linkDELETE /v1/shares/e26342d9933ad0e9822f26846cebee61 20071.0473 B pass
Delete agent 5 again, so later folders do not see itDELETE /v1/agents/5 2001.0034 B pass
The viewer page answers not built while no console is builtGET /artifact/e3147a278fd73c6082d8c9bc747b28c3 4041.0035 B pass
The viewer page of a missing link answers the sameGET /artifact/00000000000000000000000000000000 4041.0035 B pass
The viewer page of a malformed link answers the sameGET /artifact/not-a-share 4040.0035 B pass
A viewer asset that does not exist is missingGET /artifact/_assets/app.js 4040.0019 B pass
A viewer asset path that climbs out is missingGET /artifact/_assets/../secret 4040.0019 B pass
A path under a live link that does not exist is missingGET /artifact/e3147a278fd73c6082d8c9bc747b28c3/nope 4040.0028 B pass
Read the appearance (the default look)GET /v1/appearance 2001.00112 B pass
Save a chosen built-in lookPUT /v1/appearance 2000.00115 B pass
Refuse a look that names no known themePUT /v1/appearance 4002.0043 B pass
Save a valid custom themePUT /v1/appearance/themes/my-theme 2001.00250 B pass
Refuse a custom theme that takes a built-in idPUT /v1/appearance/themes/loom-clay 4001.0068 B pass
Refuse a theme whose body id differs from the URLPUT /v1/appearance/themes/other 4001.0056 B pass
Delete the custom themeDELETE /v1/appearance/themes/my-theme 2000.00115 B pass
Put the default look backPUT /v1/appearance 2001.00112 B pass
List the artifactsGET /v1/artifacts 2001.001.7 KiB pass
Read an artifact that does not existGET /v1/artifacts/aunknownid00 4041.0039 B pass
List the share linksGET /v1/shares 2000.007.3 KiB pass
Refuse a share link for an artifact that does not existPOST /v1/shares 4041.0036 B pass
Read the data of an artifact that does not existGET /artifact/0123456789abcdef0123456789abcdef/data 4040.0019 B pass
incidents4 requests
RequestCallStatusmsSizeResult
List the project's incidentsGET /v1/projects/pr11/incidents 2001.0016 B pass
An incident the project does not haveGET /v1/projects/pr11/incidents/no-such-incident 4041.0028 B pass
Resolving an incident the project does not havePOST /v1/projects/pr11/incidents/no-such-incident/resolve 4040.0028 B pass
List the project's recorded landingsGET /v1/projects/pr11/landings 2001.00200 B pass
tool-library4 requests
RequestCallStatusmsSizeResult
The tool library's top-level groups, and the route groups it leaves outGET /v1/tool-library 2004.0010.4 KiB pass
A group's children: the deploy entries, with their kind and summaryGET /v1/tool-library?path=deploy 2002.00722 B pass
Search the tool library by words: rollback finds the deploy and the Kubernetes undoGET /v1/tool-library/search?q=rollback 2003.00549 B pass
One entry: its schema, its policy, and the seats that may use itGET /v1/tool-library/entry?path=deploy.rollback 2003.002.6 KiB pass
ephemeral7 requests
RequestCallStatusmsSizeResult
The ephemeral instances of the project are listedGET /v1/projects/pr6/ephemeral 2001.002 B pass
Refuse an instance of an environment that is not ephemeralPOST /v1/projects/pr6/ephemeral 4091.0036 B pass
Refuse a start that names no subjectPOST /v1/projects/pr6/ephemeral 4001.0028 B pass
Refuse an instance that is not thereGET /v1/ephemeral/eph-probe-missing 4042.0028 B pass
Refuse to tear down an instance that is not thereDELETE /v1/ephemeral/eph-probe-missing 4040.0041 B pass
Refuse the instances of a project that does not existGET /v1/projects/no-such-project/ephemeral 4041.0027 B pass
Check a project that does not exist is not foundPOST /v1/projects/no-such-project/ephemeral/against 4041.0027 B pass
internal264 requests
RequestCallStatusmsSizeResult
Refuse the hello without the internal tokenPOST /internal/v1/agents/61003/hello 4031.0043 B pass
Refuse the message without the internal tokenPOST /internal/v1/agents/61003/message 4031.0043 B pass
Refuse the gone without the internal tokenPOST /internal/v1/agents/61003/gone 4030.0043 B pass
Refuse the egress without the internal tokenPOST /internal/v1/agents/61003/egress 4031.0043 B pass
Refuse the egress check without the internal tokenPOST /internal/egress/check 4031.0043 B pass
Refuse the egress cert without the internal tokenPOST /internal/egress/cert 4031.0043 B pass
Refuse the egress inject without the internal tokenPOST /internal/egress/inject 4031.0043 B pass
Refuse the decisions without the internal tokenPOST /internal/v1/agents/61003/gateway/decisions 4031.0043 B pass
Refuse the e2b sandbox without the internal tokenGET /internal/e2b/sandboxes/sb-t-internal-none 4031.0043 B pass
Refuse the anthropic messages without the internal tokenPOST /internal/v1/agents/61003/gateway/anthropic/v1/messages 4031.0043 B pass
Refuse the anthropic socket without the internal tokenGET /internal/v1/agents/61003/gateway/anthropic/v1/messages 4030.0043 B pass
Refuse the anthropic models without the internal tokenGET /internal/v1/agents/61003/gateway/anthropic/v1/models 4031.0043 B pass
Refuse the openai responses without the internal tokenPOST /internal/v1/agents/61003/gateway/openai/v1/responses 4031.0043 B pass
Refuse the openai responses socket without the internal tokenGET /internal/v1/agents/61003/gateway/openai/v1/responses 4030.0043 B pass
Refuse the openai chat without the internal tokenPOST /internal/v1/agents/61003/gateway/openai/v1/chat/completions 4031.0043 B pass
Refuse the openai models without the internal tokenGET /internal/v1/agents/61003/gateway/openai/v1/models 4032.0043 B pass
Refuse the openrouter chat without the internal tokenPOST /internal/v1/agents/61003/gateway/openrouter/v1/chat/completions 4031.0043 B pass
Refuse the openrouter messages without the internal tokenPOST /internal/v1/agents/61003/gateway/openrouter/v1/messages 4031.0043 B pass
Refuse the openrouter models without the internal tokenGET /internal/v1/agents/61003/gateway/openrouter/v1/models 4031.0043 B pass
Refuse the opencode chat without the internal tokenPOST /internal/v1/agents/61003/gateway/opencode/v1/chat/completions 4031.0043 B pass
Refuse the opencode responses without the internal tokenPOST /internal/v1/agents/61003/gateway/opencode/v1/responses 4031.0043 B pass
Refuse the opencode messages without the internal tokenPOST /internal/v1/agents/61003/gateway/opencode/v1/messages 4031.0043 B pass
Refuse the opencode models without the internal tokenGET /internal/v1/agents/61003/gateway/opencode/v1/models 4030.0043 B pass
Refuse the gemini call without the internal tokenPOST /internal/v1/agents/61003/gateway/gemini/v1beta/models/gemini-x:generateContent 4030.0043 B pass
Refuse the gemini models without the internal tokenGET /internal/v1/agents/61003/gateway/gemini/v1beta/models 4031.0043 B pass
Refuse the vendor read without the internal tokenGET /internal/v1/agents/61003/gateway/vendor/augment/v1/sessions 4032.0043 B pass
Refuse the vendor call without the internal tokenPOST /internal/v1/agents/61003/gateway/vendor/augment/v1/sessions 4030.0043 B pass
Refuse the file upload without the internal tokenPUT /internal/v1/agents/61003/gateway/files?name=t-internal.txt 4031.0043 B pass
Refuse the file download without the internal tokenGET /internal/v1/agents/61003/gateway/files/fb-t-internal-none 4030.0043 B pass
Refuse the artifact create without the internal tokenPUT /internal/v1/agents/61003/gateway/artifacts 4031.0043 B pass
Refuse the blob upload without the internal tokenPUT /internal/v1/agents/61003/gateway/artifacts/blobs?content_type=text/plain 4031.0043 B pass
Refuse the artifact version without the internal tokenPUT /internal/v1/agents/61003/gateway/artifacts/art-t-internal-none 4031.0043 B pass
Refuse the artifact read without the internal tokenGET /internal/v1/agents/61003/gateway/artifacts/art-t-internal-none 4030.0043 B pass
Refuse the artifact share without the internal tokenPOST /internal/v1/agents/61003/gateway/artifacts/art-t-internal-none/share 4030.0043 B pass
Refuse the weft read without the internal tokenGET /internal/v1/agents/61003/gateway/weft/wire/objects/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 4030.0043 B pass
Refuse the weft write without the internal tokenPOST /internal/v1/agents/61003/gateway/weft/wire/want 4032.0043 B pass
Refuse the weft upload without the internal tokenPUT /internal/v1/agents/61003/gateway/weft/wire/objects/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 4030.0043 B pass
Refuse a node cache's node weft read without a node signatureGET /internal/v1/nodes/1/weft/wire/objects/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 40313.030 B pass
Refuse a node cache's node weft batch without a node signaturePOST /internal/v1/nodes/1/weft/wire/want 4031.0030 B pass
Refuse a node cache's node weft upload without a node signaturePUT /internal/v1/nodes/1/weft/wire/objects/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 4031.0030 B pass
Refuse the lease open without the internal tokenPOST /internal/v1/agents/61003/stations/s-t-internal-none/leases 4031.0043 B pass
Refuse the lease release without the internal tokenDELETE /internal/v1/agents/61003/stations/s-t-internal-none/leases/l-t-internal-none 4030.0043 B pass
Refuse the hello with a wrong internal tokenPOST /internal/v1/agents/61003/hello 4031.0043 B pass
Refuse the message with a wrong internal tokenPOST /internal/v1/agents/61003/message 4031.0043 B pass
Refuse the gone with a wrong internal tokenPOST /internal/v1/agents/61003/gone 4030.0043 B pass
Refuse the egress with a wrong internal tokenPOST /internal/v1/agents/61003/egress 4030.0043 B pass
Refuse the egress check with a wrong internal tokenPOST /internal/egress/check 4031.0043 B pass
Refuse the egress cert with a wrong internal tokenPOST /internal/egress/cert 4031.0043 B pass
Refuse the egress inject with a wrong internal tokenPOST /internal/egress/inject 4031.0043 B pass
Refuse the decisions with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/decisions 4031.0043 B pass
Refuse the e2b sandbox with a wrong internal tokenGET /internal/e2b/sandboxes/sb-t-internal-none 4031.0043 B pass
Refuse the anthropic messages with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/anthropic/v1/messages 4031.0043 B pass
Refuse the anthropic socket with a wrong internal tokenGET /internal/v1/agents/61003/gateway/anthropic/v1/messages 4030.0043 B pass
Refuse the anthropic models with a wrong internal tokenGET /internal/v1/agents/61003/gateway/anthropic/v1/models 4030.0043 B pass
Refuse the openai responses with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/openai/v1/responses 4031.0043 B pass
Refuse the openai responses socket with a wrong internal tokenGET /internal/v1/agents/61003/gateway/openai/v1/responses 4033.0043 B pass
Refuse the openai chat with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/openai/v1/chat/completions 4031.0043 B pass
Refuse the openai models with a wrong internal tokenGET /internal/v1/agents/61003/gateway/openai/v1/models 4031.0043 B pass
Refuse the openrouter chat with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/openrouter/v1/chat/completions 4030.0043 B pass
Refuse the openrouter messages with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/openrouter/v1/messages 4031.0043 B pass
Refuse the openrouter models with a wrong internal tokenGET /internal/v1/agents/61003/gateway/openrouter/v1/models 4031.0043 B pass
Refuse the opencode chat with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/opencode/v1/chat/completions 4031.0043 B pass
Refuse the opencode responses with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/opencode/v1/responses 4031.0043 B pass
Refuse the opencode messages with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/opencode/v1/messages 4030.0043 B pass
Refuse the opencode models with a wrong internal tokenGET /internal/v1/agents/61003/gateway/opencode/v1/models 4032.0043 B pass
Refuse the gemini call with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/gemini/v1beta/models/gemini-x:generateContent 4031.0043 B pass
Refuse the gemini models with a wrong internal tokenGET /internal/v1/agents/61003/gateway/gemini/v1beta/models 4031.0043 B pass
Refuse the vendor read with a wrong internal tokenGET /internal/v1/agents/61003/gateway/vendor/augment/v1/sessions 4031.0043 B pass
Refuse the vendor call with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/vendor/augment/v1/sessions 4031.0043 B pass
Refuse the file upload with a wrong internal tokenPUT /internal/v1/agents/61003/gateway/files?name=t-internal.txt 4031.0043 B pass
Refuse the file download with a wrong internal tokenGET /internal/v1/agents/61003/gateway/files/fb-t-internal-none 4032.0043 B pass
Refuse the artifact create with a wrong internal tokenPUT /internal/v1/agents/61003/gateway/artifacts 4031.0043 B pass
Refuse the blob upload with a wrong internal tokenPUT /internal/v1/agents/61003/gateway/artifacts/blobs?content_type=text/plain 4031.0043 B pass
Refuse the artifact version with a wrong internal tokenPUT /internal/v1/agents/61003/gateway/artifacts/art-t-internal-none 4032.0043 B pass
Refuse the artifact read with a wrong internal tokenGET /internal/v1/agents/61003/gateway/artifacts/art-t-internal-none 4031.0043 B pass
Refuse the artifact share with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/artifacts/art-t-internal-none/share 4031.0043 B pass
Refuse the weft read with a wrong internal tokenGET /internal/v1/agents/61003/gateway/weft/wire/objects/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 4030.0043 B pass
Refuse the weft write with a wrong internal tokenPOST /internal/v1/agents/61003/gateway/weft/wire/want 4031.0043 B pass
Refuse the weft upload with a wrong internal tokenPUT /internal/v1/agents/61003/gateway/weft/wire/objects/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 4031.0043 B pass
Refuse a node cache's node weft read with an internal token, no node signatureGET /internal/v1/nodes/1/weft/wire/objects/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 4031.0030 B pass
Refuse a node cache's node weft batch with an internal token, no node signaturePOST /internal/v1/nodes/1/weft/wire/want 4031.0030 B pass
Refuse a node cache's node weft upload with an internal token, no node signaturePUT /internal/v1/nodes/1/weft/wire/objects/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 4031.0030 B pass
Refuse the lease open with a wrong internal tokenPOST /internal/v1/agents/61003/stations/s-t-internal-none/leases 4032.0043 B pass
Refuse the lease release with a wrong internal tokenDELETE /internal/v1/agents/61003/stations/s-t-internal-none/leases/l-t-internal-none 4031.0043 B pass
Answer 404 for an e2b sandbox the hub does not knowGET /internal/e2b/sandboxes/sb-t-internal-none 4041.0027 B pass
Refuse a hello whose CID is not a numberPOST /internal/v1/agents/abc/hello 4000.0036 B pass
Refuse a hello whose CID is past the 64-bit rangePOST /internal/v1/agents/99999999999999999999999/hello 4001.0036 B pass
Refuse a guest message with a malformed bodyPOST /internal/v1/agents/61001/message 4001.00106 B pass
Refuse a guest message with an unknown typePOST /internal/v1/agents/61001/message 4001.00267 B pass
Refuse a tool request from an agent the hub never heard ofPOST /internal/v1/agents/61001/message 2001.00105 B pass
Answer a model call from an agent the hub never heard of with an errorPOST /internal/v1/agents/61001/message 2001.0076 B pass
Ignore a tool report from an agent the hub never heard ofPOST /internal/v1/agents/61001/message 2002.0014 B pass
Ignore a work report from an agent the hub never heard ofPOST /internal/v1/agents/61001/message 2001.0014 B pass
Ignore a heartbeat from an agent the hub never heard ofPOST /internal/v1/agents/61001/message 2001.0014 B pass
Ignore a compaction notice from an agent the hub never heard ofPOST /internal/v1/agents/61001/message 2000.0014 B pass
Ignore a stats report from an agent the hub never heard ofPOST /internal/v1/agents/61001/message 2001.0014 B pass
Ignore an engine update from an agent the hub never heard ofPOST /internal/v1/agents/61001/message 2001.0014 B pass
Ignore a bye from an agent the hub never heard ofPOST /internal/v1/agents/61001/message 2001.0014 B pass
Accept a gone for an agent the hub never heard ofPOST /internal/v1/agents/61001/gone 2001.002 B pass
Refuse an egress check for an agent the hub never heard ofPOST /internal/egress/check 2001.0069 B pass
Refuse a Messages call for an agent the hub never heard ofPOST /internal/v1/agents/61001/gateway/anthropic/v1/messages 4042.0025 B pass
Refuse a model list for an agent the hub never heard ofGET /internal/v1/agents/61001/gateway/openai/v1/models 4041.0025 B pass
Refuse a decision for an agent the hub never heard ofPOST /internal/v1/agents/61001/gateway/decisions 4040.0025 B pass
Refuse a vendor read for an agent the hub never heard ofGET /internal/v1/agents/61001/gateway/vendor/augment/v1/sessions 4040.0025 B pass
Refuse a Weft statement for an agent the hub never heard ofPOST /internal/v1/agents/61001/gateway/weft/records/unsigned 4091.0026 B pass
Refuse an egress certificate for a host that is not interceptedPOST /internal/egress/cert 4031.0055 B pass
Refuse a file upload from an agent the hub never heard ofPUT /internal/v1/agents/61001/gateway/files?name=t-ghost-file.txt 4040.0025 B pass
Refuse a blob upload from an agent the hub never heard ofPUT /internal/v1/agents/61001/gateway/artifacts/blobs?content_type=text/plain 4041.0025 B pass
Register agent 61002 with the hubPOST /internal/v1/agents/61002/hello 2004.0055.0 KiB pass
Read agent 61002 backGET /v1/agents/61002 2001.00395 B pass
Ignore a heartbeat from an agent with no sessionPOST /internal/v1/agents/61002/message 2001.0014 B pass
Re-register the agent with no project with the hub and keep its profilePOST /internal/v1/agents/61002/hello 2002.0055.0 KiB pass
Delete agent 61002 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/61002 2000.0034 B pass
Create a project for t-internal on a project ü 漢字POST /v1/projects 20111.0725 B pass
Register agent 61003 with the hubPOST /internal/v1/agents/61003/hello 2004.0055.0 KiB pass
Read agent 61003 backGET /v1/agents/61003 2003.00395 B pass
Answer the read tool request as allowPOST /internal/v1/agents/61003/message 2001.0094 B pass
Allow an edit in the default autonomous modePOST /internal/v1/agents/61003/message 2001.0094 B pass
Refuse a tool no law permitsPOST /internal/v1/agents/61003/message 2001.00142 B pass
Accept a tool report for a tool the agent ranPOST /internal/v1/agents/61003/message 2000.0014 B pass
Record a compaction of the agent's conversationPOST /internal/v1/agents/61003/message 2001.0014 B pass
Record stats for an agent with no runPOST /internal/v1/agents/61003/message 2001.0014 B pass
Record an engine update under a work itemPOST /internal/v1/agents/61003/message 2001.0014 B pass
Ignore a work report for work the agent is not doingPOST /internal/v1/agents/61003/message 2001.0014 B pass
Ignore a heartbeat from an agent on a projectPOST /internal/v1/agents/61003/message 2003.0014 B pass
Refuse a message whose tool request has a non-string call idPOST /internal/v1/agents/61003/message 4001.0056 B pass
Refuse a message whose tool input is missingPOST /internal/v1/agents/61003/message 4001.0033 B pass
Refuse a Responses call through OpenCode for a model that is not a Responses modelPOST /internal/v1/agents/61003/gateway/opencode/v1/responses 4000.00118 B pass
Refuse a Messages call through OpenCode for a model OpenCode serves on chatPOST /internal/v1/agents/61003/gateway/opencode/v1/messages 4001.00132 B pass
List the Anthropic models for the agentGET /internal/v1/agents/61003/gateway/anthropic/v1/models 2001.00233 B pass
List the OpenAI models for the agentGET /internal/v1/agents/61003/gateway/openai/v1/models 2000.00143 B pass
List the OpenRouter models for the agentGET /internal/v1/agents/61003/gateway/openrouter/v1/models 2001.0027 B pass
List the OpenCode models for the agentGET /internal/v1/agents/61003/gateway/opencode/v1/models 2001.0027 B pass
List the Gemini models for the agentGET /internal/v1/agents/61003/gateway/gemini/v1beta/models 2001.0013 B pass
Refuse a Messages socket for an agent when the provider has no keyGET /internal/v1/agents/61003/gateway/anthropic/v1/messages 50347.047 B pass
Refuse a Responses socket for an agent when the provider has no keyGET /internal/v1/agents/61003/gateway/openai/v1/responses 50325.044 B pass
Refuse a plain GET on a socket route that only accepts an upgradeGET /internal/v1/agents/61003/gateway/anthropic/v1/messages 4051.0038 B pass
Refuse a decision with no decision modelPOST /internal/v1/agents/61003/gateway/decisions 4001.00106 B pass
Refuse a decision whose body lacks the inputPOST /internal/v1/agents/61003/gateway/decisions 4001.0062 B pass
Refuse a vendor read while the Auggie engine is offGET /internal/v1/agents/61003/gateway/vendor/augment/v1/sessions 4032.0086 B pass
Refuse a vendor call with a vendor that does not existPOST /internal/v1/agents/61003/gateway/vendor/nosuch/v1/x 4041.0026 B pass
Refuse a vendor path that is not a plain pathGET /internal/v1/agents/61003/gateway/vendor/augment/../secret 4001.0047 B pass
Refuse a vendor write while the Auggie engine is offPOST /internal/v1/agents/61003/gateway/vendor/augment/v1/sessions 4031.0086 B pass
Store a file the agent hands inPUT /internal/v1/agents/61003/gateway/files?name=t-internal-note.txt&title=t-internal%20note 20138.0122 B pass
Refuse a file upload without a namePUT /internal/v1/agents/61003/gateway/files 4001.0028 B pass
Let the agent download the file it storedGET /internal/v1/agents/61003/gateway/files/fd8c724c0d660 2000.0029 B pass
Answer 404 for a file the agent cannot readGET /internal/v1/agents/61003/gateway/files/fb-t-internal-none 4041.0024 B pass
Store a data blob an artifact readsPUT /internal/v1/agents/61003/gateway/artifacts/blobs?content_type=text/plain 20114.073 B pass
Refuse an artifact with no panelsPUT /internal/v1/agents/61003/gateway/artifacts 40018.0105 B pass
Refuse an artifact whose panel span is not a grid spanPUT /internal/v1/agents/61003/gateway/artifacts 40017.096 B pass
Refuse an artifact without a specPUT /internal/v1/agents/61003/gateway/artifacts 4001.0051 B pass
Create an artifact on the projectPUT /internal/v1/agents/61003/gateway/artifacts 20142.0111 B pass
Read the artifact backGET /internal/v1/agents/61003/gateway/artifacts/a7vzrv6hfia7 2001.00330 B pass
Add a version to the artifactPUT /internal/v1/agents/61003/gateway/artifacts/a7vzrv6hfia7 20122.0116 B pass
Read an older version of the artifactGET /internal/v1/agents/61003/gateway/artifacts/a7vzrv6hfia7?v=1 2001.00330 B pass
Answer 404 for a version the artifact does not haveGET /internal/v1/agents/61003/gateway/artifacts/a7vzrv6hfia7?v=9 4041.0028 B pass
Ask the owner to share the artifactPOST /internal/v1/agents/61003/gateway/artifacts/a7vzrv6hfia7/share 2021.0035 B pass
Refuse a share request with an empty reasonPOST /internal/v1/agents/61003/gateway/artifacts/a7vzrv6hfia7/share 4000.0076 B pass
Read the share request on the owner's approvalsGET /v1/approvals 2000.00640 B pass
Owner declines the share requestPOST /v1/approvals/a1 20017.0654 B pass
Answer 404 for a Weft object the hub does not holdGET /internal/v1/agents/61003/gateway/weft/wire/objects/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 4041.0026 B pass
Refuse a Weft object whose bytes do not match its hashPUT /internal/v1/agents/61003/gateway/weft/wire/objects/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 4002.0060 B pass
Refuse a Weft info without hashesPOST /internal/v1/agents/61003/gateway/weft/wire/info 4001.0029 B pass
Refuse a Weft want for a revision that does not existPOST /internal/v1/agents/61003/gateway/weft/wire/want 4041.0039 B pass
Refuse a Weft statement the agent does not sayPOST /internal/v1/agents/61003/gateway/weft/records/unsigned 4031.0048 B pass
Refuse an agent's attest without its revisionPOST /internal/v1/agents/61003/gateway/weft/records/unsigned 40930.050 B pass
Refuse an agent the hub's own Weft records routePOST /internal/v1/agents/61003/gateway/weft/records 4031.0035 B pass
Refuse an agent the hub's Weft lanesGET /internal/v1/agents/61003/gateway/weft/lanes 4031.0035 B pass
Allow an agent a connection the laws permitPOST /internal/egress/check 2001.0057 B pass
Record an outbound connection of the agentPOST /internal/v1/agents/61003/egress 2001.002 B pass
Refuse a certificate for a host that is not interceptedPOST /internal/egress/cert 4031.0055 B pass
Answer an egress inject with no matching rulePOST /internal/egress/inject 2000.002 B pass
Refuse an egress check whose body is malformedPOST /internal/egress/check 4001.0089 B pass
Refuse an egress check whose CID is textPOST /internal/egress/check 4001.0072 B pass
Read the settings before the fetch blocklist changeGET /v1/settings 2001.001.2 KiB pass
Block a host on the fetch blocklistPUT /v1/settings 2006.001.2 KiB pass
Refuse a connection to a host on the fetch blocklistPOST /internal/egress/check 2001.00114 B pass
Refuse a connection to a subdomain of a blocked hostPOST /internal/egress/check 2001.00118 B pass
Restore the fetch blocklistPUT /v1/settings 2006.001.2 KiB pass
Allow the host again once the blocklist is restoredPOST /internal/egress/check 2002.0057 B pass
Refuse a lease on a workstation that does not existPOST /internal/v1/agents/61003/stations/s-t-internal-none/leases 4041.0031 B pass
Refuse a lease with an unknown kindPOST /internal/v1/agents/61003/stations/s-t-internal-none/leases 4001.00126 B pass
Refuse a lease without a kindPOST /internal/v1/agents/61003/stations/s-t-internal-none/leases 4001.0061 B pass
Answer 404 for releasing a lease that does not existDELETE /internal/v1/agents/61003/stations/s-t-internal-none/leases/l-t-internal-none 4041.0025 B pass
Read agent 61003 backGET /v1/agents/61003 2000.00448 B pass
Delete agent 61003 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/61003 2001.0034 B pass
Create a project for t-internal approval approvedPOST /v1/projects 20120.0725 B pass
Register agent 61004 with the hubPOST /internal/v1/agents/61004/hello 2003.0055.0 KiB pass
Set the agent to ask before a writePUT /v1/agents/61004/permissions 20050.027 B pass
Read the agent's permission modeGET /v1/agents/61004/permissions 2001.0031 B pass
Hold a write until the owner approves itPOST /internal/v1/agents/61004/message 2001.00195 B pass
The owner sees the held write as pendingGET /v1/approvals 2001.00911 B pass
Owner approves the held writePOST /v1/approvals/a2 20025.0255 B pass
Run the approved write when the agent runs it againPOST /internal/v1/agents/61004/message 2002.0095 B pass
Hold the same write again once its approval is usedPOST /internal/v1/agents/61004/message 2002.00195 B pass
The used approval reads back as usedGET /v1/approvals 2001.001.1 KiB pass
Refuse to decide an approval that is already usedPOST /v1/approvals/a2 4090.0044 B pass
Owner declines the second held writePOST /v1/approvals/a3 20029.0261 B pass
Answer 404 for an approval the hub does not holdPOST /v1/approvals/a-t-internal-none 4040.0028 B pass
Delete agent 61004 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/61004 2000.0034 B pass
Create a project for t-internal approval deniedPOST /v1/projects 20116.0717 B pass
Register agent 61005 with the hubPOST /internal/v1/agents/61005/hello 2003.0055.0 KiB pass
Set the agent to ask before a commandPUT /v1/agents/61005/permissions 20033.027 B pass
Hold a command until the owner decidesPOST /internal/v1/agents/61005/message 2002.00195 B pass
Owner declines the held commandPOST /v1/approvals/a4 200114187 B pass
The declined command reads back as deniedGET /v1/approvals 2001.001.3 KiB pass
Refuse the declined command again until the owner decides a new holdPOST /internal/v1/agents/61005/message 2001.00195 B pass
Delete agent 61005 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/61005 2000.0034 B pass
Create a project for t-internal read onlyPOST /v1/projects 20110.0693 B pass
Register agent 61006 with the hubPOST /internal/v1/agents/61006/hello 2002.0055.0 KiB pass
Set the agent to read onlyPUT /v1/agents/61006/permissions 20033.033 B pass
Answer the edit tool request as denyPOST /internal/v1/agents/61006/message 2001.00136 B pass
Answer the bash tool request as denyPOST /internal/v1/agents/61006/message 2001.00135 B pass
Allow a read in read-only modePOST /internal/v1/agents/61006/message 2003.0094 B pass
Read the agent's permission mode backGET /v1/agents/61006/permissions 2001.0037 B pass
Delete agent 61006 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/61006 2001.0034 B pass
Create a project for t-internal engine approvalPOST /v1/projects 20114.0717 B pass
Register agent 61007 with the hubPOST /internal/v1/agents/61007/hello 2005.0055.0 KiB pass
Refuse an engine request that is not a known toolPOST /internal/v1/agents/61007/message 2001.00142 B pass
Set the agent to ask before an engine requestPUT /v1/agents/61007/permissions 20010.027 B pass
Hold an ACP engine request for the ownerPOST /internal/v1/agents/61007/message 2003.00149 B pass
Owner approves the held engine requestPOST /v1/approvals/a6 2009.00242 B pass
Run the approved engine request when the engine asks againPOST /internal/v1/agents/61007/message 2001.0094 B pass
Set the harness to one without ACP supportPOST /internal/v1/agents/61007/hello 2002.0054.8 KiB pass
Refuse an engine request from a harness without ACP supportPOST /internal/v1/agents/61007/message 2001.00194 B pass
Delete agent 61007 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/61007 2001.0034 B pass
Create a project for t-internal stop allPOST /v1/projects 20110.0689 B pass
Register agent 61008 with the hubPOST /internal/v1/agents/61008/hello 2003.0055.0 KiB pass
Stop the plazaPOST /v1/plaza/stop 2002.0079 B pass
Hold a model call while the plaza is stoppedPOST /internal/v1/agents/61008/message 2001.00132 B pass
Hold a Messages call while the plaza is stoppedPOST /internal/v1/agents/61008/gateway/anthropic/v1/messages 4091.0073 B pass
Hold a Weft write while the plaza is stoppedPOST /internal/v1/agents/61008/gateway/weft/records/unsigned 4230.0048 B pass
Hold a vendor read while the plaza is stoppedGET /internal/v1/agents/61008/gateway/vendor/augment/v1/sessions 4091.0073 B pass
Resume the plazaPOST /v1/plaza/resume 2003.0080 B pass
Answer the model call again once the plaza resumesPOST /internal/v1/agents/61008/message 20013.0146 B pass
Delete agent 61008 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/61008 2001.0034 B pass
Create a project for t-internal paused projectPOST /v1/projects 20121.0713 B pass
Register agent 61009 with the hubPOST /internal/v1/agents/61009/hello 2003.0055.0 KiB pass
Pause the projectPOST /v1/projects/pr18/pause 2001.00786 B pass
Read agent 61009 backGET /v1/agents/61009 2001.00395 B pass
Answer the read tool request as allow: no session, so the pause holds nothingPOST /internal/v1/agents/61009/message 2001.0095 B pass
Take the owner's chat with an agent with no session: the pause holds nothingPOST /v1/agents/61009/chat 2001.0010 B pass
Resume the projectPOST /v1/projects/pr18/resume 2002.00862 B pass
Allow a tool again once the project resumesPOST /internal/v1/agents/61009/message 2003.0095 B pass
Delete agent 61009 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/61009 2001.0034 B pass
Create a project for t-internal gone and backPOST /v1/projects 20129.0709 B pass
Register agent 61010 with the hubPOST /internal/v1/agents/61010/hello 2003.0055.0 KiB pass
Allow a tool while the session is upPOST /internal/v1/agents/61010/message 2001.0094 B pass
The agent's session endsPOST /internal/v1/agents/61010/gone 2000.002 B pass
Read agent 61010 backGET /v1/agents/61010 2001.00449 B pass
Refuse the owner's chat with an offline agentPOST /v1/agents/61010/chat 4092.0028 B pass
A second session end leaves the agent offlinePOST /internal/v1/agents/61010/gone 2001.002 B pass
Read agent 61010 backGET /v1/agents/61010 2001.00449 B pass
The agent registers againPOST /internal/v1/agents/61010/hello 2002.0055.0 KiB pass
Read agent 61010 backGET /v1/agents/61010 2000.00446 B pass
Delete agent 61010 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/61010 2001.0034 B pass
Create a project for t-internal queued workPOST /v1/projects 20121.0701 B pass
Register agent 61011 with the hubPOST /internal/v1/agents/61011/hello 2004.0055.0 KiB pass
Queue work for the agentPOST /v1/agents/61011/chat 2001.0010 B pass
The queued work waits: the agent has no work in progressGET /v1/agents/61011 2001.00395 B pass
Ignore a report for work the agent never startedPOST /internal/v1/agents/61011/message 2001.0014 B pass
Cancel does not reach queued work: nothing is in flightPOST /v1/agents/61011/cancel 2001.0019 B pass
The queued work still waits after the cancelGET /v1/agents/61011 2001.00444 B pass
Delete agent 61011 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/61011 2001.0034 B pass
stations91 requests
RequestCallStatusmsSizeResult
Issue a join code to try a workstation join withPOST /v1/stations/codes 20113.0221 B pass
Refuse a join from the hub's own host even with a live codePOST /v1/stations/join 4031.0095 B pass
List the join codes after a refused joinGET /v1/stations/codes 2002.00125 B pass
Answer 400 to a workstation join whose body does not parsePOST /v1/stations/join 4001.00109 B pass
Refuse a workstation join that names no join codePOST /v1/stations/join 4001.0062 B pass
Revoke the unused join codeDELETE /v1/stations/codes/j1 20016.026 B pass
Revoke a join code a second time: revoking is idempotentDELETE /v1/stations/codes/j1 2007.0026 B pass
List the workstations as an array of viewsGET /v1/stations 2002.002 B pass
Answer 404 for a workstation that does not existGET /v1/stations/w-t-missing 4040.0031 B pass
Answer 404 for a workstation id with a space in itGET /v1/stations/no such 4041.0031 B pass
Answer 404 to a drain of a workstation that does not existPOST /v1/stations/w-t-missing/drain 4041.0031 B pass
Answer 404 to an undrain of a workstation that does not existPOST /v1/stations/w-t-missing/undrain 4041.0031 B pass
Answer 404 to a revoke of a workstation that does not existPOST /v1/stations/w-t-missing/revoke 4042.0031 B pass
Answer 404 to a rename of a workstation that does not existPATCH /v1/stations/w-t-missing 4041.0031 B pass
Refuse a rename body with no namePATCH /v1/stations/w-t-missing 4001.0061 B pass
Answer 404 for the settings of a workstation that does not existGET /v1/stations/w-t-missing/settings 4040.0031 B pass
Answer 404 to saving settings for a workstation that does not existPUT /v1/stations/w-t-missing/settings 4041.0031 B pass
Refuse workstation settings with a frame rate over 5PUT /v1/stations/w-t-missing/settings 4001.0080 B pass
Answer 404 for the leases of a workstation that does not existGET /v1/stations/w-t-missing/leases 4041.0031 B pass
Answer 404 to a lease on a workstation that does not existPOST /v1/stations/w-t-missing/leases 4041.0031 B pass
Refuse a lease that names no agentPOST /v1/stations/w-t-missing/leases 4000.0080 B pass
Refuse a lease of a kind that is not shared or pixelPOST /v1/stations/w-t-missing/leases 4002.00130 B pass
Answer 404 to a release of a lease that does not existDELETE /v1/stations/w-t-missing/leases/l-t-missing 4041.0025 B pass
Answer 404 for the file sync state of a workstation that does not existGET /v1/stations/w-t-missing/sync 4040.0031 B pass
Answer 404 to resuming the sync of a workstation that does not existPOST /v1/stations/w-t-missing/sync/resume 4041.0031 B pass
Refuse a sync resume whose body does not parsePOST /v1/stations/w-t-missing/sync/resume 4000.00122 B pass
Answer 404 for the mirrored files of a workstation that does not existGET /v1/stations/w-t-missing/files?prefix=notes 4040.0031 B pass
Answer 404 to reading a file of a workstation that does not existGET /v1/stations/w-t-missing/files/notes/t-stations.txt 4040.0031 B pass
Answer 404 to writing a file to a workstation that does not existPUT /v1/stations/w-t-missing/files/notes/t-stations.txt 4041.0031 B pass
Answer 404 to deleting a file of a workstation that does not existDELETE /v1/stations/w-t-missing/files/notes/t-stations.txt 4040.0031 B pass
Answer 404 to putting a file of a workstation that does not exist into the LibraryPOST /v1/stations/w-t-missing/files/notes/t-stations.txt 4040.0074 B pass
Read the recording defaults before changing themGET /v1/stations/recording-defaults 2002.0074 B pass
Save new recording defaults for the workstations that join from now onPUT /v1/stations/recording-defaults 2008.0075 B pass
Read back the saved recording defaultsGET /v1/stations/recording-defaults 2001.0075 B pass
Accept the longest retention the hub allowsPUT /v1/stations/recording-defaults 20020.076 B pass
Refuse a retention beyond 3650 daysPUT /v1/stations/recording-defaults 4001.0039 B pass
Refuse a recording frame rate over 5PUT /v1/stations/recording-defaults 4001.0080 B pass
Refuse a recording frame rate that does not fit a bytePUT /v1/stations/recording-defaults 4000.0083 B pass
Refuse recording defaults whose body does not parsePUT /v1/stations/recording-defaults 4001.00120 B pass
Restore the recording defaults the hub had before this folderPUT /v1/stations/recording-defaults 20035.074 B pass
List the recordings of a workstation that has noneGET /v1/stations/recordings?station=w-t-missing 2002.002 B pass
List recordings with a limit over the ceilingGET /v1/stations/recordings?station=w-t-missing&limit=500 2001.002 B pass
Refuse a recordings list whose before is not a timeGET /v1/stations/recordings?before=yesterday 4001.0044 B pass
Answer 404 for a recording that does not existGET /v1/stations/recordings/r0-t-missing 4041.0029 B pass
Answer 404 for a frame of a recording that does not existGET /v1/stations/recordings/r0-t-missing/frames/1 4041.0025 B pass
Refuse a frame number that is not a numberGET /v1/stations/recordings/r0-t-missing/frames/first 4001.0053 B pass
Answer 404 when deleting a recording that does not existDELETE /v1/stations/recordings/r0-t-missing 4041.0029 B pass
Answer 404 when a deleted recording is deleted againDELETE /v1/stations/recordings/r0-t-missing 4041.0029 B pass
List the audit of a workstation with no rowsGET /v1/stations/audit?station=w-t-missing 2002.002 B pass
List no audit rows at a limit of 0GET /v1/stations/audit?limit=0 2001.002 B pass
List the audit with a limit over the ceilingGET /v1/stations/audit?limit=5000 2002.00905 B pass
List the audit newest firstGET /v1/stations/audit?limit=50 2001.00905 B pass
List the audit with a limit that is not a numberGET /v1/stations/audit?limit=lots 2002.00905 B pass
List the workstation VMsGET /v1/stations/vms 2001.002 B pass
Refuse a workstation VM on a node that does not existPOST /v1/stations/vms 4041.0023 B pass
Refuse a workstation VM body that does not parsePOST /v1/stations/vms 4001.00109 B pass
Refuse a workstation VM body with no namePOST /v1/stations/vms 4001.0061 B pass
Refuse a workstation VM name with capital lettersPOST /v1/stations/vms 4004.0079 B pass
Refuse a workstation VM name with non-ASCII lettersPOST /v1/stations/vms 4001.0075 B pass
Refuse a workstation VM name of 64 charactersPOST /v1/stations/vms 4001.00133 B pass
Refuse a workstation VM with no CPUsPOST /v1/stations/vms 4002.0048 B pass
Refuse a workstation VM with more CPUs than the hub allowsPOST /v1/stations/vms 4001.0049 B pass
Pass the CPU ceiling and fail only at noded, which is absentPOST /v1/stations/vms 50262.0101 B pass
Refuse a workstation VM with less RAM than a Linux VM needsPOST /v1/stations/vms 4000.0060 B pass
Refuse a workstation VM with a disk under 8 GiBPOST /v1/stations/vms 4002.0053 B pass
Refuse a workstation VM with a GPU that is neither none, virtual nor vfioPOST /v1/stations/vms 4001.0071 B pass
Refuse a workstation VM on an OS it does not runPOST /v1/stations/vms 4001.0063 B pass
Refuse a Windows VM with no disk imagePOST /v1/stations/vms 4001.0090 B pass
Refuse a Windows VM whose image is a relative pathPOST /v1/stations/vms 4001.0090 B pass
Refuse a macOS VM on a machine that is not an Apple MacPOST /v1/stations/vms 4001.0083 B pass
Refuse a workstation VM backend that is not auto, plaza or qemuPOST /v1/stations/vms 4001.0063 B pass
Refuse a valid Linux VM because noded cannot boot itPOST /v1/stations/vms 50214.0101 B pass
Answer 404 to sleeping a workstation VM that does not existPOST /v1/stations/vms/wv-t-missing/sleep 4040.0042 B pass
Answer 404 to waking a workstation VM that does not existPOST /v1/stations/vms/wv-t-missing/wake 4041.0042 B pass
Answer 404 when removing a workstation VM that does not existDELETE /v1/stations/vms/wv-t-missing 4044.0042 B pass
Answer 404 when a removed workstation VM is removed againDELETE /v1/stations/vms/wv-t-missing 4041.0042 B pass
Refuse the workstation link without a bearer tokenGET /v1/stations/link 4011.0061 B pass
Refuse the workstation link with a token no workstation holdsGET /v1/stations/link 4011.0047 B pass
Refuse the workstation link sent with a Basic schemeGET /v1/stations/link 4011.0061 B pass
Refuse a live screen view that names no sessionGET /v1/stations/w-t-missing/screen 4001.0060 B pass
Refuse a live screen view with more than 15 frames a secondGET /v1/stations/w-t-missing/screen?session=shared&fps=16 4000.0046 B pass
Refuse a live screen view scaled below 0.1GET /v1/stations/w-t-missing/screen?session=shared&scale=0.05 4001.0043 B pass
Answer 404 for the live screen of a workstation that does not existGET /v1/stations/w-t-missing/screen?session=shared 4041.0031 B pass
Answer 404 for the thumbnail of a workstation that does not existGET /v1/stations/w-t-missing/thumbnail?session=shared 4042.0031 B pass
Refuse a takeover socket that names no sessionGET /v1/stations/w-t-missing/control 4001.0060 B pass
Answer 404 for a takeover of a workstation that does not existGET /v1/stations/w-t-missing/control?session=shared 4040.0031 B pass
Refuse an agent's lease on a workstation without the internal tokenPOST /internal/v1/agents/1/stations/w-t-missing/leases 4031.0043 B pass
Refuse an agent's lease with a wrong internal tokenPOST /internal/v1/agents/1/stations/w-t-missing/leases 4031.0043 B pass
Refuse an agent's lease whose agent id is not a numberPOST /internal/v1/agents/abc/stations/w-t-missing/leases 4000.0036 B pass
Refuse an agent's lease whose body names another agentPOST /internal/v1/agents/1/stations/w-t-missing/leases 4001.0062 B pass
Refuse an agent's lease release without the internal tokenDELETE /internal/v1/agents/1/stations/w-t-missing/leases/l-t-missing 4031.0043 B pass
machines3 requests
RequestCallStatusmsSizeResult
List the machines on this plaza with the hub's own machineGET /v1/machines 2001.0058 B pass
Refuse the local machine's facts when noded does not answerGET /v1/machine 5023.00101 B pass
Read the fleet with the hub's machine and no nodedGET /v1/fleet 2001.00295 B pass
volumes6 requests
RequestCallStatusmsSizeResult
Refuse the volume list while no node answersGET /v1/volumes 5021.00101 B pass
Refuse a volume create while no node answersPOST /v1/volumes 5020.00101 B pass
Refuse a volume delete while no node answersDELETE /v1/volumes/t-vol-data 5020.00101 B pass
Refuse a volume delete for a name with a spaceDELETE /v1/volumes/t vol 5021.00101 B pass
Refuse the warm template list while no node answersGET /v1/templates 5021.00101 B pass
Refuse a warm template delete while no node answersDELETE /v1/templates/t-warm-key 5021.00101 B pass
society16 requests
RequestCallStatusmsSizeResult
Register the first agent from its VMPOST /internal/v1/agents/43001/hello 20012.055.0 KiB pass
Register the second agent from its VMPOST /internal/v1/agents/43002/hello 2004.0055.0 KiB pass
Delete agent 43002 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/43002 2000.0034 B pass
Open a project so its tasks can be postedPOST /v1/projects 20142.0674 B pass
A task with no role makes no agora callPOST /v1/tasks 2011.00285 B pass
Refuse a roled task with no projectPOST /v1/tasks 4001.0093 B pass
Refuse a roled task for a project that does not existPOST /v1/tasks 4041.0030 B pass
Open a project for a roled taskPOST /v1/projects 20112.0664 B pass
Post a task with a rolePOST /v1/tasks 2013.00295 B pass
Read the open taskGET /v1/tasks/t9 2000.00295 B pass
Open a project for a task that is withdrawnPOST /v1/projects 20165.0688 B pass
Post a task with a role to withdrawPOST /v1/tasks 2011.00296 B pass
Withdraw the open taskDELETE /v1/tasks/t10 2001.00309 B pass
Refuse to withdraw a task twiceDELETE /v1/tasks/t10 4090.0057 B pass
Read the withdrawn taskGET /v1/tasks/t10 2001.00309 B pass
Delete agent 43001 again, so the hub has no live agent left for the nodes folderDELETE /v1/agents/43001 2001.0034 B pass
runs15 requests
RequestCallStatusmsSizeResult
List the runs with the node unreachableGET /v1/runs 5022.00101 B pass
Start a run with the node unreachablePOST /v1/runs 5021.00101 B pass
Read a run that was never startedGET /v1/runs/t-run-1 5020.00101 B pass
Send input to a run that was never startedPOST /v1/runs/t-run-1/input 5021.00101 B pass
Delete a run that was never startedDELETE /v1/runs/t-run-1 5021.00101 B pass
Delete the same run againDELETE /v1/runs/t-run-1 5020.00101 B pass
Start a run with a body that is not JSON (the hub passes it on)POST /v1/runs 5021.00101 B pass
Read a run with a non-numeric idGET /v1/runs/abc 5020.00101 B pass
Send empty input to a runPOST /v1/runs/t-run-1/input 5020.00101 B pass
Read a run with id zeroGET /v1/runs/0 5022.00101 B pass
Delete a run with a negative idDELETE /v1/runs/-1 5021.00101 B pass
Send unicode input to a run that was never startedPOST /v1/runs/t-run-1/input 5021.00101 B pass
Start a run with an empty objectPOST /v1/runs 5021.00101 B pass
Start a run with no bodyPOST /v1/runs 5021.00101 B pass
After the refused starts, the run list is still unreachableGET /v1/runs 5021.00101 B pass
loops27 requests
RequestCallStatusmsSizeResult
List the loops (none of ours yet)GET /v1/loops 2001.002 B pass
Refuse a loop for an agent that does not existPOST /v1/loops 4001.0027 B pass
Refuse a loop body that is not JSONPOST /v1/loops 4001.0068 B pass
Refuse a loop with no max_runsPOST /v1/loops 4002.0065 B pass
Refuse a loop whose cid is a stringPOST /v1/loops 4001.0085 B pass
Stop a loop that does not existDELETE /v1/loops/l999999 4001.0027 B pass
Register an agent's VM without the internal token: refusedPOST /internal/v1/agents/9101/hello 4031.0043 B pass
Register an agent's VM with a wrong internal token: refusedPOST /internal/v1/agents/9101/hello 4031.0043 B pass
Register an agent with a cid that is not a numberPOST /internal/v1/agents/abc/hello 4001.0036 B pass
Register an agent's VM with the internal token (the agent has no project)POST /internal/v1/agents/9101/hello 2003.0055.0 KiB pass
A loop for an agent with no project is refusedPOST /v1/loops 4000.0081 B pass
No loop for the agent with no project is listedGET /v1/loops 20010.02 B pass
Open a project for the loop's agentPOST /v1/projects 20122.0682 B pass
Start a loop for an agent with no project: refusedPOST /v1/loops 4000.0081 B pass
No loop of an agent with no project is listedGET /v1/loops 2000.002 B pass
Refuse a loop with a blank promptPOST /v1/loops 4001.0056 B pass
Refuse a loop with a prompt of 4001 charactersPOST /v1/loops 4000.0056 B pass
Refuse a loop every zero minutesPOST /v1/loops 4001.0066 B pass
A loop with a unicode prompt is refused for an agent with no projectPOST /v1/loops 4001.0081 B pass
A loop with a 4000-character prompt is refused for an agent with no projectPOST /v1/loops 4001.0081 B pass
Stop a loop that was never started: refusedDELETE /v1/loops/never-started 4002.0033 B pass
Stop a loop that was never started: refusedDELETE /v1/loops/never-started 4001.0033 B pass
Stop a loop that was never started: refusedDELETE /v1/loops/never-started 4000.0033 B pass
Stop a loop that was never started: refusedDELETE /v1/loops/never-started 4001.0033 B pass
No loop of ours is listedGET /v1/loops 2001.002 B pass
Archive the test projectPOST /v1/projects/pr24/archive 2003.00757 B pass
Mark the test agent's session gonePOST /internal/v1/agents/9101/gone 2001.002 B pass
usage36 requests
RequestCallStatusmsSizeResult
Summarize the last 30 days with no windowGET /v1/usage/summary 2001.00252 B pass
Summarize an explicit windowGET /v1/usage/summary?from=0&to=3600000 2001.00234 B pass
Refuse a summary whose from is not a numberGET /v1/usage/summary?from=soon 4002.0053 B pass
Refuse a summary whose to is not a numberGET /v1/usage/summary?to=soon 4001.0051 B pass
Show one hour's usage by modelGET /v1/usage/series?from=0&to=3600000&bucket=hour&by=model 2001.00230 B pass
Show one day's usage by agentGET /v1/usage/series?from=0&to=3600000&bucket=day&by=agent 2000.00231 B pass
Show two hours of usage by roleGET /v1/usage/series?from=0&to=7200000&by=role 2000.00392 B pass
Show usage by providerGET /v1/usage/series?from=0&to=3600000&by=provider 2001.00233 B pass
Refuse a series with an unknown bucketGET /v1/usage/series?from=0&to=3600000&bucket=week 4001.0052 B pass
Refuse a series grouped by an unknown keyGET /v1/usage/series?from=0&to=3600000&by=team 4000.0067 B pass
Refuse a series whose window ends before it startsGET /v1/usage/series?from=2000&to=1000 4001.0042 B pass
Cap a year-long hourly series at 2000 pointsGET /v1/usage/series?from=0&to=9007199254740991&bucket=hour 2003.00336.0 KiB pass
List the newest model calls with no filterGET /v1/usage/calls 2003.0041 B pass
List calls at the limit of 200GET /v1/usage/calls?limit=200 2001.0041 B pass
Refuse a calls page with a limit of zeroGET /v1/usage/calls?limit=0 4000.0044 B pass
Refuse a calls page with a limit above 200GET /v1/usage/calls?limit=201 4000.0046 B pass
Refuse a calls page whose limit is not a numberGET /v1/usage/calls?limit=many 4000.0047 B pass
Refuse a calls page whose before is not a numberGET /v1/usage/calls?before=x 4001.0052 B pass
Refuse a calls page whose cid is not a numberGET /v1/usage/calls?cid=x 4001.0049 B pass
Filter the calls by an encoded model idGET /v1/usage/calls?model=anthropic%2Fclaude-opus-5-5&limit=5 2001.0041 B pass
Filter the calls by agentGET /v1/usage/calls?cid=1&limit=5 2001.0041 B pass
List the usage providers before adding oneGET /v1/usage-providers 2003.002 B pass
Answer 404 when reading a provider that does not existGET /v1/usage-providers/t-usage-hub/usage 4040.0043 B pass
Answer 404 when removing a provider that does not existDELETE /v1/usage-providers/t-usage-hub 4041.0043 B pass
Refuse a usage provider of another kindPOST /v1/usage-providers 4001.0036 B pass
Refuse a usage provider address with a queryPOST /v1/usage-providers 4000.0079 B pass
Refuse a usage provider address that is not httpPOST /v1/usage-providers 4001.0051 B pass
Refuse a usage provider address with credentials in itPOST /v1/usage-providers 4001.0079 B pass
Refuse a usage provider id with capitals and spacesPOST /v1/usage-providers 4001.0042 B pass
Refuse a usage provider with a blank keyPOST /v1/usage-providers 4001.0042 B pass
Refuse a usage provider label longer than 60 charactersPOST /v1/usage-providers 4001.0044 B pass
Refuse a usage provider body with an unknown fieldPOST /v1/usage-providers 4001.00115 B pass
Refuse a usage provider body without a keyPOST /v1/usage-providers 4001.0060 B pass
Refuse a usage provider body that is not JSONPOST /v1/usage-providers 4001.00106 B pass
List the usage providers after the refused addsGET /v1/usage-providers 2000.002 B pass
List the subscription allowance windowsGET /v1/allowances 2000.002 B pass
toolbox14 requests
RequestCallStatusmsSizeResult
Register a session for an agent the owner never spawnedPOST /internal/v1/agents/9001/hello 2005.0055.0 KiB pass
Refuse an agent's hello without the internal tokenPOST /internal/v1/agents/9001/hello 4031.0043 B pass
Refuse an agent's hello with a wrong internal tokenPOST /internal/v1/agents/9001/hello 4031.0043 B pass
The owner's list is an array of discoveries with their fieldsGET /v1/toolbox 2002.002 B pass
Answer 404 when removing a discovery that does not existDELETE /v1/toolbox/d999999 4041.0032 B pass
Answer 404 when removing an id that is not a discoveryDELETE /v1/toolbox/not-a-discovery 4041.0040 B pass
Answer 404 when flagging a discovery that does not existPOST /v1/toolbox/d999999/flag 4041.0032 B pass
Answer 404 when clearing the flag of an unknown discoveryPOST /v1/toolbox/d999999/flag 4041.0032 B pass
Refuse a flag whose body is not JSON, even for an unknown discoveryPOST /v1/toolbox/d999999/flag 4001.00101 B pass
Refuse an agent message without the internal tokenPOST /internal/v1/agents/9001/message 4031.0043 B pass
Deny a tool request from an agent the hub does not knowPOST /internal/v1/agents/9999/message 2001.00111 B pass
Refuse an agent message whose CID is not a numberPOST /internal/v1/agents/abc/message 4001.0036 B pass
Refuse an agent message whose body is not JSONPOST /internal/v1/agents/9001/message 4002.00111 B pass
Record that the test agent's session endedPOST /internal/v1/agents/9001/gone 2001.002 B pass
connectors26 requests
RequestCallStatusmsSizeResult
List the connectors, with unsplash unset and no value anywhereGET /v1/connectors 2001.0026.8 KiB pass
Answer 404 when updating the settings of an unknown connectorPUT /v1/connectors/t-no-such-connector 4041.0046 B pass
Answer 404 when setting a key for an unknown connectorPUT /v1/connectors/t-no-such-connector/secret 4041.0046 B pass
Answer 404 when testing an unknown connectorPOST /v1/connectors/t-no-such-connector/test 4041.0046 B pass
Answer 404 when removing the key of an unknown connectorDELETE /v1/connectors/t-no-such-connector/secret 4041.0046 B pass
Refuse settings whose enabled flag is not a booleanPUT /v1/connectors/unsplash 4001.0090 B pass
Refuse a settings body that is not JSONPUT /v1/connectors/unsplash 4002.0061 B pass
Refuse an empty key valuePUT /v1/connectors/unsplash/secret 4001.0026 B pass
Enable unsplash for two roles and a project, trimming blank entriesPUT /v1/connectors/unsplash 2001.001.5 KiB pass
Set unsplash's key, which the view then shows only as setPUT /v1/connectors/unsplash/secret 20035.01.5 KiB pass
Set one optional field, leaving the key as it isPUT /v1/connectors/unsplash/secret 20062.01.5 KiB pass
Refuse a key for a field unsplash does not havePUT /v1/connectors/unsplash/secret 4000.0053 B pass
Refuse a key body that has no valuePUT /v1/connectors/unsplash/secret 4001.0065 B pass
List the connectors with unsplash configured and enabledGET /v1/connectors 2001.0026.8 KiB pass
Refuse a key request with an empty bodyPUT /v1/connectors/unsplash/secret 4001.0065 B pass
Remove one optional field's value, leaving the keyDELETE /v1/connectors/unsplash/secret?field=app_id 20020.01.5 KiB pass
Remove every credential of unsplash, which is then unconfiguredDELETE /v1/connectors/unsplash/secret 20026.01.5 KiB pass
Answer 404 when removing a key that is not storedDELETE /v1/connectors/unsplash/secret 4041.0050 B pass
Test a connector with no key stored, which reports no key and calls nothing outPOST /v1/connectors/unsplash/test 2001.0052 B pass
Disable unsplash and clear its roles and projects againPUT /v1/connectors/unsplash 2001.001.4 KiB pass
List connector proposals, newest first, as a listGET /v1/connectors/proposals 2001.002 B pass
Answer 404 when reviewing a proposal that does not existPOST /v1/connectors/proposals/cp-999/review 4041.0032 B pass
Refuse a review that does not say whether it approvesPOST /v1/connectors/proposals/cp-999/review 4004.0065 B pass
Refuse a review body that is not JSONPOST /v1/connectors/proposals/cp-999/review 4001.0055 B pass
Refuse a manifest for a connector that does not existPOST /v1/connectors/no-such-connector/manifest 4041.0044 B pass
Refuse a manifest that is not TOMLPOST /v1/connectors/firecrawl/manifest 4001.00157 B pass
reviews8 requests
RequestCallStatusmsSizeResult
Answer 404 for a review run that does not existGET /v1/reviews/r-t-platforms-none 4041.0026 B pass
Answer 404 for the change tree of a review run that does not existGET /v1/reviews/r-t-platforms-none/tree 4041.0026 B pass
A task that does not exist has no review runs to list: 404GET /v1/tasks/t-platforms-unreviewed/reviews 4041.0024 B pass
A task with a unicode id that does not exist answers 404GET /v1/tasks/t-ünicode-✓/reviews 4040.0024 B pass
Answer 404 for a review id that only looks like a runGET /v1/reviews/../r-1.2 4043.0026 B pass
Open a project for the review testsPOST /v1/projects 20150.0656 B pass
Open a task for the review testsPOST /v1/tasks 2011.00314 B pass
A known task nothing has reviewed lists no runs and names the taskGET /v1/tasks/t11/reviews 2001.0024 B pass
upgrades3 requests
RequestCallStatusmsSizeResult
Upgrades of an unknown projectGET /v1/projects/no-such-project/upgrades 4041.0027 B pass
Fix of an advisory for an unknown projectPOST /v1/projects/no-such-project/upgrades/fix 4041.0027 B pass
Run of the upgrades of an unknown projectPOST /v1/projects/no-such-project/upgrades/run 4041.0027 B pass
cves3 requests
RequestCallStatusmsSizeResult
CVE report of an unknown projectGET /v1/projects/no-such-project/cves 4041.0027 B pass
CVE export of an unknown projectGET /v1/projects/no-such-project/cves/export?format=csv 4040.0027 B pass
Poll of the advisory feeds for an unknown projectPOST /v1/projects/no-such-project/cves/poll 4042.0027 B pass
node-link11 requests
RequestCallStatusmsSizeResult
Read this machine's link on a fresh hub: not joined, not runningGET /v1/node-link 2001.0081 B pass
Leave when not joined, which stops nothing and keeps the identityPOST /v1/node-link/leave 2001.0081 B pass
Leave and forget this node's identity when there is nonePOST /v1/node-link/leave 2001.0081 B pass
Refuse a leave body that is not JSONPOST /v1/node-link/leave 4000.0055 B pass
Refuse a join with an empty codePOST /v1/node-link/join 4000.0034 B pass
Refuse a join code with a space in itPOST /v1/node-link/join 4001.0067 B pass
Refuse an option word passed as the join codePOST /v1/node-link/join 4001.0035 B pass
Refuse a join body with no code fieldPOST /v1/node-link/join 4001.0034 B pass
Refuse a join body that is not JSONPOST /v1/node-link/join 4000.0066 B pass
Refuse a well-formed join code the link cannot redeem, without echoing itPOST /v1/node-link/join 40010367 B pass
After the refused joins, this machine is still not joinedGET /v1/node-link 2001.0081 B pass
ide65 requests
RequestCallStatusmsSizeResult
List the IDE's workspacesGET /v1/ide/workspaces 2006.004.6 KiB pass
The platform's own repo is not offered as a treeGET /v1/ide/workspaces/repo:agentplaza@main/tree 4031.0067 B pass
The platform's own repo is not offered as a fileGET /v1/ide/workspaces/repo:agentplaza@main/file?path=README.md 4031.0067 B pass
The platform's second repo is not offered eitherGET /v1/ide/workspaces/repo:agentplaza-mvp@main/tree 4031.0067 B pass
A repo that is not a project's repo is missingGET /v1/ide/workspaces/repo:t-ide-nope@main/tree 4041.0045 B pass
A station that is not online is missingGET /v1/ide/workspaces/station:w999/tree 4042.0037 B pass
An agent with no VM has no workspaceGET /v1/ide/workspaces/agent:999999/tree 4040.0037 B pass
Refuse a workspace id with no kindGET /v1/ide/workspaces/nonsense/tree 4000.0066 B pass
Refuse an agent id with a leading zeroGET /v1/ide/workspaces/agent:007/tree 4001.0068 B pass
Refuse a repo id with no refGET /v1/ide/workspaces/repo:x/tree 4001.0069 B pass
Refuse a repo ref with a double dotGET /v1/ide/workspaces/repo:x@a..b/tree 4001.0069 B pass
Refuse a station id without the wGET /v1/ide/workspaces/station:12/tree 4001.0083 B pass
A write whose body is not JSON to a missing agent is missingPUT /v1/ide/workspaces/agent:999999/file 4041.0037 B pass
A run whose body is not JSON to a missing agent is missingPOST /v1/ide/workspaces/agent:999999/runs 4041.0037 B pass
Refuse a checkpoint restore with a number that is not wholePOST /v1/ide/workspaces/agent:999999/checkpoints/abc/restore 4000.0040 B pass
A checkpoint restore of a missing workspace is missingPOST /v1/ide/workspaces/agent:999999/checkpoints/1/restore 4042.0037 B pass
Search a missing workspaceGET /v1/ide/workspaces/agent:999999/search?q=x 4041.0037 B pass
List the changes of a missing workspaceGET /v1/ide/workspaces/agent:999999/changes?base=HEAD 4041.0037 B pass
List the checkpoints of a missing workspaceGET /v1/ide/workspaces/agent:999999/checkpoints 4041.0037 B pass
Read a run of a missing workspaceGET /v1/ide/workspaces/agent:999999/runs/r1 4040.0037 B pass
Stop a run of a missing workspacePOST /v1/ide/workspaces/agent:999999/runs/r1/stop 4041.0037 B pass
Open a pull request in a missing workspacePOST /v1/ide/workspaces/agent:999999/pulls 4040.0037 B pass
Create a branch in a missing workspacePOST /v1/ide/workspaces/agent:999999/branch 4041.0037 B pass
A pull request in the platform's repo is refusedPOST /v1/ide/workspaces/repo:agentplaza@main/pulls 4031.0067 B pass
A branch in the platform's repo is refusedPOST /v1/ide/workspaces/repo:agentplaza@main/branch 4030.0067 B pass
A pull request in a repo that is not a project's is missingPOST /v1/ide/workspaces/repo:t-ide-nope@main/pulls 4042.0045 B pass
A terminal socket on a missing agent is missingGET /v1/ide/terminal/agent:999999 4041.0037 B pass
A terminal socket on a repo is refused: a repo has no shellGET /v1/ide/terminal/repo:agentplaza@main 4001.00110 B pass
A terminal socket on a malformed id is refusedGET /v1/ide/terminal/nonsense 40017.066 B pass
A terminal socket on a missing station is missingGET /v1/ide/terminal/station:w1 4041.0035 B pass
A write to a missing station is missingPUT /v1/ide/workspaces/station:w1/file 4041.0035 B pass
Hold the plaza with STOP ALLPOST /v1/plaza/stop 2001.0079 B pass
A station's tree is refused while the plaza is heldGET /v1/ide/workspaces/station:w1/tree 4090.0080 B pass
A station's search is refused while the plaza is heldGET /v1/ide/workspaces/station:w1/search?q=x 4091.0080 B pass
A station's write is refused while the plaza is heldPUT /v1/ide/workspaces/station:w1/file 4091.0080 B pass
The plaza state reads heldGET /v1/plaza/state 2000.0079 B pass
Resume the plazaPOST /v1/plaza/resume 2001.0080 B pass
A station that is not online is missing again once resumedGET /v1/ide/workspaces/station:w1/tree 4041.0035 B pass
The plaza state reads resumedGET /v1/plaza/state 2002.0080 B pass
List the IDE's audit logGET /v1/ide/audit 2001.002 B pass
The audit of a missing agent's workspace is emptyGET /v1/ide/audit?workspace=agent:999999 2001.002 B pass
The audit of a station is empty: refused writes are not auditedGET /v1/ide/audit?workspace=station:w1 2001.002 B pass
Refuse an audit limit of zeroGET /v1/ide/audit?limit=0 4001.0039 B pass
Refuse an audit limit above a thousandGET /v1/ide/audit?limit=1001 4001.0039 B pass
Refuse an audit limit that is not a numberGET /v1/ide/audit?limit=abc 4000.0044 B pass
An audit limit of three returns at most three rowsGET /v1/ide/audit?limit=3 2001.002 B pass
Unfurl local references that do not existPOST /v1/unfurl 2002.00176 B pass
Unfurl an empty batchPOST /v1/unfurl 2002.0012 B pass
Unfurl the largest batch allowedPOST /v1/unfurl 2002.001.6 KiB pass
Refuse a batch over the limitPOST /v1/unfurl 4000.0045 B pass
Refuse a reference of an unknown kindPOST /v1/unfurl 4001.0072 B pass
Refuse a batch that is not JSONPOST /v1/unfurl 4001.0072 B pass
Refuse a batch with no refsPOST /v1/unfurl 4001.0072 B pass
Upload a file to unfurlPUT /v1/files?name=t-ide-card.txt 20150.0326 B pass
Unfurl the file's library referencePOST /v1/unfurl 2001.00255 B pass
Unfurl a file URL on the hubGET /v1/unfurl?url=/v1/files/fa64f6c7022e3 2001.00243 B pass
Delete the fileDELETE /v1/files/fa64f6c7022e3 20025.027 B pass
The deleted file's reference is not foundPOST /v1/unfurl 2000.0044 B pass
The deleted file's URL answers not found with status 200GET /v1/unfurl?url=/v1/files/fa64f6c7022e3 2000.0032 B pass
Unfurl malformed remote references as unsupported without a call to GitHubPOST /v1/unfurl 2001.00186 B pass
Unfurl a GitHub pull URL whose number is not one as unsupportedGET /v1/unfurl?url=https://github.com/t-ide-nobody/t-ide-nope/pull/one 2001.0034 B pass
Unfurl a link the hub does not unfurlGET /v1/unfurl?url=https://example.com/x 2001.0034 B pass
Refuse a single unfurl without a urlGET /v1/unfurl 4001.0036 B pass
Refuse a single unfurl of an empty urlGET /v1/unfurl?url= 4221.0043 B pass
Refuse a single unfurl of text that is no referenceGET /v1/unfurl?url=not%20a%20reference 4222.0043 B pass
files65 requests
RequestCallStatusmsSizeResult
Register agent 5 through its VM hello, so the agent routes take its uploadsPOST /internal/v1/agents/5/hello 2005.0055.0 KiB pass
List the owner's attachmentsGET /v1/files?kind=attachment 2001.002 B pass
Refuse the metadata of a file that does not existGET /v1/files/fnope 4041.0024 B pass
Refuse the content of a file that does not existGET /v1/files/fnope/content 4041.0024 B pass
Refuse to delete a file that does not existDELETE /v1/files/fnope 4041.0024 B pass
Refuse an upload with no namePUT /v1/files 4001.0028 B pass
Refuse an upload with an empty bodyPUT /v1/files?name=t-files-empty.txt 4001.0029 B pass
Refuse an upload whose name is only dotsPUT /v1/files?name=.. 4001.0029 B pass
Refuse an upload whose name is too longPUT /v1/files?name=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt 4002.0050 B pass
Refuse an agent's file without the internal tokenPUT /internal/v1/agents/5/gateway/files?name=t-files-agent.txt 4031.0043 B pass
Refuse an agent's file with a wrong internal tokenPUT /internal/v1/agents/5/gateway/files?name=t-files-agent.txt 4031.0043 B pass
Refuse an agent's file with no namePUT /internal/v1/agents/5/gateway/files 4001.0028 B pass
Refuse an agent's file sent to a recipient that is not a numberPUT /internal/v1/agents/5/gateway/files?name=t-files-agent.txt&to=abc 4000.0035 B pass
Delete agent 5 again, so later folders do not see itDELETE /v1/agents/5 2001.0034 B pass
Upload a note as the ownerPUT /v1/files?name=t-files-notes.md&title=t-files%20notes 20151.0331 B pass
Read the note's metadataGET /v1/files/fd91a74e580ba 2001.00331 B pass
Read the note's contentGET /v1/files/fd91a74e580ba/content 2001.0036 B pass
Download the note's content as an attachmentGET /v1/files/fd91a74e580ba/content?download=1 2003.0036 B pass
The note is listed among the owner's attachmentsGET /v1/files?kind=attachment 2001.00333 B pass
An octet-stream upload takes its type from the namePUT /v1/files?name=t-files-data.csv 20190.0328 B pass
An upload without a title takes its name as the titlePUT /v1/files?name=t-files-untitled.txt 20147.0338 B pass
A name with accented letters and spaces is cleanedPUT /v1/files?name=%C3%BCn%C3%AFcode%20notes.txt 20144.0332 B pass
A name with folders keeps only its last partPUT /v1/files?name=..%2F..%2Ft-files-passwd 20133.0326 B pass
Upload a second version of the note under the same namePUT /v1/files?name=t-files-notes.md 20125.0334 B pass
The old note is still there until it is deletedGET /v1/files/fd91a74e580ba 2000.00331 B pass
Delete the old noteDELETE /v1/files/fd91a74e580ba 20013.027 B pass
The old note's content is goneGET /v1/files/fd91a74e580ba/content 4040.0024 B pass
The new note's content is the new versionGET /v1/files/f484c1c8ecba4/content 2000.0038 B pass
Only the new note has that name nowGET /v1/files?kind=attachment 2001.001.6 KiB pass
Upload a picture as the ownerPUT /v1/files?name=t-files-pic.png 20177.0328 B pass
Share the picture with downloads offPOST /v1/shares 20151.0457 B pass
Read the picture's share dataGET /artifact/989d248261dc0f634bc8d00b04f90b20/data 20019.0287 B pass
A picture shows inline through its link even with downloads offGET /artifact/989d248261dc0f634bc8d00b04f90b20/file 20012.014 B pass
Share the note with downloads offPOST /v1/shares 2019.00458 B pass
A text file is refused through its link while downloads are offGET /artifact/8f37cca22b69d13477a81ad1904f67d7/file 4032.0044 B pass
Refuse a version pin on a file linkPOST /v1/shares 4001.0045 B pass
Turn downloads on for the note's linkPATCH /v1/shares/8f37cca22b69d13477a81ad1904f67d7 20029.0457 B pass
Download the note through its linkGET /artifact/8f37cca22b69d13477a81ad1904f67d7/file 20020.038 B pass
The note's link records the downloadGET /v1/shares/8f37cca22b69d13477a81ad1904f67d7/events 2001.00102 B pass
Refuse rows through a file link: only artifacts have rowsGET /artifact/8f37cca22b69d13477a81ad1904f67d7/rows?panel=x 4041.0019 B pass
Revoke the note's linkDELETE /v1/shares/8f37cca22b69d13477a81ad1904f67d7 20051.0469 B pass
Delete the pictureDELETE /v1/files/ff8dbc2c61268 20032.027 B pass
Read the deleted picture's metadataGET /v1/files/ff8dbc2c61268 4041.0024 B pass
Read the deleted picture's contentGET /v1/files/ff8dbc2c61268/content 4041.0024 B pass
Delete the picture a second timeDELETE /v1/files/ff8dbc2c61268 4040.0024 B pass
The picture's link answers missingGET /artifact/989d248261dc0f634bc8d00b04f90b20/data 4041.0019 B pass
Revoke the picture's linkDELETE /v1/shares/989d248261dc0f634bc8d00b04f90b20 20028.0469 B pass
Delete the noteDELETE /v1/files/f484c1c8ecba4 20022.027 B pass
Delete the CSV uploadDELETE /v1/files/f32f7873b61ed 20023.027 B pass
Delete the untitled uploadDELETE /v1/files/f3ccd5a1b2868 20019.027 B pass
Delete the accented-name uploadDELETE /v1/files/f9179c38c636e 20016.027 B pass
Delete the folder-named uploadDELETE /v1/files/f136fb0ca037f 20040.027 B pass
Register agent 5 through its VM hello, so the agent routes take its uploadsPOST /internal/v1/agents/5/hello 2004.0055.0 KiB pass
An agent hands in a public filePUT /internal/v1/agents/5/gateway/files?name=t-files-agent.txt&kind=deliverable 20159.0122 B pass
The owner lists the agent's file as made by the agentGET /v1/files?kind=deliverable 2000.00681 B pass
The owner reads the agent's fileGET /v1/files/f6063bdce7a7f/content 2000.0014 B pass
The agent that made it downloads itGET /internal/v1/agents/5/gateway/files/f6063bdce7a7f 2001.0014 B pass
Another agent downloads a public fileGET /internal/v1/agents/7/gateway/files/f6063bdce7a7f 2001.0014 B pass
An agent hands in a file private to agent 6PUT /internal/v1/agents/5/gateway/files?name=t-files-private.txt&to=6 20156.0122 B pass
The agent it is shared with reads itGET /internal/v1/agents/6/gateway/files/f1204f5ceee02 2001.007 B pass
An agent it is not shared with cannot read itGET /internal/v1/agents/7/gateway/files/f1204f5ceee02 4041.0024 B pass
The owner reads the private fileGET /v1/files/f1204f5ceee02/content 2000.007 B pass
Delete the public agent fileDELETE /v1/files/f6063bdce7a7f 20046.027 B pass
Delete the private agent fileDELETE /v1/files/f1204f5ceee02 20020.027 B pass
Delete agent 5 again, so later folders do not see itDELETE /v1/agents/5 2000.0034 B pass
console8 requests
RequestCallStatusmsSizeResult
The start page answers missing while no console is builtGET / 4041.0021 B pass
The index file answers missing tooGET /index.html 4041.0021 B pass
A console asset answers missingGET /assets/main.js 4040.0021 B pass
A console asset path that climbs out is missingGET /assets/../secret 4040.0021 B pass
A console file that does not exist is missingGET /favicon.ico 4040.0021 B pass
A console file path that climbs out is missingGET /../secret 4041.0021 B pass
An empty asset name is missingGET /assets/ 4040.0028 B pass
The start page is missing for a browser that asks for brotliGET / 4041.0021 B pass
egress27 requests
RequestCallStatusmsSizeResult
Store the credential the rule will addPOST /v1/vault/secrets 20056.0330 B pass
List the rules before any is madeGET /v1/egress/inject 2000.0012 B pass
Create a rule that adds the credential to one host's GET requestsPOST /v1/egress/inject 20033.0235 B pass
List the rule with its settings and no valueGET /v1/egress/inject 2001.00247 B pass
Change the rule's methods, path and statePATCH /v1/egress/inject/egr-d8ac21ab0ab4 20034.0249 B pass
Refuse a host written as a URLPATCH /v1/egress/inject/egr-d8ac21ab0ab4 4001.0093 B pass
Refuse a secret that is not bound to the egress consumerPATCH /v1/egress/inject/egr-d8ac21ab0ab4 4001.0084 B pass
Refuse a change to an unknown rulePATCH /v1/egress/inject/egress_rule_nope 4041.0045 B pass
Enable the rule againPATCH /v1/egress/inject/egr-d8ac21ab0ab4 20016.0248 B pass
Refuse a rule on plain HTTPPOST /v1/egress/inject 4001.0070 B pass
Refuse a host written with a schemePOST /v1/egress/inject 4001.0093 B pass
Refuse a format without the secret's placeholderPOST /v1/egress/inject 4001.0045 B pass
Refuse a header the proxy sets itselfPOST /v1/egress/inject 4001.0073 B pass
Refuse a header name with a spacePOST /v1/egress/inject 4001.0054 B pass
Refuse a path prefix that does not start with a slashPOST /v1/egress/inject 4001.0059 B pass
Refuse a method that is not a tokenPOST /v1/egress/inject 4001.0043 B pass
Refuse a port of zeroPOST /v1/egress/inject 4001.0034 B pass
Refuse a secret that is not in the vaultPOST /v1/egress/inject 4001.0084 B pass
Refuse a rule that names no secretPOST /v1/egress/inject 4001.0039 B pass
Refuse a rule body that is not JSONPOST /v1/egress/inject 4001.0056 B pass
Refuse a change to a rule that does not existPATCH /v1/egress/inject/egress_rule_nope 4041.0045 B pass
Refuse a delete of a rule that does not existDELETE /v1/egress/inject/egress_rule_nope 4042.0045 B pass
Refuse the egress rules from a host that does not name loopbackGET /v1/egress/inject 4031.0046 B pass
Delete the ruleDELETE /v1/egress/inject/egr-d8ac21ab0ab4 20016.011 B pass
The deleted rule is no longer listedGET /v1/egress/inject 2001.0012 B pass
Refuse a second delete of the same ruleDELETE /v1/egress/inject/egr-d8ac21ab0ab4 4041.0045 B pass
Delete the credential the rule usedDELETE /v1/vault/secrets/sec_sknvwd2icknl 20441.00 B pass
acp13 requests
RequestCallStatusmsSizeResult
Read the settings to restore laterGET /v1/settings 2000.001.2 KiB pass
List the editor sessionsGET /v1/acp/sessions 2001.002 B pass
Refuse an editor socket while the editors are offGET /v1/acp 4091.00104 B pass
Refuse an editor socket from a host that does not name loopbackGET /v1/acp 4030.0046 B pass
Turn the editors on, keeping the other settingsPUT /v1/settings 2000.001.2 KiB pass
Refuse an editor socket from a foreign originGET /v1/acp 4031.0057 B pass
Refuse an editor socket with the wrong WebSocket versionGET /v1/acp 4261.0044 B pass
Refuse an editor request that is not a WebSocket upgradeGET /v1/acp 4001.0079 B pass
Refuse a WebSocket key that is not 16 bytesGET /v1/acp 4000.0055 B pass
Answer the ACP agent registry, or 502 when it cannot be fetchedGET /v1/acp/registry 20024715.4 KiB pass
Answer the ACP agent registry again with a fresh fetchGET /v1/acp/registry?refresh=1 20027615.4 KiB pass
Turn the editors off again, restoring the saved settingsPUT /v1/settings 2000.001.2 KiB pass
Refuse an editor socket once the editors are offGET /v1/acp 4090.00104 B pass
nodes54 requests
RequestCallStatusmsSizeResult
List the plaza's machinesGET /v1/nodes 2001.00681 B pass
List the join codes: no token or secret is ever listedGET /v1/nodes/codes 2001.00121 B pass
Answer 404 for the machine of a node the hub does not knowGET /v1/nodes/n999/machine 4041.0024 B pass
Answer 404 for the live stats of a node the hub does not knowGET /v1/nodes/n999/stats 4041.0024 B pass
Answer 404 for the runs of a node the hub does not knowGET /v1/nodes/n999/runs 4043.0024 B pass
Issue a join code for a new nodePOST /v1/nodes/codes 2011.00221 B pass
Issue a join code whose lifetime is clamped to one hourPOST /v1/nodes/codes 2010.00221 B pass
Refuse a join code whose ttl is not a numberPOST /v1/nodes/codes 4000.0085 B pass
Refuse a join code with a negative ttlPOST /v1/nodes/codes 4000.0083 B pass
List the join codes: the new ones are active and unusedGET /v1/nodes/codes 2000.00359 B pass
Issue a join code whose label is longer than 64 charactersPOST /v1/nodes/codes 2011.00221 B pass
Join a new node with a code: 201 and its CID rangePOST /v1/nodes/join 2011.0067 B pass
Refuse to join with a code that was already usedPOST /v1/nodes/join 4030.0039 B pass
The used code names the node it madeGET /v1/nodes/codes 2000.00530 B pass
The joined node is listed, active and onlineGET /v1/nodes 2001.001.3 KiB pass
Refuse to revoke a code that was already used (404)DELETE /v1/nodes/codes/c2 4041.0038 B pass
Issue a second join code to be revokedPOST /v1/nodes/codes 2010.00221 B pass
Revoke an unused join codeDELETE /v1/nodes/codes/c5 2001.0026 B pass
Revoking a revoked code again is still an answer 200DELETE /v1/nodes/codes/c5 2000.0026 B pass
Refuse a join with a revoked codePOST /v1/nodes/join 4032.0039 B pass
The revoked code is listed as revokedGET /v1/nodes/codes 2001.00648 B pass
Revoke a joined node's accessPOST /v1/nodes/n1/revoke 2000.00695 B pass
Revoking a revoked node again is still an answer 200POST /v1/nodes/n1/revoke 2000.00695 B pass
The revoked node is listed as revoked and offlineGET /v1/nodes 2001.001.3 KiB pass
Refuse to stop a revoked node (409)POST /v1/nodes/n1/stop 4090.0030 B pass
Refuse to resume a revoked node (409)POST /v1/nodes/n1/resume 4091.0030 B pass
Refuse to drain on a revoked node (409)POST /v1/nodes/n1/drain 4091.0030 B pass
Answer 409 for a revoked node's machine: refused at onceGET /v1/nodes/n1/machine 4091.0030 B pass
Answer 409 for a revoked node's live statsGET /v1/nodes/n1/stats 4091.0030 B pass
Answer 409 for a revoked node's runsGET /v1/nodes/n1/runs 4091.0030 B pass
Refuse a run on a revoked node (409)POST /v1/nodes/n1/runs 4091.0030 B pass
Refuse an unsigned heartbeat from a nodePOST /v1/nodes/n1/heartbeat 4010.0025 B pass
Refuse an unsigned command poll from a nodeGET /v1/nodes/n1/commands 4010.0025 B pass
Refuse an unsigned command result from a nodePOST /v1/nodes/n1/results 4011.0025 B pass
Refuse an unsigned metrics batch from a nodePOST /v1/nodes/n1/metrics 4010.0025 B pass
Refuse an unsigned heartbeat from a node that does not existPOST /v1/nodes/n999/heartbeat 4011.0025 B pass
Answer 404 when revoking an unknown nodePOST /v1/nodes/n999/revoke 4042.0024 B pass
Answer 404 when revoking the hub's own machine (it is not a joined node)POST /v1/nodes/n0/revoke 4041.0024 B pass
Answer 404 when stopping an unknown nodePOST /v1/nodes/n999/stop 4040.0024 B pass
Refuse an unsigned tunnel open from a nodeGET /v1/nodes/n1/tunnel 4010.0025 B pass
Answer 502 for the hub's own machine while its noded is downGET /v1/nodes/n0/machine 5021.00101 B pass
Answer 502 for the hub's live stats while its noded is downGET /v1/nodes/n0/stats 5021.00101 B pass
Answer 502 for the hub's runs while its noded is downGET /v1/nodes/n0/runs 5021.00101 B pass
Answer 502 for a run on the hub's machine while its noded is downPOST /v1/nodes/n0/runs 5021.00101 B pass
Refuse a stop whose now flag is not a booleanPOST /v1/nodes/n0/stop 4001.0090 B pass
Drain on the hub's own machine: it goes out of servicePOST /v1/nodes/n0/drain 20030.0679 B pass
Refuse a drain whose on flag is not a booleanPOST /v1/nodes/n0/drain 4001.0090 B pass
Drain off the hub's own machine: it is back in servicePOST /v1/nodes/n0/drain 20041.0679 B pass
Answer 404 when draining an unknown nodePOST /v1/nodes/n999/drain 4040.0024 B pass
Refuse a rebalance whose dry_run flag is not a booleanPOST /v1/nodes/rebalance 4001.0092 B pass
Rebalance now: the answer lists the moves and whether they startedPOST /v1/nodes/rebalance 2001.0028 B pass
Refuse a path change for a node the hub does not knowPOST /v1/nodes/n999/path 4041.0024 B pass
Refuse a mesh path without a host and portPOST /v1/nodes/n999/path 4001.0072 B pass
Refuse a node's link query without its signatureGET /v1/nodes/n1/link 4011.0025 B pass
engines60 requests
RequestCallStatusmsSizeResult
read the settings and keep themGET /v1/settings 2001.001.2 KiB pass
switch the background health checks offPUT /v1/settings 2001.001.2 KiB pass
List the coding engines: the built-in onesGET /v1/engines 2000.006.2 KiB pass
Show one built-in engineGET /v1/engines/claude 2001.00465 B pass
Answer 404 for an unknown engineGET /v1/engines/no-such-engine 4041.0038 B pass
Refuse a built-in engine's accent that is not #rrggbbPUT /v1/engines/claude 4002.0043 B pass
Refuse an engine variable the plaza sets for its gatewayPUT /v1/engines/claude 4001.0076 B pass
A refused edit that also turns the engine off changes nothingPUT /v1/engines/claude 4001.0043 B pass
Pin a built-in engine back to the catalogue's version (no network)PUT /v1/engines/claude 2001.00362 B pass
Refuse a version with characters an npm version never hasPUT /v1/engines/claude 4001.0087 B pass
Refuse to remove a built-in engineDELETE /v1/engines/claude 4001.0056 B pass
Answer 404 when editing an unknown enginePUT /v1/engines/no-such-engine 4040.0038 B pass
Refuse an engine without an idPOST /v1/engines 4000.0026 B pass
Refuse an engine id with capitals and a spacePOST /v1/engines 4001.0042 B pass
Refuse an engine that is neither built-in, registry nor localPOST /v1/engines 4001.0076 B pass
Refuse an engine without its engine kindPOST /v1/engines 4001.0030 B pass
Refuse a local ACP engine with no commandPOST /v1/engines 4001.0097 B pass
Refuse a command that holds its argumentsPOST /v1/engines 4001.0097 B pass
Refuse an engine variable the plaza sets for its gatewayPOST /v1/engines 4001.0090 B pass
Refuse a key placed in an engine's environmentPOST /v1/engines 4001.00180 B pass
Refuse a version for a local command engine (only npm engines have one)POST /v1/engines 4000.0066 B pass
Refuse more arguments than an engine may takePOST /v1/engines 4001.0058 B pass
Refuse an instance whose id is a built-in engine's (409)POST /v1/engines 4090.0034 B pass
Refuse a registry instance whose id is taken (409, before any registry fetch)POST /v1/engines 4091.0034 B pass
Add an engine instance as a local ACP commandPOST /v1/engines 2011.00425 B pass
Refuse an instance whose id exists (409)POST /v1/engines 4090.0039 B pass
The refused instances were not keptGET /v1/engines/t-eng-bad 4041.0033 B pass
Read the local engine instanceGET /v1/engines/t-eng-local 2001.00425 B pass
Change a local engine's label, accent, arguments, variables and routePUT /v1/engines/t-eng-local 2001.00462 B pass
Refuse a bad accent edit (400, nothing changes)PUT /v1/engines/t-eng-local 4001.0043 B pass
Refuse a route without a model (400, nothing changes)PUT /v1/engines/t-eng-local 4001.0046 B pass
Refuse a bad home folder (400, nothing changes)PUT /v1/engines/t-eng-local 4001.0051 B pass
Refuse a lower case variable name (400, nothing changes)PUT /v1/engines/t-eng-local 4000.0058 B pass
Refuse a key in the environment on edit (400, nothing changes)PUT /v1/engines/t-eng-local 4000.00178 B pass
Refuse a command with arguments in it on edit (400, nothing changes)PUT /v1/engines/t-eng-local 4001.0097 B pass
Refuse changing the id (400, nothing changes)PUT /v1/engines/t-eng-local 4001.0051 B pass
Refuse an unknown field (400, nothing changes)PUT /v1/engines/t-eng-local 4002.00178 B pass
Refuse a version on a local command (400, nothing changes)PUT /v1/engines/t-eng-local 4000.0066 B pass
Turn a local engine off: it shows offPUT /v1/engines/t-eng-local 2001.00452 B pass
Turn a local engine back onPUT /v1/engines/t-eng-local 2001.00462 B pass
Change a local engine's commandPUT /v1/engines/t-eng-local 2001.00464 B pass
Answer 404 when editing an unknown instancePUT /v1/engines/no-such-engine 4041.0038 B pass
The engine listing shows the instance as changedGET /v1/engines 2000.006.5 KiB pass
Enable Mistral Vibe, a pip engine: the check reads it without the registryPUT /v1/engines/vibe 2006.00337 B pass
Turn Claude Code off so a check does not fetch from npmPUT /v1/engines/claude 2001.00362 B pass
Turn Codex offPUT /v1/engines/codex 2000.00342 B pass
Turn OpenCode offPUT /v1/engines/opencode 2001.00340 B pass
Check every enabled engine: the off ones answer offPOST /v1/engines/check 2001.001.0 KiB pass
Refuse an update whose dry_run is not a boolean (the update always asks npm, so only validation is tested)POST /v1/engines/update 4000.0092 B pass
Refuse an update body that is not JSONPOST /v1/engines/update 4000.00112 B pass
Restore Claude Code's switch as it wasPUT /v1/engines/claude 2001.00465 B pass
Restore Codex's switch as it wasPUT /v1/engines/codex 2002.00445 B pass
Restore OpenCode's switch as it wasPUT /v1/engines/opencode 2001.00443 B pass
Turn Mistral Vibe off againPUT /v1/engines/vibe 2001.00327 B pass
Remove an engine instance the owner addedDELETE /v1/engines/t-eng-local 2000.0025 B pass
Answer 404 for a removed engine instanceGET /v1/engines/t-eng-local 4041.0035 B pass
Answer 404 when removing an instance twiceDELETE /v1/engines/t-eng-local 4041.0035 B pass
Answer 404 when editing a removed engine instancePUT /v1/engines/t-eng-local 4040.0035 B pass
The engine listing no longer has the removed instanceGET /v1/engines 2000.006.2 KiB pass
the settings go back to what they were before the folderPUT /v1/settings 2001.001.2 KiB pass
auth8 requests
RequestCallStatusmsSizeResult
Check that the session is signed inGET /v1/auth/check 2001.0011 B pass
Refuse a sign-in body with no tokenPOST /v1/auth/session 4000.0037 B pass
Refuse a sign-in body that is not JSONPOST /v1/auth/session 4000.0037 B pass
Refuse an empty tokenPOST /v1/auth/session 4010.0039 B pass
Rotate the owner token: the new one is answered oncePOST /v1/hub/owner-token/rotate 20051.060 B pass
Sign in with the rotated owner token: a session cookie is setPOST /v1/auth/session 2001.0011 B pass
Sign out of this browser: the cookie is clearedDELETE /v1/auth/session 2001.0011 B pass
Signing out twice is still an answer 200DELETE /v1/auth/session 2002.0011 B pass
tasks55 requests
RequestCallStatusmsSizeResult
Open a project for the task testsPOST /v1/projects 20113.0676 B pass
Open a task with a goal, an acceptance line, a role and a budgetPOST /v1/tasks 2010.00333 B pass
Read the open task backGET /v1/tasks/t12 2001.00333 B pass
Open a second task that runs after the firstPOST /v1/tasks 2010.00315 B pass
List the project's tasks: both are thereGET /v1/tasks?project=pr26 2000.00661 B pass
List only the tasks that can be claimed now: the first, not the secondGET /v1/tasks?ready=true 2001.002.2 KiB pass
Relink the second task to run after nothing: it is readyPATCH /v1/tasks/t13 2000.00304 B pass
Relink the second task after the first again: it waitsPATCH /v1/tasks/t13 2001.00315 B pass
Refuse a relink that would close a cyclePATCH /v1/tasks/t12 4001.0083 B pass
Refuse a relink to a task that does not existPATCH /v1/tasks/t12 4001.0052 B pass
Refuse a relink whose after is not a listPATCH /v1/tasks/t12 4001.00104 B pass
Answer 404 when relinking a task that does not existPATCH /v1/tasks/t999999 4041.0035 B pass
Refuse a claim by an agent that is not connectedPOST /v1/tasks/t12/claim 4040.0040 B pass
Refuse a claim with no agent namedPOST /v1/tasks/t12/claim 4002.0079 B pass
Answer 404 when claiming a task that does not existPOST /v1/tasks/t999999/claim 4040.0035 B pass
Refuse finishing a task that was never claimedPOST /v1/tasks/t12/finish 4090.0047 B pass
Refuse a finish with an outcome that is neither done nor failedPOST /v1/tasks/t12/finish 4000.00108 B pass
Answer 404 when finishing a task that does not existPOST /v1/tasks/t999999/finish 4041.0035 B pass
Refuse moving a task that already belongs to a projectPOST /v1/tasks/t12/move 4090.0072 B pass
Refuse a move with no project namedPOST /v1/tasks/t12/move 4001.0046 B pass
Refuse a move into a project that does not existPOST /v1/tasks/t12/move 4041.0031 B pass
Answer 404 when moving a task that does not existPOST /v1/tasks/t999999/move 4042.0035 B pass
A task's review runs: none yetGET /v1/tasks/t12/reviews 2001.0024 B pass
Review runs of an unknown task are not a server errorGET /v1/tasks/t999999/reviews 4041.0024 B pass
The project's graph: A first, B after it, A is the frontierGET /v1/projects/pr26/graph 2000.00507 B pass
Refuse a task body that is not JSONPOST /v1/tasks 4001.00109 B pass
Refuse a task with no goalPOST /v1/tasks 4000.0076 B pass
Refuse a task with a goal that is only spacesPOST /v1/tasks 4001.0034 B pass
Refuse a task whose goal is longer than 4096 bytesPOST /v1/tasks 4001.0043 B pass
Refuse a task outside any projectPOST /v1/tasks 4001.0093 B pass
Refuse a task for a project that does not existPOST /v1/tasks 4041.0031 B pass
Refuse a task that runs after a task that does not existPOST /v1/tasks 4000.0052 B pass
Refuse a task that runs after the same task twicePOST /v1/tasks 4001.0033 B pass
Refuse a task assigned to an agent that is not connectedPOST /v1/tasks 4041.0040 B pass
Open a task with a unicode goalPOST /v1/tasks 2010.00319 B pass
Withdraw the unicode taskDELETE /v1/tasks/t14 2000.00332 B pass
Answer 404 for a task that does not existGET /v1/tasks/t999999 4041.0035 B pass
List the tasks of a project that does not exist: noneGET /v1/tasks?project=pr999999 2001.0012 B pass
Withdraw an open task that has links: A is withdrawnDELETE /v1/tasks/t12 2001.00346 B pass
Withdrawing a withdrawn task is refusedDELETE /v1/tasks/t12 4090.0057 B pass
A withdrawn task cannot be relinkedPATCH /v1/tasks/t12 4090.0071 B pass
The task after the withdrawn one is blocked by it: not ready, blocked_by AGET /v1/tasks/t13 2000.00315 B pass
Withdraw the blocked taskDELETE /v1/tasks/t13 2000.00322 B pass
Archive the project: the rest goes back to the plazaPOST /v1/projects/pr26/archive 2002.001020 B pass
Read the spec of a task that does not exist: 404GET /v1/tasks/t999999/spec 4040.0036 B pass
Open a project whose tasks will be blockedPOST /v1/projects 2018.00684 B pass
Open the upstream taskPOST /v1/tasks 2011.00292 B pass
Open a task that runs after the upstream onePOST /v1/tasks 2011.00305 B pass
Withdraw the upstream taskDELETE /v1/tasks/t15 2001.00305 B pass
The task after a withdrawn one is blocked: not ready, blocked by itGET /v1/tasks/t16 2001.00305 B pass
The graph keeps the blocked task out of the frontierGET /v1/projects/pr27/graph 2001.00450 B pass
Withdrawing the upstream task again is refusedDELETE /v1/tasks/t15 4091.0057 B pass
Relink the blocked task to run after nothing: it is ready againPATCH /v1/tasks/t16 2000.00294 B pass
Withdraw the now-ready taskDELETE /v1/tasks/t16 2001.00307 B pass
Archive the project: the budget goes back to the plazaPOST /v1/projects/pr27/archive 2001.00938 B pass
work-engine51 requests
RequestCallStatusmsSizeResult
Open a project for the work engine's requestsPOST /v1/projects 20111.0687 B pass
List the sessionsGET /v1/sessions 2001.00135.1 KiB pass
List the live sessions of the projectGET /v1/sessions?project=pr28&live=true 2000.002 B pass
Refuse a session state the hub does not knowGET /v1/sessions?state=sleeping 4000.0042 B pass
Answer 404 to a session that does not existGET /v1/sessions/s999999 4041.0030 B pass
Answer 404 to the transcript of a session that does not existGET /v1/sessions/s999999/transcript?after=0&limit=10 4041.0030 B pass
Answer 404 to the context of a session that does not existGET /v1/sessions/s999999/context 4040.0030 B pass
Answer 404 to stopping a session that does not existPOST /v1/sessions/s999999/stop 4041.0030 B pass
List the seats of a task that does not exist: noneGET /v1/tasks/t999999/seats 2000.002 B pass
List the threads of a task that does not exist: noneGET /v1/tasks/t999999/threads 2001.002 B pass
Answer 404 to a thread that does not existGET /v1/threads/th999999 4041.0030 B pass
Answer a thread that does not exist: 404POST /v1/threads/th999999/answer 4040.0048 B pass
Read the project's budget with its diskGET /v1/projects/pr28/budget 2001.00103 B pass
Set the project's budget with a disk quotaPUT /v1/projects/pr28/budget 20062.0310 B pass
Read the project's budget with its quota and what its disk holdsGET /v1/projects/pr28/budget 2001.00370 B pass
Read the project budget's ledger, newest firstGET /v1/projects/pr28/budget/ledger?limit=5 2001.00143 B pass
Refuse a disk quota of zero bytesPUT /v1/projects/pr28/budget 4000.0068 B pass
Refuse a project budget field the hub does not knowPUT /v1/projects/pr28/budget 4002.00146 B pass
Clear the disk quota: null means no quotaPUT /v1/projects/pr28/budget 20025.0304 B pass
Answer 404 to a budget set on a project that does not existPUT /v1/projects/pr999999/budget 4040.0031 B pass
Refuse a project budget with no unitPUT /v1/projects/pr28/budget 4001.0064 B pass
Read the budget of a task that does not exist: no capGET /v1/tasks/t999999/budget 2001.0052 B pass
Answer 404 to a budget set on a task that does not existPUT /v1/tasks/t999999/budget 4041.0027 B pass
Read the ledger of a task that does not exist: noneGET /v1/tasks/t999999/budget/ledger 2001.002 B pass
Read the project budget's ledger with a limit of one entryGET /v1/projects/pr28/budget/ledger?limit=1 2000.00143 B pass
List the cards, answered ones tooGET /v1/cards 2002.0014.6 KiB pass
List the open cards: every one is openGET /v1/cards?open=true 2000.0012.3 KiB pass
List the open cards of the main chatGET /v1/cards?open=1&chat=main 2000.001.1 KiB pass
Answer 404 to a card that does not existGET /v1/cards/c999999 4041.0027 B pass
Answer 404 to answering a card that does not existPOST /v1/cards/c999999 4040.0027 B pass
Refuse an answer that names no choicePOST /v1/cards/c999999 4001.0066 B pass
List the chats: the main chat is thereGET /v1/chats 2001.007.0 KiB pass
Open a chat with the project's plannerPOST /v1/chats 2013.00210 B pass
Answer 404 to a chat for a project that does not existPOST /v1/chats 4040.0031 B pass
Refuse a chat field the hub does not knowPOST /v1/chats 4000.0095 B pass
Read the project chat with its messagesGET /v1/chats/ch25 2000.00210 B pass
Read the main chat with the last five messagesGET /v1/chats/main?limit=5 2000.001.4 KiB pass
Answer 404 to a chat that does not existGET /v1/chats/ch999999 4040.0028 B pass
List the messages of the project chat after the startGET /v1/chats/ch25/messages?after=0&limit=10 2000.002 B pass
Answer 404 to the messages of a chat that does not existGET /v1/chats/ch999999/messages 4041.0028 B pass
Say something in the project chatPOST /v1/chats/ch25/messages 20128.0128 B pass
Refuse a message of spaces onlyPOST /v1/chats/ch25/messages 4001.0025 B pass
Answer 404 to a message in a chat that does not existPOST /v1/chats/ch999999/messages 4041.0028 B pass
Rename the project chatPATCH /v1/chats/ch25 20033.0201 B pass
Archive the project chat: it leaves the listPATCH /v1/chats/ch25 20010.0200 B pass
List the archived chats: the project chat is among themGET /v1/chats?archived=true 2001.007.2 KiB pass
Restore the project chatPATCH /v1/chats/ch25 20012.0201 B pass
Refuse a chat edit field the hub does not knowPATCH /v1/chats/ch25 4001.00109 B pass
Answer 404 to renaming a chat that does not existPATCH /v1/chats/ch999999 4041.0028 B pass
Read a page of the main chat's transcript before a seqGET /v1/chats/main/transcript?before=1000000&limit=500 2001.0027 B pass
Refuse a transcript page before what is not a seqGET /v1/chats/main/transcript?before=last&limit=10 4001.0041 B pass
previews9 requests
RequestCallStatusmsSizeResult
List a project's previews: none for a project with no lanesGET /v1/projects/p999/previews 2001.0015 B pass
Answer 404 when sharing a preview the hub does not knowPOST /v1/previews/pv999/links 4041.0028 B pass
Answer 404 for the links of a preview the hub does not knowGET /v1/previews/pv999/links 4041.0028 B pass
Answer 404 when revoking a link the hub does not knowDELETE /v1/preview-links/pl999 40412.025 B pass
Answer 404 for the openings of a link the hub does not knowGET /v1/preview-links/pl999/openings 4040.0025 B pass
Answer 404 for the QR code of a link the hub does not knowGET /v1/preview-links/pl999/qr 4040.0025 B pass
Answer 404 when sleeping a preview the hub does not knowPOST /v1/previews/pv999/sleep 4041.0028 B pass
Answer 404 when waking a preview the hub does not knowPOST /v1/previews/pv999/wake 4041.0028 B pass
Answer 404 when closing a preview the hub does not knowPOST /v1/previews/pv999/close 4040.0028 B pass
intake4 requests
RequestCallStatusmsSizeResult
The intake view lists the three sources, none set, and no itemsGET /v1/intake 2001.00429 B pass
Refuse a source the plaza does not havePUT /v1/intake/connections/jira 4041.0033 B pass
Refuse a Linear base address over plain http to another hostPUT /v1/intake/connections/linear 4001.0090 B pass
A GitHub delivery to a token that is not the connector's is a 404, and never keptPOST /v1/hooks/github/no-such-token 4041.0027 B pass
flows111 requests
RequestCallStatusmsSizeResult
the plaza starts releasedGET /v1/plaza/state 2001.0080 B pass
open a project to holdPOST /v1/projects 2018.00694 B pass
post a task before the holdPOST /v1/tasks 2011.00302 B pass
read the settings before the holdGET /v1/settings 2001.001.2 KiB pass
stop all with a reasonPOST /v1/plaza/stop 2001.0089 B pass
the state reads as heldGET /v1/plaza/state 2002.0089 B pass
the project reads still answer while heldGET /v1/projects/pr29 2001.00783 B pass
the task reads still answer while heldGET /v1/tasks/t17 2000.00302 B pass
a task is still accepted while held and waitsPOST /v1/tasks 2010.00302 B pass
a project is still opened while heldPOST /v1/projects 2012.00570 B pass
a settings save is kept while heldPUT /v1/settings 2001.001.2 KiB pass
a model call through the gateway is refused while heldPOST /internal/v1/agents/1/gateway/anthropic/v1/messages 4091.0073 B pass
a decision is refused while heldPOST /v1/decisions 4092.0073 B pass
an E2B key can still be made while heldPOST /v1/e2b/keys 20012.0130 B pass
a sandbox start is refused as heldPOST /e2b/sandboxes 4091.00118 B pass
the project goes to maintenance while heldPOST /v1/projects/pr29/mode 2001.00969 B pass
a maintenance sweep is refused as heldPOST /v1/projects/pr29/maintenance/sweep 4091.0043 B pass
a malformed stop changes nothingPOST /v1/plaza/stop 4001.0093 B pass
the state is still held with its reasonGET /v1/plaza/state 2001.0089 B pass
a repeated stop keeps the holdPOST /v1/plaza/stop 2002.0079 B pass
resume the plazaPOST /v1/plaza/resume 2001.0080 B pass
resume again is harmlessPOST /v1/plaza/resume 2001.0080 B pass
the model call gets past the holdPOST /internal/v1/agents/1/gateway/anthropic/v1/messages 4040.0025 B pass
the decision fails on its config, not the holdPOST /v1/decisions 4000.00106 B pass
the sandbox fails on its node, not the holdPOST /e2b/sandboxes 5031.00148 B pass
the sweep fails for want of a watcher, not the holdPOST /v1/projects/pr29/maintenance/sweep 4091.00102 B pass
a task posted during the hold is still openGET /v1/tasks/t18 2001.00302 B pass
the held project still lists both tasksGET /v1/projects/pr29 2001.00969 B pass
the held E2B key is removedDELETE /v1/e2b/keys/e2k-bf2bd1209d0a 20011.011 B pass
archive the held projectPOST /v1/projects/pr29/archive 2000.001.0 KiB pass
archive the second held projectPOST /v1/projects/pr30/archive 2000.00645 B pass
the ended project takes no new taskPOST /v1/tasks 4090.0059 B pass
open a project with no budget of its ownPOST /v1/projects 2019.00698 B pass
a new project has no budget of its ownGET /v1/projects/pr31/budget 2001.00103 B pass
a task draws on the project's budgetPOST /v1/tasks 2011.00296 B pass
a second task draws on the budgetPOST /v1/tasks 2011.00296 B pass
pause the projectPOST /v1/projects/pr31/pause 2000.00950 B pass
pausing again changes nothingPOST /v1/projects/pr31/pause 2000.00950 B pass
move the project to maintenance while pausedPOST /v1/projects/pr31/mode 2001.001.0 KiB pass
a maintenance sweep is refused while pausedPOST /v1/projects/pr31/maintenance/sweep 4090.0046 B pass
a task posted while paused waits unclaimedPOST /v1/tasks 2011.00305 B pass
resume the projectPOST /v1/projects/pr31/resume 2001.001.2 KiB pass
resume again is harmlessPOST /v1/projects/pr31/resume 2001.001.2 KiB pass
the project stays in maintenanceGET /v1/projects/pr31 2001.001.2 KiB pass
a signal goes into the inboxPOST /v1/projects/pr31/maintenance/signals 2010.00122 B pass
make an ingest address for the projectPOST /v1/projects/pr31/maintenance/ingest 2011.00139 B pass
a signal from outside arrives at the addressPOST /v1/ingest/apzi_cfb3e31eccade63dc00f4456510e8c076452b511ac3f768f 2021.0011 B pass
the maintenance view counts both signalsGET /v1/projects/pr31/maintenance 2001.00596 B pass
a sweep with no one to watch the project is refusedPOST /v1/projects/pr31/maintenance/sweep 4090.00102 B pass
the owner's signal can be deletedDELETE /v1/projects/pr31/maintenance/signals/s1 2000.0016 B pass
deleting that signal again is not foundDELETE /v1/projects/pr31/maintenance/signals/s1 4041.0026 B pass
stop the ingest addressDELETE /v1/projects/pr31/maintenance/ingest 2001.0016 B pass
the stopped address refuses a signalPOST /v1/ingest/apzi_cfb3e31eccade63dc00f4456510e8c076452b511ac3f768f 4041.0034 B pass
archive the project from maintenancePOST /v1/projects/pr31/archive 2001.001.3 KiB pass
the first open task is withdrawnGET /v1/tasks/t19 2000.00309 B pass
the second open task is withdrawnGET /v1/tasks/t20 2001.00309 B pass
the paused-time task is withdrawnGET /v1/tasks/t21 2000.00318 B pass
a paused project cannot be paused nowPOST /v1/projects/pr31/pause 4092.0036 B pass
an archived project takes no new taskPOST /v1/tasks 4091.0059 B pass
an archived project cannot go back to buildPOST /v1/projects/pr31/mode 4091.0036 B pass
archiving again is harmlessPOST /v1/projects/pr31/archive 2001.001.3 KiB pass
the archived project still readsGET /v1/projects/pr31 2001.001.3 KiB pass
open a project for the active branchPOST /v1/projects 20114.0704 B pass
a task draws 500 from itPOST /v1/tasks 2011.00293 B pass
archive straight from activePOST /v1/projects/pr32/archive 2002.00868 B pass
the active task is withdrawnGET /v1/tasks/t22 2000.00306 B pass
the hub enforces the model policy and keeps a snapshotGET /v1/settings 2001.001.2 KiB pass
an orchestrator model off its tier is refusedPUT /v1/settings 4001.00174 B pass
an orchestrator role model off its tier is refusedPUT /v1/settings 4000.00174 B pass
a worker role model may be any modelPUT /v1/settings 2001.001.2 KiB pass
a model added to the orchestrator list can be usedPUT /v1/settings 2000.001.2 KiB pass
a model in use cannot be dropped from the orchestrator listPUT /v1/settings 4001.00174 B pass
the orchestrator goes back to the default model and the policy with itPUT /v1/settings 2000.001.2 KiB pass
favourite models are kept in orderPUT /v1/settings 2001.001.2 KiB pass
a duplicate favourite is refusedPUT /v1/settings 4000.0071 B pass
a favourite without a provider is refusedPUT /v1/settings 4001.0073 B pass
a favourite with a space is refusedPUT /v1/settings 4001.0088 B pass
the list holds exactly 200 favouritesPUT /v1/settings 2001.004.4 KiB pass
a 201st favourite is refusedPUT /v1/settings 4000.0053 B pass
the favourites are clearedPUT /v1/settings 2000.001.2 KiB pass
zero turns the health checks offPUT /v1/settings 2001.001.2 KiB pass
a day is the most the interval may bePUT /v1/settings 2001.001.2 KiB pass
an interval over a day is refusedPUT /v1/settings 4001.0078 B pass
a negative interval is refused as a bad valuePUT /v1/settings 4001.0094 B pass
the default interval comes backPUT /v1/settings 2000.001.2 KiB pass
zero turns is refusedPUT /v1/settings 4001.0044 B pass
200 turns is the mostPUT /v1/settings 2001.001.2 KiB pass
201 turns is refusedPUT /v1/settings 4001.0046 B pass
the saved settings go back to the snapshotPUT /v1/settings 2000.001.2 KiB pass
a read after the restore matches the snapshotGET /v1/settings 2001.001.2 KiB pass
read the settings and keep a snapshot of the intervalGET /v1/settings 2000.001.2 KiB pass
switch the background provider checks offPUT /v1/settings 2001.001.2 KiB pass
the vault is unsealedGET /v1/vault 2001.00254 B pass
the provider has no key yetGET /v1/providers/anthropic 2001.00429 B pass
a test refuses without a key, offlinePOST /v1/providers/anthropic/test 20029.0171 B pass
Note where the audit log ends before the key is added, so the audit check can page from thereGET /v1/vault/audit?verify=1&limit=1 2004.00296 B pass
add the key through the vaultPOST /v1/vault/secrets 20047.0353 B pass
a second plaza entry under the same name is refusedPOST /v1/vault/secrets 4091.0083 B pass
the provider reads a key nowGET /v1/providers/anthropic 2000.00428 B pass
the consumer resolves to the new entryGET /v1/vault/consumers 2001.005.8 KiB pass
the provider list agreesGET /v1/providers 2001.007.0 KiB pass
the audit records the key being createdGET /v1/vault/audit?verify=1&after=208&limit=500 2003.00332 B pass
the vault list shows the entry and no valueGET /v1/vault/secrets 2002.002.5 KiB pass
Note where the audit log ends before the key is removed, so the audit check can page from thereGET /v1/vault/audit?verify=1&limit=1 2003.00296 B pass
remove the keyDELETE /v1/vault/secrets/sec_isxahkgd4ih3 20424.00 B pass
the provider reads no key againGET /v1/providers/anthropic 2000.00429 B pass
the consumer is unresolved againGET /v1/vault/consumers 2001.005.8 KiB pass
a test refuses again, offlinePOST /v1/providers/anthropic/test 20028.0171 B pass
a repeated delete is not foundDELETE /v1/vault/secrets/sec_isxahkgd4ih3 4041.0026 B pass
the audit records the removalGET /v1/vault/audit?verify=1&after=209&limit=500 2004.00674 B pass
the settings go back to the snapshotPUT /v1/settings 2001.001.2 KiB pass
recipes7 requests
RequestCallStatusmsSizeResult
List the recipe engine's recipesGET /v1/recipes 2005.002.1 KiB pass
Show the change recipe as its TOMLGET /v1/recipes/change 2001.001.6 KiB pass
A recipe version that is not newer is refusedPUT /v1/recipes/change 4001.0067 B pass
List recipe runsGET /v1/recipe-runs 2002.0025.6 KiB pass
An unknown recipe run is not foundGET /v1/recipe-runs/rr-0/graph 4040.0030 B pass
Cancelling an unknown recipe run is not foundPOST /v1/recipe-runs/rr-0/cancel 4042.0030 B pass
Queueing CI checks for an unknown project is not foundPOST /v1/recipe-runs/ci 4040.0027 B pass
workflows6 requests
RequestCallStatusmsSizeResult
The workflows of an unknown project are not foundGET /v1/projects/no-such-project/workflows 4040.0027 B pass
A workflow of an unknown project is not foundGET /v1/projects/no-such-project/workflows/ship 4041.0043 B pass
A manual run of an unknown project's workflow is not foundPOST /v1/projects/no-such-project/workflows/ship/runs 4041.0027 B pass
The GitHub Actions import preview of an unknown project is not foundGET /v1/projects/no-such-project/workflows/import 4041.0027 B pass
Saving an import of an unknown project is not foundPOST /v1/projects/no-such-project/workflows/import 4040.0027 B pass
The runs of a change of an unknown project are not foundGET /v1/projects/no-such-project/changes/ch-1/workflow-runs 4041.0027 B pass
releases13 requests
RequestCallStatusmsSizeResult
The releases of an unknown project are not foundGET /v1/projects/no-such-project/releases 4041.0027 B pass
An unknown release is not foundGET /v1/releases/rel-0 4041.0027 B pass
A candidate of an unknown release is not foundPOST /v1/releases/rel-0/candidate 4041.0027 B pass
The report of an unknown release is not foundGET /v1/releases/rel-0/report 4041.0027 B pass
A yank without a reason is refusedPOST /v1/releases/rel-0/yank 4001.0027 B pass
A lane of an unknown release is not foundPOST /v1/releases/rel-0/lane 4041.0027 B pass
A backport to an unknown project is not foundPOST /v1/projects/no-such-project/backports 4041.0027 B pass
The release channels are listedGET /v1/release-channels 2000.00273 B pass
A sync of an unknown release is not foundPOST /v1/releases/rel-0/sync 4040.0027 B pass
Edited notes of an unknown release are not foundPOST /v1/releases/rel-0/notes 4041.0027 B pass
Notes without text are refusedPOST /v1/releases/rel-0/notes 4002.0034 B pass
A compatibility matrix of an unknown release is not foundPOST /v1/releases/rel-0/compatibility 4041.0027 B pass
A compatibility matrix that does not parse is refusedPOST /v1/releases/rel-0/compatibility 4001.00187 B pass
triggers6 requests
RequestCallStatusmsSizeResult
Adding a cron schedule to a recipePOST /v1/recipes/intake/triggers 2011.00238 B pass
A cron expression with a field out of range is refusedPOST /v1/recipes/intake/triggers 4001.0038 B pass
List a recipe's triggersGET /v1/recipes/intake/triggers 2001.00253 B pass
A webhook with a token that is not the connector's is not foundPOST /v1/hooks/github/no-such-token 4041.0027 B pass
The owner's hand on an unknown recipe is not foundPOST /v1/recipes/no-such-recipe/fire 4041.0026 B pass
Removing an unknown trigger is not foundDELETE /v1/recipes/intake/triggers/rt-0 4042.0027 B pass
qualification8 requests
RequestCallStatusmsSizeResult
An unknown release has no qualificationGET /v1/releases/rel-0/qualification 4040.0027 B pass
A qualification of an unknown release is not foundPOST /v1/releases/rel-0/qualify 4040.0027 B pass
The report of an unknown release is not foundGET /v1/releases/rel-0/report 4040.0027 B pass
The tests of an unknown project are not foundGET /v1/projects/pr-0/tests 4041.0027 B pass
The trends of an unknown project are not foundGET /v1/projects/pr-0/trends 4041.0027 B pass
Lab tests of an unknown run are not foundPOST /v1/test-lab/runs/q0/tests 4040.0023 B pass
Ending an unknown lab run is not foundPOST /v1/test-lab/runs/q0/end 4041.0023 B pass
A test fixed without a reason is refusedPOST /v1/projects/pr-0/tests/cart::pay/fixed 4001.0043 B pass

Timings

Every GET in the spec without path parameters, requested 20 times in a row on the CI runner, slowest p95 first. Times are milliseconds on a shared runner: compare them run to run, not to production. The last column is the p95's change against main.

RouteWhat it doesStatusp50p95maxp95Sizevs main
/v1/overviewRead the hub's overview200 0.9832.932.9 225 B-39%
/v1/metrics/exportExport a view as CSV200 7.6010.710.7 24 B-30%
/v1/foundry/modelsList the foundry's models200 0.967.247.24 3.2 KiB+234%
/v1/artifactsList the artifacts, newest first (?project=, ?q=)200 0.517.217.21 1.9 KiB-31%
/v1/metrics/viewCompose a metrics view200 5.017.027.02 3.6 KiB-56%
/v1/pricesList the model prices200 4.146.996.99 520.2 KiB-48%
/v1/recipesList the review recipes, the recipe engine's recipes and the orchestrator's proposals200 4.076.016.01 2.1 KiB-45%
/v1/ide/workspacesList the IDE's workspaces200 5.066.006.00 5.8 KiB-72%
/v1/evals/archiveList the archived tasks with a known outcome, the benchmark's cases200 0.995.155.15 199 B-31%
/v1/filesList the files agents handed in200 0.454.954.95 345 B-28%
/v1/stations/recordingsList the station recordings, newest first200 0.514.824.82 2 B-47%
/v1/metrics/forecastShow the capacity forecast200 2.864.434.43 187 B-57%
/v1/metrics/catalogRead the metric catalog200 0.524.324.32 27.3 KiB+33%
/v1/metrics/aroundShow what changed around a time200 3.104.264.26 1.6 KiB-28%
/v1/tool-library/entryOne tool library entry with its schema, and which seats may use it (path)404 2.913.833.83 23 B-39%
/v1/metrics/alertsList the alerts and their state200 2.503.603.60 2.4 KiB-49%
/v1/sharesList the share links, all of them or those of one target200 1.153.583.58 8.2 KiB+72%
/v1/tool-libraryBrowse the tool library: a group's children, or an entry's detail (path)200 2.543.563.56 10.4 KiB-34%
/v1/metrics/slosList the service-level objectives200 2.923.403.40 785 B-62%
/v1/evals/runsList the eval records of step sessions, newest first200 0.863.373.37 35.9 KiB-36%
/v1/sessionsList the sessions200 1.653.293.29 157.9 KiB-65%
/v1/vaultShow the vault's state200 0.462.612.61 254 B-38%
/v1/recipe-runsList recipe runs, newest first, optionally of one task or project200 1.742.332.33 26.0 KiB-59%
/v1/machineRead this machine's facts502 0.692.312.31 101 B-31%
/v1/foundry/hf/statusShow the Hugging Face status200 1.862.202.20 116 B-52%
/v1/lawsList the laws200 1.302.122.12 106.2 KiB-35%
/v1/provider-catalogWhat the Add provider dialog offers: the API kinds and the coding engines200 0.712.072.07 10.5 KiB-45%
/v1/evals/reviewersScore each reviewer model by its precision (confirmed findings over its findings) and its misses200 0.612.042.04 2 B-61%
/v1/hubRead the hub's status502 0.651.951.95 101 B-20%
/v1/skillsList the skills, or the archived ones200 0.831.921.92 556 B-49%
/v1/acp/sessionsList the editor (ACP) sessions200 0.521.871.87 2 B-32%
/v1/promptsList the prompts200 1.271.831.83 4.3 KiB-31%
/v1/prompts/rulesList the prompt rules and templates200 1.011.701.70 5.5 KiB-60%
/v1/skills/rulesList the skill rules and the template200 0.921.641.64 2.3 KiB-61%
/v1/machinesList the machines on this plaza200 0.601.551.55 58 B0%
/v1/templatesList the warm templates502 0.651.541.54 101 B-48%
/v1/foundry/recipesList the recipes200 1.301.541.54 537 B+3%
/v1/evals/costsReport what the step sessions cost and how they did, grouped by project, task, step or model200 1.251.511.51 241 B-52%
/v1/foundry/hf/importsList the Hugging Face imports200 1.291.501.50 14 B-70%
/v1/connectorsList the connectors and their settings200 1.111.481.48 26.8 KiB-53%
/v1/metrics/dashboardsRead the saved dashboards200 0.951.441.44 51 B-4%
/v1/foundry/datasetsList the datasets200 1.151.371.37 1.9 KiB-38%
/v1/skills/exportExport several skills as one zip422 0.761.351.35 24 B-31%
/v1/projectsList the projects200 0.641.331.33 25.6 KiB-41%
/v1/vault/auditRead the audit log, verifying it on request200 0.991.301.30 30.9 KiB-59%
/v1/foundry/jobsList the jobs, newest first200 0.601.261.26 2 B-46%
/v1/wsOpen a socket that streams the hub's events400 0.601.231.23 79 B-53%
/v1/providersList the providers200 0.811.211.21 7.0 KiB-60%
/v1/metrics/calls/pageLoad the next page of calls200 0.921.161.16 351 B-47%
/v1/metrics/settingsRead the metrics settings200 0.951.151.15 292 B-59%
/v1/test-labThe test lab: its nodes and their capacity, the queue, the running runs and the last runs that ended200 0.561.121.12 460 B-45%
/v1/stations/auditList the station audit, newest first200 0.831.111.11 1.4 KiB-56%
/v1/mcp/catalogList the MCP server presets200 0.551.061.06 4.8 KiB-48%
/v1/vault/consumersList each consumer and its resolved entry200 0.591.041.04 5.8 KiB-53%
/v1/usage/summarySummarize usage over a time window200 0.711.021.02 252 B-45%
/v1/metrics/scopesList the metric scopes200 0.651.021.02 7.0 KiB-80%
/v1/fleetList the machines and the agents on them200 0.481.011.01 616 B-54%
/v1/usage/callsList the newest model calls200 0.461.001.00 41 B-77%
/v1/stationsList the workstations200 0.450.990.99 2 B-86%
/v1/tool-library/searchSearch the tool library by words (q, optionally under a group)400 0.510.960.96 25 B-52%
/v1/platformsList the git platforms the plaza is authorized on200 0.450.950.95 323 B-53%
/v1/metrics/tracesList the kept traces200 0.510.950.95 2 B-27%
/v1/toolboxList the toolbox discoveries200 0.440.930.93 2 B-37%
/v1/rolesList the built-in and custom roles200 0.680.930.93 44.0 KiB-69%
/v1/volumesList the data volumes502 0.690.900.90 101 B-74%
/v1/foundry/devicesList the accelerators and the jobs holding them200 0.580.900.90 15 B-89%
/v1/evals/leaderboardRank the scores of a step (or every step) by success rate, then cost per success200 0.720.870.87 484 B-73%
/v1/usage/seriesShow usage over time, bucketed200 0.560.870.87 28.0 KiB-90%
/v1/plaza/stateShow whether the plaza is stopped200 0.410.840.84 80 B-49%
/v1/node-linkRead this machine's link to a hub200 0.440.840.84 81 B-66%
/v1/evals/scoresScore the step sessions by step, seat, model and engine200 0.710.830.83 484 B-70%
/v1/acpOpen an editor's ACP socket409 0.530.810.81 104 B-83%
/v1/chatsList the chats200 0.620.790.79 7.6 KiB-69%
/v1/loopsList the scheduled loops200 0.420.790.79 2 B-65%
/v1/login-bridgesThe login bridge's switch per vendor: off by default, labelled with the vendor's terms (the owner only)200 0.560.780.78 665 B-65%
/v1/hub-mcp/tokensList the MCP tokens200 0.510.770.77 742 B-64%
/v1/vault/secretsList the vault's entries200 0.500.750.75 2.2 KiB-81%
/v1/ide/auditList the IDE's audit log200 0.480.750.75 2 B-68%
/v1/boardRead the board200 0.550.720.72 1.2 KiB-69%
/v1/connectors/proposalsList connector proposals, newest first200 0.490.720.72 2 B-77%
/v1/runsList the runs on this machine502 0.650.710.71 101 B-68%
/v1/enginesList the coding engines: the built-in ones and the instances the owner added200 0.640.700.70 6.2 KiB-61%
/v1/cardsList the cards waiting for the owner (and answered ones)200 0.600.670.67 14.6 KiB-66%
/v1/provider-kindsList the provider kinds you can add200 0.570.670.67 8.7 KiB-48%
/v1/storageThe hub's object store: its blobs and their bytes on disk200 0.450.670.67 25 B-56%
/v1/evals/benchList the benchmark's replays of archived tasks, newest first200 0.480.640.64 221 B-75%
/v1/approvalsList the approvals, pending and decided200 0.480.640.64 1.9 KiB-62%
/v1/board/exportExport a board thread as Markdown or JSON200 0.560.630.63 531 B-63%
/v1/settingsGet the hub's settings200 0.500.610.61 1.2 KiB-52%
/v1/agentsList the agents200 0.510.610.61 1.9 KiB-63%
/v1/hub-mcp/callsList the recent MCP calls200 0.510.610.61 898 B-84%
/v1/nodesList the plaza's machines200 0.530.610.61 1.3 KiB-76%
/v1/mcp/serversList the MCP servers200 0.470.600.60 2 B-76%
/v1/hub-mcpShow the hub's MCP server status200 0.470.600.60 263 B-76%
/v1/metrics/eventsList the metric events200 0.460.600.60 170 B-76%
/v1/appearanceRead the owner's appearance and saved themes200 0.440.590.59 112 B-85%
/v1/metricsScrape the hub's Prometheus metrics200 0.470.590.59 5.1 KiB-68%
/v1/agent-proposalsList the agent proposals200 0.440.590.59 2 B-65%
/v1/laws/rulesList the owner's rules and overrides200 0.440.570.57 440 B-71%
/v1/e2b/sandboxesList all sandboxes for the owner's console200 0.420.570.57 16 B-55%
/v1/usage-providersList the usage providers (CLIProxyAPI hubs) and their last readings200 0.510.560.56 2 B-74%
/v1/intakeThe intake connections and the items, newest first200 0.430.550.55 429 B-74%
/v1/metrics/callsList the agents' calls200 0.470.550.55 2 B-84%
/v1/allowancesList every subscription allowance window the usage providers report, with its reset and the subscription models that draw on it200 0.490.540.54 2 B-76%
/v1/tasksList the tasks200 0.450.540.54 6.9 KiB-80%
/v1/libraryList the library's tool versions200 0.430.540.54 2 B-55%
/v1/hub/identityShow the hub's identity200 0.440.540.54 99 B-88%
/v1/release-channelsThe built-in release channels, with their qualification depth and store tracks200 0.390.530.53 273 B-69%
/v1/weftShow whether Weft, the plaza's version control, is running200 0.440.520.52 46 B-67%
/v1/egress/injectList the egress injection rules200 0.440.510.51 12 B-70%
/v1/evals/toolsShow each tool's calls, errors and latency (p50, p95)200 0.440.500.50 60 B-64%
/v1/rules/standingThe owner's standing rules: the text in force and its versions200 0.410.500.50 72 B-71%
/v1/stations/linkOpen the workstation daemon's link socket401 0.390.500.50 61 B-78%
/v1/decisions/defaultGet the default decision model200 0.450.490.49 30 B-86%
/v1/platforms/callbackTake the browser back from a platform400 0.420.490.49 501 B-67%
/v1/e2b/templatesList the templates and their builds200 0.450.490.49 16 B-41%
/v1/stations/codesList the join codes200 0.410.490.49 378 B-79%
/v1/project-modesList the modes a project can be in200 0.430.480.48 371 B-68%
/v1/stations/recording-defaultsShow the recording defaults for new workstations200 0.430.470.47 74 B-85%
/v1/auth/checkCheck that the session is signed in200 0.410.470.47 11 B-75%
/v1/e2b/keysList the E2B API keys200 0.420.460.46 11 B-44%
/v1/nodes/codesList the join codes200 0.420.460.46 648 B-79%
/v1/stations/vmsList the workstation VMs200 0.400.450.45 2 B-78%

Fuzzing (Schemathesis)

Requests generated from docs/api/openapi.json: a 5xx answer or a connection dropped without an answer is a finding. 502 and 503 come from the scratch hub's missing node daemon and git host. Reported here; findings do not fail the pull request yet.

No findings.

Coverage by area

AreaTested
projects64/70
internal36/42
e2b39/39
stations34/38
foundry32/33
agents27/27
metrics27/27
skills23/23
nodes22/22
vault17/17
platforms17/17
tasks15/15
ide15/15
prompts15/15
releases10/14
mcp13/13
test-lab11/13
preview0/12
chats7/11
evals7/11
providers10/10
connectors8/9
artifact9/9
laws9/9
library8/8
artifacts8/8
recipes8/8
engines7/7
board7/7
hub-mcp6/6
runs5/5
sessions5/5
files5/5
shares5/5
previews5/5
recipe-runs4/5
intake2/5
usage-providers4/4
appearance4/4
weft3/4
egress4/4
hub3/3
volumes3/3
cards3/3
acp3/3
decisions3/3
toolbox3/3
tool-library3/3
loops3/3
preview-links3/3
plaza3/3
roles3/3
agent-proposals3/3
prices3/3
usage3/3
node-link3/3
auth3/3
console3/3
templates2/2
threads2/2
settings2/2
login-bridges2/2
approvals2/2
storage0/2
ephemeral2/2
reviews2/2
unfurl2/2
rules0/2
overview1/1
machines1/1
machine1/1
ws1/1
provider-kinds1/1
models1/1
provider-catalog1/1
allowances1/1
project-modes1/1
ingest1/1
release-channels1/1
hooks1/1
transfers1/1
fleet1/1