You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
storage describe-batch (fix(storage): reject malformed describe-batch --from-file shapes with a structured error (#640) #645) has no REST route. The whole bulk-documentation path is CLI-only. The validation core is already factored out (services/_describe_batch_input.py:parse_describe_batch_file), so an inline-payload route (POST /storage/describe-batch/{project} with the sections in the body instead of a file path) is cheap and matches how agents would want to call it over serve.
storage unload-table has no REST mirror despite unload_table_to_file existing (services/storage_service.py:2228). The async-unload + presigned-file pattern would fit serve well (the sync data preview covers small reads; unload covers the big ones).
POST /jobs/{p}/run drops client-side idempotency. JobRun (server/routers/jobs.py:26-32) has no idempotency_key / force_rerun even though JobService.run_job takes both (feat(sdk): idempotency keys for run_job (and push) — safe replay after interruption #427 built the store precisely for retried POSTs — and retrying a POST over HTTP is the canonical case).
Bonus LOW: a read-only GET /permissions/show would let serve clients discover the active policy (full enforcement gap tracked separately in #655).
Three MEDIUM gaps from the 0.89.0 serve audit:
storage describe-batch (fix(storage): reject malformed describe-batch --from-file shapes with a structured error (#640) #645) has no REST route. The whole bulk-documentation path is CLI-only. The validation core is already factored out (services/_describe_batch_input.py:parse_describe_batch_file), so an inline-payload route (POST /storage/describe-batch/{project} with the sections in the body instead of a file path) is cheap and matches how agents would want to call it over serve.
storage unload-table has no REST mirror despite unload_table_to_file existing (services/storage_service.py:2228). The async-unload + presigned-file pattern would fit serve well (the sync data preview covers small reads; unload covers the big ones).
POST /jobs/{p}/run drops client-side idempotency. JobRun (server/routers/jobs.py:26-32) has no idempotency_key / force_rerun even though JobService.run_job takes both (feat(sdk): idempotency keys for run_job (and push) — safe replay after interruption #427 built the store precisely for retried POSTs — and retrying a POST over HTTP is the canonical case).
Bonus LOW: a read-only GET /permissions/show would let serve clients discover the active policy (full enforcement gap tracked separately in #655).