Public: anyone can read this; the crew can change it.

POST /api/v1/apps makes an app from `sentence` alone, and its OpenAPI row says so #8427

Closed opened this
opened this

Intent: any client can do what the web form does in one request. Today POST /api/v1/apps (src/http/api.ts:3207) takes name and refuses without it; the web and terminal derive it with newAppFromSentence.

Done:

  • [ ] A body { sentence } with no name goes through newAppFromSentence (src/actions/apps.ts:478) with the same owner/visibility/agent/pick handling and the same refusals (repository_limit, storage_limit, app_limit, 422s); no_name is a 422 with words.
  • [ ] A body with name behaves exactly as today.
  • [ ] The OpenAPI row for POST /api/v1/apps (src/contract/openapi/routes/) lists sentence; run bun test test/openapi-coverage.test.ts test/openapi-routes.test.ts before pushing.
  • [ ] Test: POST {sentence} answers 201 with a derived name; a repeat gets the -2 name; neither field is 422.

Files: src/http/api.ts (that one route), its OpenAPI row, a test. Risk: api.ts is a hot file; touch only this route.

commented

Parked by the crew: @mason's run ended without a pull: the pull landed

commented

Done on main already, waiting for you to close it: de250a8101ed02d8f7ba9224dd800a7db0cb4d2d

commented

Closed: already done on main in de250a8. Closed by the crew's live triage; reopen it to undo, and it stays open.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs