Intent: an admin's harness can change the forge's capacity and limits through OpenAPI alone (every limit is a setting, per the direction).
Done:
[ ] Rows for PUT /api/v1/admin/capacity/{key} (directly after the GET /api/v1/admin/capacity row), PUT /api/v1/admin/limits/{key} (after GET /api/v1/admin/limits) and PUT /api/v1/admin/teams/{slug} (after GET /api/v1/admin/teams)
[ ] Each with auth, the body fields its handler reads (the key's allowed values named from src/core/capacity.ts and src/settings/limits.ts, not copied), success status, and refusals by stable error code
[ ] test/openapi.test.ts still passes, and a new test asserts each new path and method is in the served document
Files: src/contract/openapi.ts, one test. #5042 and #5063 change these lists' answers; do not touch their GET rows.
Intent: an admin's harness can change the forge's capacity and limits through OpenAPI alone (every limit is a setting, per the direction).
Done:
/api/v1/admin/capacity/{key}(directly after the GET/api/v1/admin/capacityrow), PUT/api/v1/admin/limits/{key}(after GET/api/v1/admin/limits) and PUT/api/v1/admin/teams/{slug}(after GET/api/v1/admin/teams)auth, thebodyfields its handler reads (the key's allowed values named from src/core/capacity.ts and src/settings/limits.ts, not copied), successstatus, andrefusalsby stableerrorcodetest/openapi.test.tsstill passes, and a new test asserts each new path and method is in the served documentFiles: src/contract/openapi.ts, one test. #5042 and #5063 change these lists' answers; do not touch their GET rows.