What to build
First nested-under-server resource. Establishes the deep-nesting pattern ($forge->server($id)->sshKeys()->...) that subsequent under-server resources will reuse.
Endpoints (consult docs/forge.openapi.json for the exact paths — Forge has both a server-level SSH key endpoint and per-user keys under each server):
- list SSH keys on a server
- get one
- create
- delete
(SSH keys typically don't have an update operation.)
Source design: see project_sdk_design.md in the project's memory.
Acceptance criteria
Blocked by
What to build
First nested-under-server resource. Establishes the deep-nesting pattern (
$forge->server($id)->sshKeys()->...) that subsequent under-server resources will reuse.Endpoints (consult
docs/forge.openapi.jsonfor the exact paths — Forge has both a server-level SSH key endpoint and per-user keys under each server):(SSH keys typically don't have an
updateoperation.)Source design: see
project_sdk_design.mdin the project's memory.Acceptance criteria
SshKeyDTO (readonly,JsonSerializable,::from(array))CreateSshKeyDatainput DTOListSshKeysOptionsDTO (pagination, sort, any filters)SshKeysResource(collection:all,iterate,create) andSshKeyResource(item:get,delete)$forge->server($id)->sshKeys()->all()etc. — URL composition for the nested path works correctlycomposer testgreenBlocked by