)]}'
{"api-ref/source/arqs.inc":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"f6c0114ee89ba80f50214b40c38003544f1b7b17","unresolved":false,"context_lines":[{"line_number":86,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":87,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"  - hostname: hostname_bind_unbind_req"},{"line_number":90,"context_line":"  - device_rp_uuid: device_rp_uuid_bind_unbind_req"},{"line_number":91,"context_line":"  - instance_uuid: instance_uuid_bind_unbind_req"},{"line_number":92,"context_line":"  - instance_project_id: instance_project_id_bind_unbind_req"}],"source_content_type":"text/x-c++src","patch_set":1,"id":"d0b427c7_bde92f78","line":89,"updated":"2026-06-30 16:21:20.000000000","message":"The rewritten ARQ PATCH prose correctly describes a JSON object keyed by ARQ UUIDs whose values are JSON-Patch arrays, but the retained rest_parameters list still presents hostname, device_rp_uuid, instance_uuid and instance_project_id as top-level body fields, contradicting the new prose.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: The parameter table and the prose describe two incompatible request shapes for the same endpoint. Since this section was rewritten in this patch, the inconsistency is now part of the changed text rather than purely pre-existing, which can mislead readers about the bind/unbind payload.\n\n**Suggestion**:\nWhile editing this section, either replace the flat parameter list with a single body parameter that points to the accelerator_requests-patch-req.json example, or annotate the existing entries to show they are JSON-Patch path values (e.g. path: /hostname) so the table matches the prose and the sample.","commit_id":"053b5e3286e3b17cdaccc52860ae51ad64e0abc3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7a9cf2466a2d58f4d9cb5de99667b52aac454b50","unresolved":true,"context_lines":[{"line_number":74,"context_line":"to bind and unbind the ARQ with the host name, device’s RP UUID and instance UUID. This"},{"line_number":75,"context_line":"is an asynchronous call which prepares or reconfigures the device in the"},{"line_number":76,"context_line":"background."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":".. rest_method:: PATCH /v2/accelerator_requests"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Bind or unbind one or more accelerator requests. The payload is a JSON"},{"line_number":81,"context_line":"object whose keys are ARQ UUIDs and whose values are lists of JSON-Patch"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"506a9b89_7c09c1d0","line":78,"range":{"start_line":77,"start_character":1,"end_line":78,"end_character":47},"updated":"2026-07-07 14:43:01.000000000","message":"dammit it we really shoudl not be allowign you to mutae multiple arqs at once like this\n\nbut that behvior has been in place since day one https://github.com/openstack/cyborg/commit/aea02c1fc9ee55f64b84fb249d05939ca414b55a\n\nhttps://github.com/openstack/cyborg/blob/master/cyborg/api/controllers/v2/arqs.py#L395-L440\n\nthat also alinges to the orginal spec.\n\nhttps://specs.openstack.org/openstack/cyborg-specs/specs/ussuri/implemented/cyborg-api.html#:~:text\u003dURL%3A%20%2Faccelerator%2Fv2%2Faccelerator%5Frequests,-METHOD%3A%20PATCH","commit_id":"0cafb7702f231599f2d6772bfc3bdeb9bf6b3223"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"9b31ec0f24ef5fd697ffeb6ace840ed9a45d026f","unresolved":true,"context_lines":[{"line_number":80,"context_line":"Bind or unbind one or more accelerator requests. The payload is a JSON"},{"line_number":81,"context_line":"object whose keys are ARQ UUIDs and whose values are lists of JSON-Patch"},{"line_number":82,"context_line":"operations. Only ``add`` (bind) and ``remove`` (unbind) operations are"},{"line_number":83,"context_line":"supported. All operations in a single request must use the same op."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Request"},{"line_number":86,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"ff9ebf44_ff707a2c","line":83,"updated":"2026-07-07 09:46:00.000000000","message":"good calling this out. I was not aware of it, and the check for this in code is not particularly clear https://github.com/openstack/cyborg/blob/d69e336088152f6a34838c987bf4f6a16c2c09ef/cyborg/api/controllers/v2/arqs.py#L329-L332, especially the error reason","commit_id":"0cafb7702f231599f2d6772bfc3bdeb9bf6b3223"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7a9cf2466a2d58f4d9cb5de99667b52aac454b50","unresolved":true,"context_lines":[{"line_number":80,"context_line":"Bind or unbind one or more accelerator requests. The payload is a JSON"},{"line_number":81,"context_line":"object whose keys are ARQ UUIDs and whose values are lists of JSON-Patch"},{"line_number":82,"context_line":"operations. Only ``add`` (bind) and ``remove`` (unbind) operations are"},{"line_number":83,"context_line":"supported. All operations in a single request must use the same op."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Request"},{"line_number":86,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"204bc174_113cbbb8","line":83,"in_reply_to":"ff9ebf44_ff707a2c","updated":"2026-07-07 14:43:01.000000000","message":"yes that check is actully loadbaring form a security point of view and cant be removed simply\n\nallowing move or copy woudl allow you to bypas some other check we have or exaust memory so until we replace the usage of patch with a put and json in a future api verison we need to be very careful to not remove that restirction.","commit_id":"0cafb7702f231599f2d6772bfc3bdeb9bf6b3223"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7a9cf2466a2d58f4d9cb5de99667b52aac454b50","unresolved":true,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Request"},{"line_number":86,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"The request body is a JSON object keyed by ARQ UUID. Each value is a"},{"line_number":89,"context_line":"list of JSON-Patch operations whose ``path`` and ``value`` fields carry"},{"line_number":90,"context_line":"the bind/unbind parameters:"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":2,"id":"13480035_d3978691","line":90,"range":{"start_line":87,"start_character":1,"end_line":90,"end_character":27},"updated":"2026-07-07 14:43:01.000000000","message":"techinically yes \n\nthe body of the request is a dictonary key by the arq uuid.\nthe value fo those keys jsonpatch document https://datatracker.ietf.org/doc/html/rfc6902\n\nthe sdk actully has to work around this becasue we dont actully confom to the RFC\n\nsince htat expect json patch to only be used to update a single object i.e.\nv2/accelerator_requests/{accelerator_request_uuid}\n\nand to use \n\n`Content-Type: application/json-patch+json`\n\nso we arcully have a half json half jsonpatch request body.","commit_id":"0cafb7702f231599f2d6772bfc3bdeb9bf6b3223"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9d3f27f6f32ab092aff905ad05f2e29a76674cf1","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"  - hostname: hostname_bind_unbind_req"},{"line_number":95,"context_line":"  - device_rp_uuid: device_rp_uuid_bind_unbind_req"},{"line_number":96,"context_line":"  - instance_uuid: instance_uuid_bind_unbind_req"},{"line_number":97,"context_line":"  - instance_project_id: instance_project_id_bind_unbind_req"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"76c9beea_46f20b33","line":94,"updated":"2026-06-30 17:00:33.000000000","message":"The ARQ PATCH request parameter table lists flat body parameters (hostname, device_rp_uuid, etc.) but the actual request body is a JSON object keyed by ARQ UUID with nested JSON-Patch arrays. While the prose explains the structure, the rest_parameters table does not reflect the nested envelope.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Aligning the parameter table with the actual nested request structure improves accuracy for API consumers and reduces reliance on surrounding prose for correct usage.\n\n**Recommendation**:\nConsider adding a brief note in or above the rest_parameters block clarifying that the listed parameters appear inside the per-UUID JSON-Patch value arrays, not at the top level of the request body. This is a minor enhancement and does not block merge.","commit_id":"0cafb7702f231599f2d6772bfc3bdeb9bf6b3223"}],"api-ref/source/deployables.inc":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"f6c0114ee89ba80f50214b40c38003544f1b7b17","unresolved":false,"context_lines":[{"line_number":107,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"  - deployable_uuid: deployable_uuid"},{"line_number":110,"context_line":"  - image_uuid: image_uuid"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"**Example request: program a deployable**"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":1,"id":"38b133e4_e380ac15","line":110,"updated":"2026-06-30 16:21:20.000000000","message":"The new image_uuid parameter is documented in the request parameter table as a flat body field, but the actual request body is a JSON-Patch array where image_uuid is nested at program_info[0][\u0027value\u0027][0][\u0027image_uuid\u0027]; the parameter table therefore misrepresents the request structure.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: A caller building the request from the parameter table alone will send a flat {\"image_uuid\": ...} body, which the controller rejects because it indexes program_info[0][\u0027value\u0027][0][\u0027image_uuid\u0027]. The included example JSON is correct, but the parameter list contradicts it.\n\n**Suggestion**:\nMake the parameter table match the JSON-Patch envelope: either document the wrapper fields (op, path, value) or replace the per-field entry with a single program_info body parameter that references the example. At minimum, add a sentence noting image_uuid is supplied inside a JSON-Patch operation on /program, consistent with the example.","commit_id":"053b5e3286e3b17cdaccc52860ae51ad64e0abc3"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"9d3f27f6f32ab092aff905ad05f2e29a76674cf1","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Normal response codes: 200"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Error response codes: badRequest(400), unauthorized(401), forbidden(403), notfound(404)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Request"},{"line_number":106,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"a30fe28a_2084bb02","line":103,"updated":"2026-06-30 17:00:33.000000000","message":"Program endpoint error codes omit internalServerError(500). The controller raises exc.FPGAProgramError when fpga_program returns falsy; it inherits CyborgException whose default code is HTTP 500. The List Deployables section in the same file documents 500.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: API consumers using the documented error codes for retry or error handling would not anticipate a 500 response from the program operation, which is a reachable code path on FPGA programming failure.\n\n**Suggestion**:\nAdd internalServerError(500) to the error response codes line so it reads: badRequest(400), unauthorized(401), forbidden(403), notfound(404), internalServerError(500).","commit_id":"0cafb7702f231599f2d6772bfc3bdeb9bf6b3223"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7a9cf2466a2d58f4d9cb5de99667b52aac454b50","unresolved":true,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Normal response codes: 200"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Error response codes: badRequest(400), unauthorized(401), forbidden(403), notfound(404)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Request"},{"line_number":106,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"fb6dea21_1e91c2c4","line":103,"in_reply_to":"2a9a2fd9_4e89cefc","updated":"2026-07-07 14:43:01.000000000","message":"internalServerError(500) is not a valid expected return code\nif we ever return that then it alwasy an api bug.\n\ndoes not forbid it\nhttps://specs.openstack.org/openstack/api-wg/guidelines/errors.html\n\nalso this really shoudl be async not syncronous.\n\nprogrammign an fpga can take 10s of minutes\nwe shoudl not really expect it to be completed quickly so this call shoudl not wait.\n\nhttps://github.com/openstack/cyborg/blob/master/cyborg/api/controllers/v2/deployables.py#L161-L172\n\ncurrently that is a call but we shoudl change that in a new microversion","commit_id":"0cafb7702f231599f2d6772bfc3bdeb9bf6b3223"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"9b31ec0f24ef5fd697ffeb6ace840ed9a45d026f","unresolved":true,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Normal response codes: 200"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Error response codes: badRequest(400), unauthorized(401), forbidden(403), notfound(404)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Request"},{"line_number":106,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"2a9a2fd9_4e89cefc","line":103,"in_reply_to":"a30fe28a_2084bb02","updated":"2026-07-07 09:46:00.000000000","message":"the comment seems correct, if the program calls fails for whatever reason it returns False and the api controller raises a `FPGAProgramError` https://github.com/openstack/cyborg/blob/d69e336088152f6a34838c987bf4f6a16c2c09ef/cyborg/api/controllers/v2/deployables.py#L169-L172, which inherits a 500 code through CyborgExcpection parent https://github.com/openstack/cyborg/blob/master/cyborg/common/exception.py#L45. If programming a device fails due to some error in the device, should that be considered a 500? And should it be reported as such to the api user?","commit_id":"0cafb7702f231599f2d6772bfc3bdeb9bf6b3223"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"0d2183d120d6da4dd81b2f11c52c45a2c9f3c3fd","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Normal response codes: 200"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Error response codes: badRequest(400), unauthorized(401), forbidden(403), notfound(404)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Request"},{"line_number":106,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"2fe965a7_0516c83e","line":103,"updated":"2026-07-08 05:56:32.000000000","message":"The newly documented deployables program endpoint lists error response codes 400, 401, 403, and 404 but omits 500. The controller explicitly raises FPGAProgramError (which extends CyborgException with code \u003d HTTPStatus.INTERNAL_SERVER_ERROR) when FPGA programming fails, making 500 a realistic cli...\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: API consumers using this documentation would not expect or handle 500 responses from the program endpoint, despite FPGA programming failures being a realistic error scenario that the controller explicitly handles.\n\n**Recommendation**:\nAdd `internalServerError(500)` to the error response codes line for the program endpoint: `Error response codes: badRequest(400), unauthorized(401), forbidden(403), notfound(404), internalServerError(500)`","commit_id":"8c9cfb527dd3479fafc6e1197089d3a41b7d7274"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"f6c0114ee89ba80f50214b40c38003544f1b7b17","unresolved":false,"context_lines":[{"line_number":359,"context_line":"  in: body"},{"line_number":360,"context_line":"  required: true"},{"line_number":361,"context_line":"  type: string"},{"line_number":362,"context_line":"image_uuid:"},{"line_number":363,"context_line":"  description: |"},{"line_number":364,"context_line":"    The UUID of the bitstream image to program onto the FPGA."},{"line_number":365,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"98c48e89_88d2e0d1","line":362,"updated":"2026-06-30 16:21:20.000000000","message":"The new image_uuid entry in parameters.yaml describes the field as a plain body string, omitting that it must be nested inside the JSON-Patch value array per the program endpoint contract.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Keeps the shared parameter definition consistent with the deployables.inc usage and the example request, so generated documentation does not imply a flat request body.\n\n**Recommendation**:\nExtend the description to state that image_uuid is provided inside a JSON-Patch operation (op/path/value) on the program endpoint, e.g. \u0027Supplied as the value inside a JSON-Patch replace operation on /program (see the program endpoint example).\u0027","commit_id":"053b5e3286e3b17cdaccc52860ae51ad64e0abc3"}],"cyborg/tests/functional/api/test_api_samples_base.py":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"f6c0114ee89ba80f50214b40c38003544f1b7b17","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            for non-GET methods."},{"line_number":197,"context_line":"        \"\"\""},{"line_number":198,"context_line":"        headers \u003d self._get_headers(extra_headers)"},{"line_number":199,"context_line":"        if method \u003d\u003d \u0027PATCH\u0027:"},{"line_number":200,"context_line":"            with open(req_path) as f:"},{"line_number":201,"context_line":"                body \u003d json.load(f)"},{"line_number":202,"context_line":"            response \u003d self.app.patch_json("}],"source_content_type":"text/x-python","patch_set":1,"id":"ab9b6ced_8e543031","line":199,"updated":"2026-06-30 16:21:20.000000000","message":"The new PATCH branch of _check_sample reads req_path with open() but never validates that req_path was supplied; a caller that passes method\u003d\u0027PATCH\u0027 without req_path gets an opaque TypeError from open(None) rather than a clear contract error.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Produces an actionable test failure if a future test author forgets req_path, instead of a confusing traceback deep in the helper.\n\n**Recommendation**:\nAdd an explicit guard at the start of the PATCH branch, e.g. \u0027if method \u003d\u003d \"PATCH\" and not req_path: raise ValueError(\"req_path is required for PATCH requests\")\u0027, mirroring the clarity of the existing docstring.","commit_id":"053b5e3286e3b17cdaccc52860ae51ad64e0abc3"}],"doc/api_samples/deployables/deployables-program-resp.json":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"f6c0114ee89ba80f50214b40c38003544f1b7b17","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    \"attributes_list\": \"[{\u0027traits1\u0027: \u0027CUSTOM_FAKE_DEVICE\u0027}, {\u0027rc\u0027: \u0027FPGA\u0027}]\","},{"line_number":9,"context_line":"    \"rp_uuid\": \"853f07a6-19de-3dd6-b9f6-6c782daa3f7b\","},{"line_number":10,"context_line":"    \"driver_name\": \"fake\","},{"line_number":11,"context_line":"    \"bitstream_id\": \"76babc1b-3222-4992-a046-52441e403577\","},{"line_number":12,"context_line":"    \"created_at\": \"2020-03-13T02:27:35+00:00\","},{"line_number":13,"context_line":"    \"updated_at\": \"2020-03-13T02:27:36+00:00\","},{"line_number":14,"context_line":"    \"links\": ["}],"source_content_type":"application/json","patch_set":1,"id":"5068eb4f_8aa7d3da","line":11,"updated":"2026-06-30 16:21:20.000000000","message":"The deployables-program response sample shows bitstream_id set to the just-programmed image UUID, but the program controller returns the deployable object without persisting the new bitstream_id, so a real 200 response carries the pre-programming value.\n\n**Severity**: HIGH | **Confidence**: 0.8\n\n**Risk**: API consumers reading the docs will expect the response\u0027s bitstream_id to reflect the programmed image, but the running API returns the unchanged field. This api-ref drift passes the structural test because bitstream_id is the right type (string) regardless of value.\n\n**Priority**: Before merge\n**Why This Matters**: The patch\u0027s stated goal is to fix api-ref inaccuracies and keep samples truthful. Shipping a hand-crafted bitstream_id that the controller (deployables.py program()) and agent manager never write back re-introduces the same inaccuracy this change is meant to eliminate.\n\n**Recommendation**:\nEither set bitstream_id in the sample to a realistic pre-programming value (e.g. null or the previous id) matching what convert_with_link actually serializes, or open a follow-up to persist bitstream_id on obj_dep before returning it in the controller. If you intend the sample to show the post-program ideal state, note that explicitly in the endpoint description.","commit_id":"053b5e3286e3b17cdaccc52860ae51ad64e0abc3"}]}
