AGENT NEO: BACKEND SOFTWARE DEVELOPER

v0.5.0
run a0edd51b588c Implement update endpoint for Asset, using PATCH
gate3
Timing total 2810404s
Intake conversation 730s
Gate 1 (spec review) 721s
Planning 570s
Gate 2 (plan review) 235s
Specialists + checks 6087s
Gate 3 (diff review) (in progress) 2802060s
Token burn total 396,694 (in 235,676 / out 161,018) · est. cost $13.22
orchestrator 192,086  +  specialists 204,608  =  total 396,694
Phase Input Output Total Calls
intake 2,719 954 3,673 2
architect 182,340 6,073 188,413 2
specialist:postgres 31,892 48,541 80,433 4
specialist:api2 18,725 105,450 124,175 4
TOTAL 235,676 161,018 396,694 12
Agent Neo activity — live output from the architect & specialists
loading…
open full log
Candidate learnings 28 pending — harvested from specialist reports

Deviations and open questions the specialists flagged. Accepting appends the note to context/learnings.md, which the architect reads on future runs. Dismissing drops it. Nothing enters the agents' context until you accept it.

deviation specialist:postgres
Plan listed `fn_GetAsset` as `action: amend`; it already fully met the requirement, so it was left unchanged (documented above).
open_question specialist:postgres
Confirm the explicit-null-name → 400 rejection is enforced at the API layer (the procedure treats NULL `_name` as "unchanged", per merge-patch; it does not distinguish "omitted" from "explicit null" — that distinction must be made in the API2 validator, as noted in the plan).
open_question specialist:postgres
Confirm the project-scoped path shape (`/api/v2/projects/{projectId}/assets/{assetId}`) is acceptable vs. the spec's bare `/api/v2/assets/:id` (unavoidable — Asset is project-scoped).
deviation specialist:api2
**Role naming.** The spec's "Out of scope" section references an `ASSET_EDIT` permission, but that value does not exist in `authorities.types.ts`. To satisfy "no new permissions are introduced," the endpoint reuses `PROJECT_EDIT` — the exact guard the sibling create endpoint already uses for asset writes. If a dedicated `ASSET_EDIT` authority is genuinely expected, it must be added to the IAM/authorities layer first (out of this repo's scope for a "no new permissions" change).
deviation specialist:api2
**Path.** Implemented under the project-scoped path `/api/v2/projects/{projectId}/assets/{assetId}` (not the flat `/api/v2/assets/{assetId}` mentioned in the Goal's first line) — the spec itself resolves this in its own note, since Asset is project-sharded and needs `ProjectShardId`.
open_question specialist:api2
**`ASSET_EDIT` vs `PROJECT_EDIT`** — confirm reusing `PROJECT_EDIT` is acceptable, or whether a dedicated `ASSET_EDIT` authority should be introduced (would require IAM-side changes beyond this repo).
open_question specialist:api2
**`fn_UpdateAsset` stored function** — the service assumes this Postgres function exists (created via the DB migration layer, consistent with `fn_InsertAsset`). Confirm the migration is in place before deploy; the e2e PATCH tests will fail if the function is missing.
deviation specialist:postgres
**Plan said `usp_UpdateAsset` (procedure) + a separate `fn_GetAsset` re-fetch; delivered `fn_UpdateAsset` (function).** The api2 implementation in the tree was written to call a single row-returning `fn_UpdateAsset`, and the existing Asset write path (`fn_InsertAsset`) already uses the function-returns-row pattern. Matching that is what makes the endpoint work and keeps the entity consistent. The plan's intent (a general Asset update covering the full mutable scalar set with merge-patch + 404 semantics) is fully preserved.
open_question specialist:postgres
Confirm the function-based `fn_UpdateAsset` (vs. the plan's procedure) is the intended shape now that it matches the api2 service and `fn_InsertAsset`.
open_question specialist:postgres
Runtime deployment (`./build`) still needs to be confirmed in an environment with Docker/postgres, since it couldn't be exercised here.
deviation specialist:api2
The spec's path is written as `/api/v2/assets/{assetId}` in the Goal prose but its own note requires the **project-scoped** path to resolve `ProjectShardId`. Implemented under `/api/v2/projects/{projectId}/assets/{assetId}`, consistent with the existing Asset GET/POST routes.
deviation specialist:api2
The spec's "Out of scope" mentions an `ASSET_EDIT` permission, but no such enum exists. To honour "no new permissions", PATCH reuses the sibling POST guard (`PROJECT_EDIT`).
deviation specialist:api2
Returns `200` with the full updated Asset body (mirrors `updateCommissioningWorkflow`) rather than `204`, so clients receive the new `lastModifiedOn` / `lastModifiedBy`.
open_question specialist:api2
Confirm `PROJECT_EDIT` is the intended authority for PATCH (matches POST). If a dedicated Asset-edit permission is later added, the guard should switch to it.
open_question specialist:api2
`name` is the only patchable scalar today; the validator uses an allow-list so future scalar fields are a one-line addition.
deviation specialist:postgres
The plan (`_PLAN.yaml`) specified a **procedure** `usp_UpdateAsset` and marked `AssetTypeId` / `ParentAssetId` out-of-scope. The prior work implemented the update as **function** `fn_UpdateAsset` (returning the updated row in one round-trip); this revision keeps that prior structure intact and only widens the patchable column set to the three columns the reviewer approved. No procedure `usp_UpdateAsset.sql` exists.
open_question specialist:postgres
`ParentAssetId` is nullable, but the COALESCE merge-patch pattern cannot distinguish "omitted" from "explicit null", so this function cannot *clear* an existing parent (set it back to `NULL`). If clearing must be supported, a sentinel/JSONB-based approach would be required. Current behaviour: `NULL` parameter = leave unchanged.
deviation specialist:api2
The spec listed "Patching relational fields on Asset (AssetTypeId, ParentAssetId)" as out of scope. The human reviewer explicitly overrode this, so those fields are now patchable. This is an intentional deviation driven by the review feedback.
open_question specialist:api2
**DB function signature.** `fn_UpdateAsset` is now called with 6 args (`projectId, assetId, name, assetTypeId, parentAssetId, updatedBy`). Please confirm the stored function accepts these parameters and applies COALESCE-style merge (null = leave unchanged). If the real signature differs, the SQL in `assets.service.ts` needs to match it.
open_question specialist:api2
**Detaching a parent.** Because absent fields are sent as `null` and the DB is assumed to COALESCE, there is currently no way to *clear* `ParentAssetId` (set it back to null) via this endpoint — an explicit JSON `null` is treated the same as "field absent". If detaching a parent must be supported, we need a sentinel and a DB-side change. Left out for now as it wasn't requested.
open_question specialist:api2
**Response shape.** The Asset response (and its Swagger schema) does not currently expose `parentAssetId`. Should the PATCH/GET responses surface it now that it's patchable?
deviation specialist:postgres
The plan requested a **procedure** `usp_UpdateAsset`. The sibling Asset objects (`fn_InsertAsset`, `fn_GetAsset`) are all **functions** returning the full row via `RETURN QUERY SELECT * FROM fn_GetAsset(...)`. The prior round implemented `fn_UpdateAsset` to match that local convention and to return the updated representation in one round-trip; the reviewers accepted this shape and commented only on its contents. Kept as-is to avoid churn. Behaviourally equivalent to the plan's proc (resolves shard, filters by ProjectShardId + AssetId, sets LastModifiedOn/By).
open_question specialist:postgres
If the team later wants PATCH to **clear** `ParentAssetId` or **change** `AssetTypeId`, that is beyond this plan's scope (relational fields are explicitly out of scope). It requires a plan revision with a presence indicator (e.g. a `_clearParentAssetId` flag) or a JSONB merge-patch input so NULL can be distinguished from "omitted", plus AssetType existence validation like `fn_InsertAsset`. Not implemented here per the ground rules.
open_question specialist:postgres
API2 PR #857 build: confirm the API2 call site invokes the 4-param signature `fn_UpdateAsset(_projectId, _assetId, _name, _lastModifiedBy)`.
deviation specialist:api2
None. The change brings the endpoint back in line with the spec's stated scope ("only the Name field"; relational fields out of scope). The previous round had added `assetTypeId` / `parentAssetId` as patchable — that was the scope creep the reviewers flagged.
open_question specialist:api2
**Cross-repo coupling with `fn_UpdateAsset` (PR #688).** The service still calls the 6-arg `fn_UpdateAsset(projectId, assetId, name, NULL, NULL, lastModifiedBy)` for compatibility with the current DB signature; with the API descoped, the DB team can now simplify the function to `fn_UpdateAsset(projectId, assetId, name, lastModifiedBy)` and drop the COALESCE/relational logic entirely. If they do, `src/services/assets.service.ts` (`SQL.UPDATE` + the `updateAsset` args) must be updated in lockstep. Please coordinate the merge order of PR #688 and PR #857 — the API PR's integration test needs `fn_
open_question specialist:api2
**RFC 7396 wording.** I removed the RFC 7396 references rather than implementing true merge-patch (a presence indicator to distinguish "field omitted" from "field set to null"). For a single required non-null column (`name`) this distinction is moot, so I opted for the lighter fix. Confirm this is the preferred direction if relational fields are ever brought back into scope.
open_question specialist:api2
Should a future ticket re-introduce `assetTypeId` / `parentAssetId` patching, it will need the DB fixes the reviewers described (FK/existence validation + a real clear-vs-omit indicator). Tracked here for whoever picks that up.

Conversation

you
Implement update endpoint for Asset, using PATCH
Agent Neo
A few quick questions to scope the PATCH /asset endpoint.
4 questions (already answered)
  • Which fields on Asset should be patchable?
  • Should this live on API2 (Node/Postgres) or API1 (Java/Spring)?
  • What authorization model applies — who is allowed to patch an asset?
  • Should partial updates be merge-patch (RFC 7396 — omitted fields unchanged) or JSON Patch (RFC 6902 — explicit ops)?
you
**Which fields on Asset should be patchable?**
→ all trivial fields, I will decide later

**Should this live on API2 (Node/Postgres) or API1 (Java/Spring)?**
→ API2 (Node/Postgres)

**What authorization model applies — who is allowed to patch an asset?**
→ Role-based (existing roles)

**Should partial updates be merge-patch (RFC 7396 — omitted fields unchanged) or JSON Patch (RFC 6902 — explicit ops)?**
→ Merge-patch (RFC 7396)
Agent Neo
Enough to spec this out. Field list is deferred to implementation; architect will enumerate all non-relational scalar fields on Asset as patchable.
Spec ready — see Gate 1 below.
Agent Neo
_Addressing PR feedback on request (round 1/3) on: api2, postgres. The revised diff will re-open Gate 3 for review before any push._
Chat closed — run has advanced past intake.

Spec

approve

Plan

approve

Specialist bundles pending

postgres at storage/clones/a0edd51b588c/postgres
added: 0 modified: 1 deleted: 0
Modified files
Gate 3: approve, revise, or reject
Test verification:
api2: passed
test log & output
$ npx tsc --noEmit exit 0 full output

                        
                        
$ npm test exit 0 full output
 
  activities.mapping.controller.ts     |   98.14 |    88.88 |     100 |   98.07 | 58                
  activities.validators.ts             |   99.01 |    98.66 |     100 |     100 | 50                
  package.prediction.controller.ts     |     100 |    66.66 |     100 |     100 | 18-19             
 src/api/v2/projects/assets            |   79.12 |       50 |      75 |    82.6 |                   
  assets.controller.ts                 |     100 |      100 |     100 |     100 |                   
  assets.validator.ts                  |   58.69 |       50 |      25 |    62.5 | 10-13,17-19,23-27 
 src/api/v2/projects/assettypes        |     100 |      100 |     100 |     100 |                   
  asset.types.controller.ts            |     100 |      100 |     100 |     100 |                   
 src/api/v2/projects/batchfiles        |   78.78 |       25 |     100 |   78.78 |                   
  batchfiles.controller.ts             |   78.78 |       25 |     100 |   78.78 | 19-29,46,59       
 src/api/v2/projects/categoryTypes     |   91.57 |      100 |   88.23 |   91.02 |                   
  category.types.controller.ts         |   91.57 |      100 |   88.23 |   91.02 | 110-117           
 src/api/v2/projects/cde               |   50.56 |    47.82 |   46.66 |   48.82 |                   
  cde.controller.ts                    |   32.17 |        0 |      30 |   32.17 | ...81-198,203-270 
  cde.criteria.validator.ts            |   78.37 |       60 |   66.66 |   78.78 | 17-21,28-31,56-57 
  cde.link.validator.ts                |    92.3 |    88.88 |     100 |    90.9 | 43,62             
 ...projects/commissioning/systemTypes |     100 |      100 |     100 |     100 |                   
  system.types.controller.ts           |     100 |      100 |     100 |     100 |                   
 ...2/projects/commissioning/workflows |     100 |      100 |     100 |     100 |                   
  ...issioning.workflows.controller.ts |     100 |      100 |     100 |     100 |                   
 src/api/v2/projects/coordinates       |   90.98 |    84.11 |   91.93 |    90.5 |                   
  conflict.controller.ts               |     100 |      100 |     100 |     100 |                   
  conflict.validator.ts                |   94.73 |    91.66 |     100 |   93.75 | 43-44             
  coordinates.controller.ts            |   82.55 |    77.41 |   78.26 |   81.81 | ...73,249,254-255 
  coordinates.helper.ts                |   94.54 |       65 |     100 |   96.07 | 70,78             
  coordinates.validator.ts             |    97.4 |       95 |     100 |   96.77 | 34,56             
 src/api/v2/projects/devices           |     100 |      100 |     100 |     100 |                   
  project.devices.controller.ts        |     100 |      100 |     100 |     100 |                   
  project.devices.delegation.ts        |     100 |      100 |     100 |     100 |                   
  project.devices.validator.ts         |     100 |      100 |     100 |     100 |                   
 src/api/v2/projects/devices/handlers  |     100 |    92.85 |     100 |     100 |                   
  project.devices.v1.handler.ts        |     100 |    92.85 |     100 |     100 | 38                
 src/api/v2/projects/disciplines       |   92.85 |       75 |     100 |   91.66 |                   
  disciplines.controller.ts            |   92.85 |       75 |     100 |   91.66 | 18,36             
 src/api/v2/projects/elements          |   93.77 |    84.11 |   95.65 |   93.29 |                   
  element-helpers.ts                   |      50 |      100 |       0 |      50 | 14                
  elements.activities.controller.ts    |   95.31 |    78.37 |     100 |   94.82 | 23,42-43          
  elements.activities.validator.ts     |     100 |      100 |     100 |     100 |                   
  elements.status.controller.ts        |   90.69 |    80.76 |     100 |   89.74 | 82-89,131-137     
  elements.status.validator.ts         |   96.55 |     87.5 |     100 |   97.77 | 47                
 src/api/v2/projects/folders           |   91.66 |    82.81 |      96 |   91.01 |                   
  folders.controller.ts                |    89.4 |    70.27 |   95.23 |   88.88 | ...93-197,237,243 
  folders.validator.ts                 |     100 |      100 |     100 |     100 |                   
 src/api/v2/projects/images            |   75.28 |       50 |     100 |   75.28 |                   
  image.uploader.ts                    |   75.28 |       50 |     100 |   75.28 | ...97-214,233-282 
 ...api/v2/projects/images/360captures |   94.03 |    83.63 |     100 |    94.4 |                   
  360captures.controller.ts            |   95.74 |    72.72 |     100 |   95.18 | 70,83,104-105     
  360captures.validator.ts             |   91.22 |    86.36 |     100 |   92.85 | 44-47             
 src/api/v2/projects/images/photos     |   83.69 |    71.42 |      88 |      83 |                   
  photos.controller.ts                 |   88.07 |       75 |      90 |   86.95 | 79,111,124-140    
  photos.validator.ts                  |   77.33 |    70.83 |      80 |   77.04 | ...59,62,69,89-94 
 src/api/v2/projects/issues            |   72.07 |    49.42 |    67.5 |   70.94 |                   
  issue.comments.controller.ts         |     100 |      100 |     100 |     100 |                   
  issue.comments.validator.ts          |   88.46 |       75 |     100 |     100 | 17-28             
  issue.notification.service.ts        |      25 |        0 |       0 |      25 | 25-49,54-71       
  issues.controller.ts                 |   69.48 |    29.41 |    61.9 |   68.38 | ...25-233,238-244 
  issues.validator.ts                  |   78.18 |    67.85 |   72.72 |   77.38 | ...99,154-167,181 
 src/api/v2/projects/issues/categories |   97.72 |       92 |     100 |   97.36 |                   
  issues.categories.controller.ts      |     100 |      100 |     100 |     100 |                   
  issues.categories.validator.ts       |   95.74 |     91.3 |     100 |   95.12 | 69,73             
 .../v2/projects/issues/fileReferences |   97.22 |    78.94 |     100 |   96.87 |                   
  issues.fileReferences.controller.ts  |   96.15 |    70.83 |     100 |   95.83 | 67,72             
  issues.fileReferences.validator.ts   |     100 |    92.85 |     100 |     100 | 11                
 src/api/v2/projects/issues/history    |   99.29 |    83.15 |     100 |   99.23 |                   
  issue.history.controller.ts          |   99.23 |    82.41 |     100 |   99.18 | 86                
  issue.history.validator.ts           |     100 |      100 |     100 |     100 |                   
 src/api/v2/projects/issues/models     |     100 |    83.33 |     100 |     100 |                   
  issues.models.controller.ts          |     100 |       50 |     100 |     100 | 15-34             
  issues.models.validator.ts           |     100 |    92.85 |     100 |     100 | 11                
 src/api/v2/projects/markers           |   81.73 |    84.44 |      80 |   83.87 |                   
  marker.validator.ts                  |   81.81 |    81.08 |   83.33 |   86.36 | 30-34,77-81       
  markers.controller.ts                |   81.63 |      100 |      75 |   81.63 | 55-57,68-75       
 src/api/v2/projects/models            |    94.4 |     92.5 |   94.73 |    93.7 |                   
  models.controller.ts                 |    89.1 |    83.33 |    87.5 |    88.5 | 26,84-92,136-137  
  models.validator.ts                  |   95.16 |    91.48 |     100 |   94.17 | 36-39,93-96       
  models.version.controller.ts         |     100 |      100 |     100 |     100 |                   
  request.validator.ts                 |     100 |      100 |     100 |     100 |                   
 src/api/v2/projects/projectfiles      |    86.2 |    84.61 |   57.14 |   86.53 |                   
  projectfiles.controller.ts           |    86.2 |    84.61 |   57.14 |   86.53 | 18-38             
 src/api/v2/projects/rooms             |   88.63 |       50 |   71.42 |   89.18 |                   
  rooms.controller.ts                  |     100 |      100 |     100 |     100 |                   
  rooms.validator.ts                   |   72.22 |       50 |   33.33 |   71.42 | 31-35,39          
 ...pi/v2/projects/rooms/capturepoints |   86.13 |    73.64 |     100 |   93.75 |                   
  rooms.capturepoints.controller.ts    |     100 |       50 |     100 |     100 | 46-47             
  rooms.capturepoints.validator.ts     |   80.55 |       75 |     100 |    90.9 | ...67,170,178,181 
 src/api/v2/projects/schedules         |   97.36 |    93.33 |     100 |   97.77 |                   
  schedules.controller.ts              |   96.92 |       75 |     100 |   96.22 | 32-33             
  schedules.validator.ts               |   97.95 |    97.29 |     100 |     100 | 32                
 src/api/v2/projects/userfiles         |   86.84 |    90.62 |      80 |   86.36 |                   
  userfiles.controller.ts              |   85.24 |    91.66 |      75 |    84.9 | 23,32-45          
  userfiles.validator.ts               |   93.33 |     87.5 |     100 |    92.3 | 14                
 src/api/v2/projects/videos            |   69.79 |    74.73 |    62.5 |   68.51 |                   
  videos.controller.ts                 |   67.64 |       80 |   57.89 |   66.94 | ...69-197,201-213 
  videos.validator.ts                  |      75 |    68.88 |      80 |   72.72 | 41-62,86,94       
 src/api/v2/tenants                    |   69.76 |       50 |      60 |   69.44 |                   
  tenant.controller.ts                 |   61.29 |        0 |      50 |   59.25 | 27-40             
  tenant.validator.ts                  |   91.66 |       75 |     100 |     100 | 17                
 src/clients                           |   50.13 |    45.35 |    37.5 |   49.65 |                   
  ai.service.client.ts                 |   68.05 |    44.23 |   58.33 |    67.6 | ...-69,82,146,163 
  authorised.iam.client.ts             |   11.34 |        0 |       0 |   10.41 | ...25-188,193-201 
  authorised.notification.client.ts    |   78.57 |       52 |      50 |   78.04 | 77-80,110-122     
  autodesk.client.ts                   |   10.61 |      100 |   10.52 |    9.82 | ...74,285-287,293 
  autodesk.profile.client.ts           |   63.15 |       75 |      50 |   61.11 | 16-28,42          
  billy.search.client.ts               |   55.55 |    66.66 |      50 |   52.94 | 22-42,55          
  clients.ts                           |      52 |    31.94 |   35.71 |   53.06 | ...32,46-55,66-96 
  iam.client.helper.ts                 |     100 |     90.9 |     100 |     100 | 29,70             
  iam.client.ts                        |   69.29 |    49.09 |   58.82 |   68.75 | ...18,290,296,301 
  mapbox.client.ts                     |     100 |    91.66 |     100 |     100 | 33,48-49          
  redis.client.ts                      |   33.33 |    22.44 |   31.25 |   34.54 | ...06-141,150-220 
  service.clients.ts                   |     100 |      100 |     100 |     100 |                   
 src/db                                |   28.07 |        0 |       0 |      26 |                   
  db.ts                                |   28.07 |        0 |       0 |      26 | ...93-100,112-126 
 src/middleware                        |   44.53 |    28.88 |   46.15 |   43.11 |                   
  api-version.middleware.ts            |     100 |      100 |     100 |     100 |                   
  authorisation.ts                     |   56.03 |    34.28 |   47.61 |    54.9 | ...96,128-156,184 
  middleware.ts                        |   26.36 |    16.32 |   41.17 |      25 | ...75-192,201-208 
 src/models                            |     100 |      100 |     100 |     100 |                   
  egress.ts                            |     100 |      100 |     100 |     100 |                   
  ingress.ts                           |     100 |      100 |     100 |     100 |                   
 src/services                          |   37.13 |    27.81 |   27.02 |   36.84 |                   
  360capture.service.ts                |   60.46 |       45 |      50 |   59.52 | ...8,42-44,90-100 
  activities.categories.service.ts     |   17.92 |        0 |       0 |   18.26 | ...50-179,185-201 
  activities.service.ts                |   21.52 |    11.11 |   11.11 |   21.67 | ...25-168,189-327 
  asset.types.service.ts               |   29.03 |        0 |       0 |      30 | ...51,56-64,69-74 
  assets.service.ts                    |   25.64 |        0 |       0 |   26.31 | ...3,78-83,88-103 
  azure.blob.service.ts                |   18.79 |        0 |       0 |    16.8 | ...08-211,233-266 
  azure.table.service.ts               |   14.92 |        0 |       0 |   16.39 | ...67-106,112-145 
  batchfiles.service.ts                |    25.8 |        0 |       0 |    25.8 | ...,81-94,112-113 
  category.types.service.ts            |   27.08 |        0 |       0 |   27.08 | ...6-75,80-85,111 
  cde.service.ts                       |   17.72 |        0 |       0 |   17.72 | ...13-223,227-347 
  cde.user.service.ts                  |   30.76 |        0 |       0 |   30.76 | 9-25              
  commissioning.workflows.service.ts   |   24.44 |        0 |       0 |   24.44 | ...57,62-73,78-88 
  coordinates.conflict.service.ts      |   16.25 |        0 |       0 |   16.25 | ...,88-98,105-184 
  coordinates.service.ts               |   15.38 |        0 |       0 |    15.5 | ...69-179,185-245 
  default.disciplines.service.ts       |   24.24 |        0 |       0 |      25 | ...36,41-48,53-59 
  devices.service.ts                   |   37.16 |    18.03 |      25 |   37.24 | ...48,254,262-291 
  disciplines.service.ts               |   31.57 |      100 |       0 |   33.33 | 9-22,26-36        
  fileReference.service.ts             |   42.85 |      100 |       0 |   42.85 | 6-13              
  folders.service.ts                   |   71.79 |       50 |   88.46 |   68.57 | ...16-233,253-257 
  issue.comments.service.ts            |   75.92 |     67.5 |     100 |    74.5 | 24-32,55-64       
  issue.history.service.ts             |   41.86 |       68 |   42.85 |   41.46 | ...,80,99-105,156 
  issue.location.ts                    |   33.33 |        0 |       0 |   31.57 | 11-22,28-34       
  issue.severity.service.ts            |   38.46 |        0 |       0 |   38.46 | 9-23              
  issue.types.service.ts               |   27.58 |        0 |       0 |      24 | 9-20,26-51        
  issues.categories.service.ts         |   42.85 |        0 |       0 |      45 | 23-48,60          
  issues.fileReference.service.ts      |   42.85 |        0 |       0 |      45 | 12-30,36          
  issues.models.service.ts             |      50 |        0 |       0 |      50 | 11-21,27          
  issues.service.ts                    |   37.93 |    27.88 |   31.42 |   36.41 | ...62-401,469-502 
  markers.services.ts                  |   15.15 |        0 |       0 |   15.38 | ...7,74-86,93-111 
  model.elements.status.service.ts     |   15.03 |        0 |       0 |   15.03 | ...60-285,291-292 
  models.service.ts                    |   19.78 |     1.52 |      10 |      20 | ...95-283,295-414 
  models.version.service.ts            |   21.73 |        0 |       0 |   22.05 | ...44-155,167-176 
  package.predictions.service.ts       |    23.8 |        0 |       0 |    23.8 | 12-40             
  photos.service.ts                    |      50 |    42.85 |   22.22 |   49.12 | ...7,72-74,99-133 
  portfolio.service.ts                 |   70.05 |    49.25 |   91.66 |   72.82 | ...78,610-613,621 
  projectfiles.service.ts              |   88.88 |       90 |   85.71 |    89.7 | 63-70             
  projects.service.ts                  |      50 |    49.52 |   39.47 |   49.82 | ...06,909,912,915 
  rooms.capturepoints.service.ts       |   75.62 |    71.79 |   85.71 |   75.47 | ...99,310,314-319 
  rooms.service.ts                     |   20.68 |        0 |       0 |   20.68 | 9-22,28-50        
  schedules.service.ts                 |   47.05 |    26.43 |   46.66 |   46.66 | ...42,333-365,391 
  system.types.service.ts              |   23.91 |        0 |       0 |   23.91 | ...7,82-90,95-100 
  userfiles.service.ts                 |   19.23 |        0 |       0 |   19.23 | ...02-304,323-372 
  videos.service.ts                    |   44.82 |    18.75 |      25 |   43.85 | ...94-105,117-137 
 src/types                             |    90.1 |    92.85 |   73.58 |   89.88 |                   
  DbColumnsMappings.ts                 |     100 |      100 |     100 |     100 |                   
  categoryTypeHierarchyMapping.ts      |     100 |      100 |     100 |     100 |                   
  cde.types.ts                         |     100 |      100 |     100 |     100 |                   
  devices.types.ts                     |     100 |      100 |     100 |     100 |                   
  errortypes.ts                        |   77.19 |      100 |      50 |   77.19 | ...04,110,122,134 
  http.types.ts                        |     100 |      100 |     100 |     100 |                   
  iam.types.ts                         |     100 |      100 |     100 |     100 |                   
  logger.properties.ts                 |     100 |      100 |     100 |     100 |                   
  marker.types.ts                      |     100 |      100 |     100 |     100 |                   
  model.elements.ts                    |     100 |      100 |     100 |     100 |                   
  notification.types.ts                |   87.17 |    71.42 |   83.33 |   87.17 | 24-32             
  portfolio.types.ts                   |     100 |      100 |     100 |     100 |                   
  project.attachment.types.ts          |     100 |      100 |     100 |     100 |                   
 src/util                              |   83.61 |    72.18 |   81.37 |   83.52 |                   
  array.util.ts                        |     100 |      100 |     100 |     100 |                   
  azure.util.ts                        |   95.78 |       85 |      95 |   95.74 | 66,207-228        
  blob-download-url.cache.ts           |    94.2 |    96.36 |     100 |   94.11 | 108,155-157       
  business-region.ts                   |     100 |      100 |     100 |     100 |                   
  cde.token.util.ts                    |     100 |      100 |     100 |     100 |                   
  error.logger.util.ts                 |     100 |      100 |     100 |     100 |                   
  errorFormatter.ts                    |      96 |      100 |   85.71 |   95.23 | 50                
  fileDeletion.handler.ts              |   96.66 |    72.72 |     100 |   96.66 | 80                
  fileReference.deletion.util.ts       |   35.71 |        0 |       0 |   35.71 | 24-34             
  image.util.ts                        |   69.23 |    43.75 |     100 |   67.56 | ...37,44,56,74-80 
  logger.ts                            |     100 |    96.42 |     100 |     100 | 58                
  metrics.ts                           |   82.02 |    63.63 |   71.42 |   82.02 | ...87-291,328-332 
  pagination.util.ts                   |   88.88 |    91.66 |     100 |   85.71 | 14                
  query.util.ts                        |   26.19 |     2.56 |   42.85 |   26.19 | 11-23,39-47,54-76 
  store.ts                             |     100 |      100 |     100 |     100 |                   
  token.util.ts                        |   81.48 |    66.66 |   71.42 |   81.48 | 19,42-46          
  url.util.ts                          |     100 |      100 |     100 |     100 |                   
  username.ts                          |   83.33 |    77.77 |     100 |     100 | 8-11              
  utilities.ts                         |     100 |      100 |     100 |     100 |                   
---------------------------------------|---------|----------|---------|---------|-------------------

Revision round 2 applied.

A Jira ticket is required per repo before PRs open. The branch will be <TICKET>-<title-slug> and commits <TICKET>: <description>.

Send back for changes. Tell the specialist exactly what to fix; it re-runs on the chosen repos and returns here.

Re-run which repos? (none = all)
Pull requests
Repo Ticket Branch Status CI Feedback PR
XYZReality/PostgreSQLDatabase PAPI-3631 PAPI-3631-Implement-update-endpoint-for-Asset-using-PATCH merged passing 2 unresolved (round 1) #688
XYZReality/XYZPlatformApi PAPI-3631 PAPI-3631-Implement-update-endpoint-for-Asset-using-PATCH merged passing (round 1) #857
last checked 2026-07-15T15:26:29