immich server/: ac run immich-ladder
immich server/ @ 02063972e8 → c4be040b57 on ac/s6-ladder: run status completed.
Whole PR: PASS (static checks and oracles)
| Field | Value |
|---|---|
| Target | immich (profile), package root server/, github.com/immich-app/immich |
| Commits | base 02063972e8 → head c4be040b5739351507750669c3a179dd752f4a72; branch ac/s6-ladder (a local branch; the certificates name its trees) |
| Trees | base 424df72c3407dd1e7df5ee4e81a1d5fcd85cc01c → head 4e457bb4e806f1bc0a63b83141345e20edab0f57 |
| Plan | planned in this run: 59 steps, 367 moves, sha256 b4c7c548883c0635951f893c7717727f3d086a0c4e23b2db442e796dd416cc7f |
| Rungs requested | R0, R1, R2, R3, R4 |
| Whole-PR digest | sha256:9a5b2404631c2ac668462ad93fcbcd116637244e2b4f76e987bcc4e23e8be2b5 |
| Cost | planner spend in this run $0.0000 (budget run s6, mode auto); the plan cost $0.1998 when it was recorded; findings narration $0.0010 in 2 calls (Nemotron 3.5 Lightning (thinking off)), replayed |
| Injected fault | none |
The plan: Nemotron draws the map
Deterministic seeds decided where files go; NVIDIA Nemotron 3 Ultra (on Nebius Token Factory) edited the draft in 3 candidates, and a critic call reviewed the chosen one; the validator gates both. The plan has 38 modules, 20 platform folders and 1 shared folder over 269 planned files: 259 from the deterministic seeds draft, 8 by the planner, 2 by the critic. 30 placements are marked contested. The chosen candidate is ultra#3.
The critic's review (plan.json, the model's own words): The plan correctly slices most business features into modules and keeps pure utilities in shared/. However, several validator warnings reveal misplaced plumbing and impure shared code: two repositories and a service live in shared/, five one‑file platform groups exist, three platform groups (ocr, version, app.controller) actually own tables or routes and belong in feature modules, and utils/editor.ts is only used by platform/media. Moving the offending files to their true owners and re‑classifying the three platform groups as modules removes all warnings without breaking cohesion. No unrelated merges are required.
The gate accepted 6 of the critic's 12 suggestions; 10 validator warnings remain on the plan (findings: plan-warning).
Placements the planner and the critic decided (10)
| File | Group | Decided by | Rationale |
|---|---|---|---|
src/app.common.ts | platform/bootstrap | planner | Bootstrap wiring for Express and telemetry; belongs to platform plumbing. |
src/controllers/app.controller.ts | platform/bootstrap | planner | Root app controller only serves health/info endpoints; platform plumbing. |
src/dtos/editing.dto.ts | module/asset | planner | Editing DTOs are used by asset edit flows. |
src/dtos/env.dto.ts | shared/shared | planner | Environment schema DTO is a pure type shared across config. |
src/dtos/onboarding.dto.ts | module/system-metadata | planner | Onboarding DTOs used by system‑metadata controller. |
src/repositories/app.repository.ts | module/maintenance | critic | Only the maintenance module consumes this repository; fixes the impure‑shared warning. |
src/utils/editor.ts | platform/media | critic | Utility is only imported by platform/media; moving it out of shared resolves the single‑consumer warning. |
src/utils/object.ts | shared/shared | planner | Plain object utilities. |
src/utils/pagination.ts | shared/shared | planner | Pagination helpers used everywhere. |
src/utils/profile-image.ts | module/user | planner | Profile image generation used by user feature. |
plan.yaml · plan.md · the plan cost $0.1998 when it was recorded; a replay from the cassette costs $0
Before and after: the module graph
At the base commit the 563 source files under src/ sit in 14 folders outside the layout; at the head commit 367 sit in the layout (286 in 38 feature modules, 61 in 20 platform folders and 20 in shared/) and 196 are still in 11 folders outside the layout. The file-level import pairs are the same 2,051 on both sides (a certified move keeps every import resolving to the same file); only their grouping changes. The share of pairs inside one folder falls: 479 of 2,051 (23.4%) at base, 421 of 2,051 (20.5%) at head. The largest blocks of internal pairs are src/schema/ 152, src/services/ 111, src/repositories/ 89 at base and src/schema/ 152, module/asset 32, module/user 26 at head. Grouping by feature doesn't remove the imports between features; it makes them visible. The findings below name what ties the modules together (1 god-injection base class and 2 module cycles). R4's rules freeze today's violations so they can't grow.
Import cycles at base: 12 folders
src/ src/commands/ src/controllers/ src/cores/ src/dtos/ src/emails/ src/maintenance/ src/middleware/ src/repositories/ src/schema/ src/services/ src/utils/
Import cycles at head: 41 folders, 2 folders
module/album module/asset module/auth module/config module/database-backup module/job module/library module/machine-learning module/maintenance module/map module/ocr module/partner module/person module/plugin module/queue module/search module/server module/session module/shared-link module/system-metadata module/tag module/user module/version module/workflow platform/access platform/cron platform/database platform/event platform/file platform/http-response platform/logging platform/media platform/move platform/storage shared src/ src/maintenance/ src/repositories/ src/schema/ src/services/ src/utils/
module/notification src/emails/
Left: the folders at the base commit, by size. Right: where their files are at the head commit, grouped by layout kind. A band is a number of files; every node is at least one label tall, so small groups are drawn larger than their share.
Table view
| Base folder | Head folder | Files |
|---|---|---|
src/ | platform/bootstrap | 1 |
src/ | platform/database | 1 |
src/ | platform/registry | 1 |
src/ | shared | 5 |
src/ | src/ | 2 |
src/bin/ | src/bin/ | 2 |
src/commands/ | module/auth | 3 |
src/commands/ | module/maintenance | 1 |
src/commands/ | module/user | 2 |
src/commands/ | module/version | 1 |
src/commands/ | platform/check | 1 |
src/commands/ | platform/media | 1 |
src/commands/ | platform/registry | 1 |
src/controllers/ | module/activity | 2 |
src/controllers/ | module/album | 2 |
src/controllers/ | module/api-key | 2 |
src/controllers/ | module/asset | 5 |
src/controllers/ | module/auth | 5 |
src/controllers/ | module/cluster-group | 1 |
src/controllers/ | module/config | 5 |
src/controllers/ | module/database-backup | 2 |
src/controllers/ | module/download | 2 |
src/controllers/ | module/duplicate | 2 |
src/controllers/ | module/integrity | 1 |
src/controllers/ | module/job | 2 |
src/controllers/ | module/library | 2 |
src/controllers/ | module/maintenance | 2 |
src/controllers/ | module/map | 2 |
src/controllers/ | module/memory | 2 |
src/controllers/ | module/notification | 4 |
src/controllers/ | module/partner | 2 |
src/controllers/ | module/person | 3 |
src/controllers/ | module/plugin | 2 |
src/controllers/ | module/queue | 1 |
src/controllers/ | module/search | 2 |
src/controllers/ | module/server | 1 |
src/controllers/ | module/session | 1 |
src/controllers/ | module/shared-link | 2 |
src/controllers/ | module/stack | 2 |
src/controllers/ | module/sync | 2 |
src/controllers/ | module/system-metadata | 2 |
src/controllers/ | module/tag | 2 |
src/controllers/ | module/timeline | 2 |
src/controllers/ | module/trash | 2 |
src/controllers/ | module/user | 4 |
src/controllers/ | module/video-stream | 1 |
src/controllers/ | module/view | 1 |
src/controllers/ | module/workflow | 2 |
src/controllers/ | platform/bootstrap | 2 |
src/controllers/ | platform/registry | 2 |
src/controllers/ | src/controllers/ | 1 |
src/cores/ | platform/storage | 2 |
src/dtos/ | module/activity | 1 |
src/dtos/ | module/album | 1 |
src/dtos/ | module/api-key | 1 |
src/dtos/ | module/asset | 8 |
src/dtos/ | module/auth | 1 |
src/dtos/ | module/cluster-group | 1 |
src/dtos/ | module/config | 2 |
src/dtos/ | module/database-backup | 1 |
src/dtos/ | module/download | 1 |
src/dtos/ | module/duplicate | 1 |
src/dtos/ | module/integrity | 1 |
src/dtos/ | module/job | 1 |
src/dtos/ | module/library | 1 |
src/dtos/ | module/maintenance | 1 |
src/dtos/ | module/map | 1 |
src/dtos/ | module/memory | 1 |
src/dtos/ | module/notification | 1 |
src/dtos/ | module/ocr | 1 |
src/dtos/ | module/partner | 1 |
src/dtos/ | module/person | 1 |
src/dtos/ | module/plugin | 3 |
src/dtos/ | module/queue | 2 |
src/dtos/ | module/search | 1 |
src/dtos/ | module/server | 1 |
src/dtos/ | module/session | 1 |
src/dtos/ | module/shared-link | 1 |
src/dtos/ | module/stack | 1 |
src/dtos/ | module/sync | 1 |
src/dtos/ | module/system-metadata | 2 |
src/dtos/ | module/tag | 1 |
src/dtos/ | module/timeline | 2 |
src/dtos/ | module/trash | 1 |
src/dtos/ | module/user | 6 |
src/dtos/ | module/video-stream | 1 |
src/dtos/ | module/workflow | 1 |
src/dtos/ | shared | 1 |
src/dtos/ | src/dtos/ | 1 |
src/emails/ | src/emails/ | 9 |
src/maintenance/ | module/maintenance | 5 |
src/maintenance/ | src/maintenance/ | 1 |
src/middleware/ | module/asset | 1 |
src/middleware/ | module/auth | 2 |
src/middleware/ | platform/file | 1 |
src/middleware/ | platform/logging | 3 |
src/middleware/ | platform/websocket | 1 |
src/repositories/ | module/activity | 1 |
src/repositories/ | module/album | 2 |
src/repositories/ | module/api-key | 1 |
src/repositories/ | module/asset | 4 |
src/repositories/ | module/auth | 1 |
src/repositories/ | module/cluster-group | 1 |
src/repositories/ | module/download | 1 |
src/repositories/ | module/duplicate | 1 |
src/repositories/ | module/integrity | 1 |
src/repositories/ | module/job | 1 |
src/repositories/ | module/library | 1 |
src/repositories/ | module/machine-learning | 1 |
src/repositories/ | module/maintenance | 1 |
src/repositories/ | module/map | 1 |
src/repositories/ | module/memory | 1 |
src/repositories/ | module/notification | 3 |
src/repositories/ | module/ocr | 1 |
src/repositories/ | module/partner | 1 |
src/repositories/ | module/person | 2 |
src/repositories/ | module/plugin | 1 |
src/repositories/ | module/search | 1 |
src/repositories/ | module/server | 1 |
src/repositories/ | module/session | 1 |
src/repositories/ | module/shared-link | 2 |
src/repositories/ | module/stack | 1 |
src/repositories/ | module/sync | 2 |
src/repositories/ | module/system-metadata | 1 |
src/repositories/ | module/tag | 1 |
src/repositories/ | module/trash | 1 |
src/repositories/ | module/user | 1 |
src/repositories/ | module/version | 1 |
src/repositories/ | module/video-stream | 1 |
src/repositories/ | module/view | 1 |
src/repositories/ | module/workflow | 1 |
src/repositories/ | platform/access | 1 |
src/repositories/ | platform/cron | 1 |
src/repositories/ | platform/crypto | 1 |
src/repositories/ | platform/event | 1 |
src/repositories/ | platform/logging | 2 |
src/repositories/ | platform/media | 2 |
src/repositories/ | platform/metadata | 1 |
src/repositories/ | platform/move | 1 |
src/repositories/ | platform/process | 2 |
src/repositories/ | platform/registry | 1 |
src/repositories/ | platform/storage | 1 |
src/repositories/ | platform/telemetry | 1 |
src/repositories/ | platform/websocket | 1 |
src/repositories/ | src/repositories/ | 4 |
src/schema/ | src/schema/ | 168 |
src/services/ | module/activity | 2 |
src/services/ | module/album | 2 |
src/services/ | module/api-key | 2 |
src/services/ | module/asset | 5 |
src/services/ | module/auth | 3 |
src/services/ | module/cluster-group | 1 |
src/services/ | module/config | 2 |
src/services/ | module/database-backup | 2 |
src/services/ | module/download | 2 |
src/services/ | module/duplicate | 2 |
src/services/ | module/integrity | 2 |
src/services/ | module/job | 2 |
src/services/ | module/library | 1 |
src/services/ | module/maintenance | 2 |
src/services/ | module/map | 2 |
src/services/ | module/memory | 2 |
src/services/ | module/notification | 4 |
src/services/ | module/ocr | 2 |
src/services/ | module/partner | 2 |
src/services/ | module/person | 2 |
src/services/ | module/plugin | 1 |
src/services/ | module/queue | 2 |
src/services/ | module/search | 4 |
src/services/ | module/server | 2 |
src/services/ | module/session | 2 |
src/services/ | module/shared-link | 2 |
src/services/ | module/stack | 2 |
src/services/ | module/sync | 2 |
src/services/ | module/system-metadata | 2 |
src/services/ | module/tag | 2 |
src/services/ | module/timeline | 2 |
src/services/ | module/trash | 2 |
src/services/ | module/user | 5 |
src/services/ | module/version | 2 |
src/services/ | module/video-stream | 2 |
src/services/ | module/view | 2 |
src/services/ | module/workflow | 2 |
src/services/ | platform/database | 2 |
src/services/ | platform/media | 2 |
src/services/ | platform/metadata | 2 |
src/services/ | platform/registry | 2 |
src/services/ | platform/storage | 4 |
src/services/ | platform/telemetry | 1 |
src/services/ | platform/transcoding | 2 |
src/services/ | shared | 2 |
src/services/ | src/services/ | 3 |
src/utils/ | module/asset | 1 |
src/utils/ | module/config | 1 |
src/utils/ | module/database-backup | 1 |
src/utils/ | module/duplicate | 2 |
src/utils/ | module/maintenance | 1 |
src/utils/ | module/search | 4 |
src/utils/ | module/sync | 1 |
src/utils/ | module/tag | 2 |
src/utils/ | module/user | 1 |
src/utils/ | module/workflow | 2 |
src/utils/ | platform/access | 2 |
src/utils/ | platform/database | 1 |
src/utils/ | platform/event | 1 |
src/utils/ | platform/file | 1 |
src/utils/ | platform/http-client | 2 |
src/utils/ | platform/http-response | 1 |
src/utils/ | platform/logging | 1 |
src/utils/ | platform/media | 3 |
src/utils/ | platform/metadata | 1 |
src/utils/ | shared | 12 |
src/utils/ | src/utils/ | 2 |
src/workers/ | src/workers/ | 3 |
1,572 file pairs cross folders in 73 folder edges. Rows import columns. Folders are ordered importers first (strongly connected sets, then a greedy order inside each), so a cell below the diagonal is an import against the order. Darker means more file pairs (1, 2–3, 4–9, 10–29, 30+).
Table view
| Importer folder | Imported folder | File pairs | Type-only |
|---|---|---|---|
src/ | src/commands/ | 1 | 0 |
src/ | src/controllers/ | 1 | 0 |
src/ | src/dtos/ | 7 | 0 |
src/ | src/maintenance/ | 6 | 0 |
src/ | src/middleware/ | 6 | 0 |
src/ | src/repositories/ | 18 | 0 |
src/ | src/schema/ | 6 | 1 |
src/ | src/services/ | 6 | 0 |
src/ | src/utils/ | 5 | 0 |
src/bin/ | src/ | 2 | 0 |
src/bin/ | src/repositories/ | 6 | 0 |
src/bin/ | src/services/ | 1 | 0 |
src/bin/ | src/utils/ | 2 | 0 |
src/commands/ | src/ | 1 | 0 |
src/commands/ | src/dtos/ | 1 | 0 |
src/commands/ | src/services/ | 9 | 0 |
src/controllers/ | src/ | 117 | 1 |
src/controllers/ | src/dtos/ | 112 | 34 |
src/controllers/ | src/middleware/ | 50 | 0 |
src/controllers/ | src/repositories/ | 9 | 0 |
src/controllers/ | src/services/ | 54 | 3 |
src/controllers/ | src/utils/ | 13 | 0 |
src/cores/ | src/ | 3 | 1 |
src/cores/ | src/repositories/ | 8 | 0 |
src/cores/ | src/utils/ | 2 | 0 |
src/dtos/ | src/ | 90 | 9 |
src/dtos/ | src/repositories/ | 1 | 0 |
src/dtos/ | src/schema/ | 3 | 0 |
src/dtos/ | src/utils/ | 11 | 0 |
src/emails/ | src/repositories/ | 4 | 0 |
src/emails/ | src/utils/ | 3 | 0 |
src/maintenance/ | src/ | 7 | 1 |
src/maintenance/ | src/controllers/ | 2 | 2 |
src/maintenance/ | src/cores/ | 1 | 0 |
src/maintenance/ | src/dtos/ | 7 | 0 |
src/maintenance/ | src/middleware/ | 1 | 0 |
src/maintenance/ | src/repositories/ | 12 | 1 |
src/maintenance/ | src/services/ | 7 | 5 |
src/maintenance/ | src/utils/ | 5 | 0 |
src/middleware/ | src/ | 5 | 1 |
src/middleware/ | src/dtos/ | 3 | 0 |
src/middleware/ | src/repositories/ | 7 | 0 |
src/middleware/ | src/services/ | 3 | 0 |
src/middleware/ | src/utils/ | 6 | 0 |
src/repositories/ | src/ | 111 | 10 |
src/repositories/ | src/dtos/ | 28 | 1 |
src/repositories/ | src/emails/ | 4 | 0 |
src/repositories/ | src/schema/ | 85 | 0 |
src/repositories/ | src/utils/ | 30 | 0 |
src/schema/ | src/ | 72 | 4 |
src/schema/ | src/dtos/ | 5 | 0 |
src/schema/ | src/repositories/ | 3 | 0 |
src/schema/ | src/utils/ | 3 | 0 |
src/services/ | src/ | 129 | 25 |
src/services/ | src/cores/ | 14 | 0 |
src/services/ | src/dtos/ | 124 | 1 |
src/services/ | src/maintenance/ | 1 | 0 |
src/services/ | src/middleware/ | 1 | 0 |
src/services/ | src/repositories/ | 109 | 18 |
src/services/ | src/schema/ | 11 | 0 |
src/services/ | src/utils/ | 119 | 0 |
src/utils/ | src/ | 34 | 8 |
src/utils/ | src/cores/ | 3 | 0 |
src/utils/ | src/dtos/ | 21 | 0 |
src/utils/ | src/middleware/ | 1 | 0 |
src/utils/ | src/repositories/ | 20 | 1 |
src/utils/ | src/schema/ | 2 | 0 |
src/workers/ | src/ | 6 | 0 |
src/workers/ | src/maintenance/ | 1 | 0 |
src/workers/ | src/middleware/ | 1 | 0 |
src/workers/ | src/repositories/ | 6 | 0 |
src/workers/ | src/services/ | 1 | 0 |
src/workers/ | src/utils/ | 3 | 0 |
1,630 file pairs cross folders in 581 folder edges. Rows import columns. Folders are ordered importers first (strongly connected sets, then a greedy order inside each), so a cell below the diagonal is an import against the order. Darker means more file pairs (1, 2–3, 4–9, 10–29, 30+).
Table view
| Importer folder | Imported folder | File pairs | Type-only |
|---|---|---|---|
module/activity | module/auth | 3 | 1 |
module/activity | module/user | 1 | 0 |
module/activity | platform/database | 4 | 0 |
module/activity | platform/registry | 1 | 0 |
module/activity | shared | 7 | 0 |
module/activity | src/schema/ | 2 | 0 |
module/album | module/asset | 5 | 0 |
module/album | module/auth | 3 | 1 |
module/album | module/map | 2 | 0 |
module/album | module/user | 1 | 0 |
module/album | platform/database | 3 | 0 |
module/album | platform/registry | 1 | 0 |
module/album | shared | 15 | 1 |
module/album | src/schema/ | 5 | 0 |
module/album | src/utils/ | 1 | 0 |
module/api-key | module/auth | 3 | 1 |
module/api-key | platform/access | 1 | 0 |
module/api-key | platform/database | 3 | 0 |
module/api-key | platform/registry | 1 | 0 |
module/api-key | shared | 8 | 0 |
module/api-key | src/schema/ | 2 | 0 |
module/api-key | src/utils/ | 1 | 0 |
module/asset | module/auth | 15 | 5 |
module/asset | module/ocr | 2 | 0 |
module/asset | module/partner | 1 | 0 |
module/asset | module/person | 1 | 0 |
module/asset | module/tag | 1 | 0 |
module/asset | module/user | 1 | 0 |
module/asset | platform/access | 4 | 0 |
module/asset | platform/database | 12 | 1 |
module/asset | platform/event | 1 | 0 |
module/asset | platform/file | 5 | 0 |
module/asset | platform/logging | 2 | 0 |
module/asset | platform/registry | 3 | 0 |
module/asset | platform/storage | 2 | 0 |
module/asset | shared | 47 | 6 |
module/asset | src/schema/ | 11 | 0 |
module/asset | src/utils/ | 3 | 0 |
module/auth | module/config | 1 | 0 |
module/auth | module/user | 4 | 0 |
module/auth | platform/access | 1 | 0 |
module/auth | platform/database | 2 | 0 |
module/auth | platform/http-response | 2 | 0 |
module/auth | platform/logging | 2 | 0 |
module/auth | platform/registry | 2 | 0 |
module/auth | shared | 15 | 1 |
module/auth | src/ | 1 | 0 |
module/auth | src/services/ | 3 | 0 |
module/cluster-group | module/activity | 1 | 0 |
module/cluster-group | module/auth | 3 | 1 |
module/cluster-group | module/user | 2 | 0 |
module/cluster-group | platform/database | 1 | 0 |
module/cluster-group | platform/registry | 1 | 0 |
module/cluster-group | shared | 6 | 0 |
module/cluster-group | src/schema/ | 3 | 0 |
module/cluster-group | src/utils/ | 1 | 0 |
module/config | module/auth | 4 | 0 |
module/config | module/system-metadata | 1 | 0 |
module/config | platform/event | 1 | 1 |
module/config | platform/logging | 1 | 0 |
module/config | platform/registry | 1 | 0 |
module/config | platform/storage | 1 | 0 |
module/config | shared | 15 | 2 |
module/config | src/repositories/ | 1 | 0 |
module/config | src/utils/ | 1 | 0 |
module/database-backup | module/auth | 2 | 1 |
module/database-backup | module/config | 1 | 0 |
module/database-backup | module/job | 1 | 0 |
module/database-backup | module/maintenance | 1 | 0 |
module/database-backup | module/system-metadata | 1 | 0 |
module/database-backup | module/user | 1 | 0 |
module/database-backup | platform/cron | 1 | 0 |
module/database-backup | platform/event | 1 | 1 |
module/database-backup | platform/file | 2 | 0 |
module/database-backup | platform/http-response | 1 | 0 |
module/database-backup | platform/logging | 2 | 0 |
module/database-backup | platform/process | 1 | 0 |
module/database-backup | platform/storage | 2 | 0 |
module/database-backup | shared | 5 | 0 |
module/database-backup | src/ | 1 | 0 |
module/database-backup | src/maintenance/ | 1 | 0 |
module/database-backup | src/repositories/ | 2 | 0 |
module/database-backup | src/utils/ | 1 | 0 |
module/download | module/auth | 3 | 1 |
module/download | platform/database | 1 | 0 |
module/download | platform/file | 1 | 0 |
module/download | platform/registry | 1 | 0 |
module/download | platform/storage | 2 | 0 |
module/download | shared | 6 | 0 |
module/download | src/schema/ | 1 | 0 |
module/duplicate | module/asset | 6 | 0 |
module/duplicate | module/auth | 3 | 1 |
module/duplicate | module/search | 1 | 0 |
module/duplicate | platform/database | 2 | 0 |
module/duplicate | platform/registry | 1 | 0 |
module/duplicate | shared | 8 | 1 |
module/duplicate | src/repositories/ | 1 | 0 |
module/duplicate | src/schema/ | 2 | 0 |
module/duplicate | src/utils/ | 1 | 0 |
module/integrity | module/auth | 2 | 1 |
module/integrity | platform/event | 1 | 1 |
module/integrity | platform/file | 2 | 0 |
module/integrity | platform/logging | 1 | 0 |
module/integrity | platform/registry | 1 | 0 |
module/integrity | platform/storage | 1 | 0 |
module/integrity | shared | 9 | 1 |
module/integrity | src/ | 1 | 0 |
module/integrity | src/schema/ | 2 | 0 |
module/integrity | src/utils/ | 1 | 0 |
module/job | module/asset | 1 | 0 |
module/job | module/auth | 2 | 1 |
module/job | module/queue | 4 | 0 |
module/job | platform/event | 2 | 0 |
module/job | platform/logging | 1 | 0 |
module/job | platform/registry | 1 | 0 |
module/job | shared | 10 | 2 |
module/job | src/repositories/ | 1 | 0 |
module/job | src/utils/ | 1 | 0 |
module/library | module/auth | 1 | 0 |
module/library | platform/database | 1 | 0 |
module/library | platform/event | 1 | 1 |
module/library | platform/registry | 1 | 0 |
module/library | platform/storage | 1 | 0 |
module/library | shared | 10 | 1 |
module/library | src/ | 1 | 0 |
module/library | src/schema/ | 3 | 0 |
module/library | src/utils/ | 1 | 0 |
module/machine-learning | module/config | 1 | 0 |
module/machine-learning | platform/logging | 1 | 0 |
module/maintenance | module/auth | 5 | 3 |
module/maintenance | module/config | 1 | 0 |
module/maintenance | module/database-backup | 4 | 1 |
module/maintenance | module/server | 4 | 2 |
module/maintenance | module/system-metadata | 1 | 0 |
module/maintenance | module/version | 1 | 1 |
module/maintenance | platform/event | 3 | 2 |
module/maintenance | platform/file | 1 | 0 |
module/maintenance | platform/http-response | 2 | 0 |
module/maintenance | platform/logging | 4 | 0 |
module/maintenance | platform/process | 1 | 0 |
module/maintenance | platform/registry | 2 | 1 |
module/maintenance | platform/storage | 4 | 0 |
module/maintenance | shared | 14 | 3 |
module/maintenance | src/ | 1 | 0 |
module/maintenance | src/maintenance/ | 1 | 0 |
module/maintenance | src/repositories/ | 3 | 0 |
module/maintenance | src/services/ | 1 | 0 |
module/maintenance | src/utils/ | 2 | 0 |
module/map | module/asset | 1 | 0 |
module/map | module/auth | 3 | 1 |
module/map | module/system-metadata | 1 | 0 |
module/map | platform/logging | 1 | 0 |
module/map | platform/registry | 1 | 0 |
module/map | shared | 5 | 0 |
module/map | src/ | 1 | 0 |
module/map | src/repositories/ | 1 | 0 |
module/map | src/schema/ | 3 | 0 |
module/memory | module/asset | 6 | 2 |
module/memory | module/auth | 4 | 1 |
module/memory | platform/database | 2 | 0 |
module/memory | platform/registry | 1 | 0 |
module/memory | shared | 11 | 1 |
module/memory | src/schema/ | 2 | 0 |
module/memory | src/utils/ | 1 | 0 |
module/notification | module/album | 1 | 0 |
module/notification | module/asset | 1 | 0 |
module/notification | module/auth | 6 | 2 |
module/notification | module/config | 3 | 0 |
module/notification | platform/database | 1 | 0 |
module/notification | platform/event | 1 | 1 |
module/notification | platform/file | 1 | 0 |
module/notification | platform/logging | 1 | 0 |
module/notification | platform/registry | 2 | 0 |
module/notification | shared | 15 | 2 |
module/notification | src/emails/ | 4 | 0 |
module/notification | src/schema/ | 2 | 0 |
module/notification | src/utils/ | 2 | 0 |
module/ocr | module/machine-learning | 1 | 0 |
module/ocr | platform/database | 1 | 0 |
module/ocr | platform/registry | 1 | 0 |
module/ocr | shared | 4 | 1 |
module/ocr | src/schema/ | 2 | 0 |
module/ocr | src/utils/ | 1 | 0 |
module/partner | module/auth | 3 | 1 |
module/partner | module/user | 2 | 0 |
module/partner | platform/database | 2 | 0 |
module/partner | platform/registry | 1 | 0 |
module/partner | shared | 6 | 0 |
module/partner | src/schema/ | 2 | 0 |
module/person | module/asset | 6 | 1 |
module/person | module/auth | 5 | 2 |
module/person | module/machine-learning | 1 | 0 |
module/person | module/user | 1 | 0 |
module/person | platform/database | 4 | 0 |
module/person | platform/file | 2 | 0 |
module/person | platform/logging | 2 | 0 |
module/person | platform/registry | 1 | 0 |
module/person | shared | 23 | 2 |
module/person | src/schema/ | 12 | 0 |
module/person | src/utils/ | 2 | 0 |
module/plugin | module/auth | 1 | 0 |
module/plugin | module/workflow | 2 | 0 |
module/plugin | platform/database | 1 | 0 |
module/plugin | platform/logging | 1 | 0 |
module/plugin | platform/registry | 1 | 0 |
module/plugin | shared | 7 | 0 |
module/plugin | src/schema/ | 3 | 0 |
module/queue | module/auth | 3 | 1 |
module/queue | module/config | 1 | 0 |
module/queue | platform/event | 1 | 1 |
module/queue | platform/registry | 1 | 0 |
module/queue | shared | 8 | 1 |
module/queue | src/utils/ | 1 | 0 |
module/search | module/album | 1 | 0 |
module/search | module/asset | 5 | 0 |
module/search | module/auth | 4 | 1 |
module/search | module/config | 2 | 0 |
module/search | module/person | 2 | 0 |
module/search | platform/access | 2 | 0 |
module/search | platform/database | 3 | 0 |
module/search | platform/event | 1 | 1 |
module/search | platform/registry | 2 | 0 |
module/search | shared | 13 | 1 |
module/search | src/repositories/ | 1 | 0 |
module/search | src/schema/ | 2 | 0 |
module/search | src/utils/ | 2 | 0 |
module/server | module/auth | 1 | 0 |
module/server | module/system-metadata | 2 | 0 |
module/server | module/user | 3 | 0 |
module/server | module/version | 1 | 0 |
module/server | platform/logging | 1 | 0 |
module/server | platform/registry | 1 | 0 |
module/server | platform/storage | 1 | 0 |
module/server | shared | 9 | 0 |
module/server | src/ | 1 | 0 |
module/server | src/repositories/ | 1 | 0 |
module/server | src/utils/ | 1 | 0 |
module/session | module/auth | 3 | 1 |
module/session | platform/database | 3 | 0 |
module/session | platform/event | 1 | 1 |
module/session | platform/registry | 1 | 0 |
module/session | shared | 6 | 0 |
module/session | src/schema/ | 2 | 0 |
module/shared-link | module/album | 1 | 0 |
module/shared-link | module/asset | 5 | 0 |
module/shared-link | module/auth | 4 | 2 |
module/shared-link | platform/database | 3 | 0 |
module/shared-link | platform/http-response | 1 | 0 |
module/shared-link | platform/logging | 1 | 0 |
module/shared-link | platform/registry | 1 | 0 |
module/shared-link | shared | 10 | 0 |
module/shared-link | src/schema/ | 5 | 0 |
module/shared-link | src/utils/ | 1 | 0 |
module/stack | module/asset | 3 | 0 |
module/stack | module/auth | 4 | 1 |
module/stack | platform/database | 3 | 0 |
module/stack | platform/registry | 1 | 0 |
module/stack | shared | 6 | 0 |
module/stack | src/schema/ | 2 | 0 |
module/stack | src/utils/ | 1 | 0 |
module/sync | module/asset | 1 | 0 |
module/sync | module/auth | 3 | 1 |
module/sync | platform/database | 1 | 0 |
module/sync | platform/http-response | 1 | 0 |
module/sync | platform/logging | 1 | 0 |
module/sync | platform/registry | 1 | 0 |
module/sync | shared | 15 | 3 |
module/sync | src/schema/ | 4 | 0 |
module/system-metadata | module/auth | 1 | 0 |
module/system-metadata | platform/registry | 1 | 0 |
module/system-metadata | shared | 5 | 1 |
module/system-metadata | src/schema/ | 2 | 0 |
module/tag | module/asset | 3 | 0 |
module/tag | module/auth | 3 | 1 |
module/tag | platform/database | 4 | 0 |
module/tag | platform/logging | 1 | 0 |
module/tag | platform/registry | 1 | 0 |
module/tag | shared | 9 | 1 |
module/tag | src/schema/ | 4 | 0 |
module/tag | src/utils/ | 1 | 0 |
module/timeline | module/asset | 2 | 0 |
module/timeline | module/auth | 3 | 1 |
module/timeline | platform/access | 1 | 0 |
module/timeline | platform/registry | 1 | 0 |
module/timeline | shared | 6 | 0 |
module/trash | module/asset | 2 | 0 |
module/trash | module/auth | 3 | 1 |
module/trash | platform/registry | 1 | 0 |
module/trash | shared | 6 | 0 |
module/trash | src/schema/ | 1 | 0 |
module/trash | src/utils/ | 1 | 0 |
module/user | module/asset | 4 | 0 |
module/user | module/auth | 7 | 2 |
module/user | module/config | 1 | 0 |
module/user | module/session | 2 | 0 |
module/user | module/system-metadata | 2 | 0 |
module/user | platform/crypto | 1 | 0 |
module/user | platform/database | 3 | 0 |
module/user | platform/event | 1 | 1 |
module/user | platform/file | 3 | 0 |
module/user | platform/logging | 1 | 0 |
module/user | platform/media | 1 | 0 |
module/user | platform/registry | 2 | 0 |
module/user | platform/storage | 2 | 0 |
module/user | shared | 29 | 4 |
module/user | src/ | 2 | 0 |
module/user | src/schema/ | 3 | 0 |
module/user | src/services/ | 2 | 0 |
module/user | src/utils/ | 2 | 0 |
module/version | module/server | 1 | 0 |
module/version | platform/event | 1 | 1 |
module/version | platform/registry | 1 | 0 |
module/version | shared | 4 | 1 |
module/version | src/ | 1 | 0 |
module/version | src/schema/ | 2 | 0 |
module/version | src/utils/ | 1 | 0 |
module/video-stream | module/auth | 3 | 1 |
module/video-stream | module/config | 1 | 0 |
module/video-stream | platform/database | 1 | 0 |
module/video-stream | platform/event | 2 | 1 |
module/video-stream | platform/file | 2 | 0 |
module/video-stream | platform/logging | 1 | 0 |
module/video-stream | platform/media | 1 | 0 |
module/video-stream | platform/registry | 1 | 0 |
module/video-stream | platform/storage | 1 | 0 |
module/video-stream | shared | 8 | 1 |
module/video-stream | src/ | 2 | 0 |
module/video-stream | src/schema/ | 2 | 0 |
module/view | module/asset | 2 | 0 |
module/view | module/auth | 3 | 1 |
module/view | platform/database | 1 | 0 |
module/view | platform/registry | 1 | 0 |
module/view | shared | 4 | 0 |
module/view | src/schema/ | 1 | 0 |
module/workflow | module/album | 2 | 0 |
module/workflow | module/asset | 2 | 0 |
module/workflow | module/auth | 4 | 1 |
module/workflow | module/plugin | 3 | 0 |
module/workflow | module/tag | 2 | 0 |
module/workflow | platform/database | 2 | 0 |
module/workflow | platform/event | 1 | 1 |
module/workflow | platform/registry | 2 | 0 |
module/workflow | shared | 11 | 1 |
module/workflow | src/schema/ | 4 | 0 |
module/workflow | src/utils/ | 1 | 0 |
platform/access | module/auth | 1 | 0 |
platform/access | module/person | 4 | 0 |
platform/access | platform/database | 2 | 0 |
platform/access | shared | 3 | 0 |
platform/access | src/schema/ | 1 | 0 |
platform/bootstrap | module/auth | 1 | 0 |
platform/bootstrap | module/config | 1 | 0 |
platform/bootstrap | module/maintenance | 1 | 0 |
platform/bootstrap | platform/logging | 1 | 0 |
platform/bootstrap | platform/telemetry | 1 | 0 |
platform/bootstrap | platform/websocket | 1 | 0 |
platform/bootstrap | shared | 1 | 0 |
platform/bootstrap | src/ | 1 | 0 |
platform/bootstrap | src/repositories/ | 1 | 0 |
platform/bootstrap | src/utils/ | 1 | 0 |
platform/check | src/ | 1 | 0 |
platform/check | src/services/ | 1 | 0 |
platform/cron | platform/logging | 1 | 0 |
platform/database | module/asset | 2 | 0 |
platform/database | module/person | 1 | 0 |
platform/database | module/search | 2 | 0 |
platform/database | platform/registry | 1 | 0 |
platform/database | shared | 9 | 3 |
platform/database | src/ | 1 | 0 |
platform/database | src/schema/ | 6 | 0 |
platform/event | module/auth | 1 | 0 |
platform/event | module/config | 1 | 0 |
platform/event | platform/database | 1 | 0 |
platform/event | platform/logging | 1 | 0 |
platform/event | shared | 3 | 1 |
platform/event | src/repositories/ | 1 | 0 |
platform/file | module/asset | 3 | 0 |
platform/file | module/auth | 1 | 0 |
platform/file | platform/logging | 3 | 0 |
platform/file | platform/storage | 2 | 0 |
platform/file | shared | 3 | 1 |
platform/http-client | src/ | 1 | 0 |
platform/http-response | module/auth | 1 | 0 |
platform/http-response | shared | 1 | 0 |
platform/logging | shared | 3 | 0 |
platform/logging | src/repositories/ | 1 | 0 |
platform/logging | src/utils/ | 1 | 0 |
platform/media | module/asset | 4 | 0 |
platform/media | module/config | 2 | 0 |
platform/media | module/machine-learning | 1 | 0 |
platform/media | module/ocr | 1 | 0 |
platform/media | platform/database | 3 | 0 |
platform/media | platform/logging | 1 | 0 |
platform/media | platform/registry | 1 | 0 |
platform/media | platform/storage | 1 | 0 |
platform/media | shared | 11 | 4 |
platform/media | src/ | 3 | 0 |
platform/media | src/services/ | 1 | 0 |
platform/media | src/utils/ | 2 | 0 |
platform/metadata | module/asset | 1 | 0 |
platform/metadata | module/map | 1 | 0 |
platform/metadata | module/tag | 1 | 0 |
platform/metadata | platform/database | 2 | 0 |
platform/metadata | platform/event | 1 | 1 |
platform/metadata | platform/logging | 1 | 0 |
platform/metadata | platform/registry | 1 | 0 |
platform/metadata | platform/storage | 1 | 0 |
platform/metadata | shared | 6 | 1 |
platform/metadata | src/schema/ | 2 | 0 |
platform/metadata | src/utils/ | 1 | 0 |
platform/move | shared | 2 | 0 |
platform/move | src/schema/ | 2 | 0 |
platform/registry | module/activity | 4 | 0 |
platform/registry | module/album | 6 | 0 |
platform/registry | module/api-key | 4 | 0 |
platform/registry | module/asset | 14 | 0 |
platform/registry | module/auth | 12 | 0 |
platform/registry | module/cluster-group | 4 | 0 |
platform/registry | module/config | 7 | 0 |
platform/registry | module/database-backup | 3 | 0 |
platform/registry | module/download | 4 | 0 |
platform/registry | module/duplicate | 4 | 0 |
platform/registry | module/integrity | 4 | 0 |
platform/registry | module/job | 4 | 0 |
platform/registry | module/library | 4 | 0 |
platform/registry | module/machine-learning | 2 | 0 |
platform/registry | module/maintenance | 10 | 0 |
platform/registry | module/map | 4 | 0 |
platform/registry | module/memory | 4 | 0 |
platform/registry | module/notification | 8 | 0 |
platform/registry | module/ocr | 3 | 0 |
platform/registry | module/partner | 4 | 0 |
platform/registry | module/person | 7 | 0 |
platform/registry | module/plugin | 4 | 0 |
platform/registry | module/queue | 3 | 0 |
platform/registry | module/search | 5 | 0 |
platform/registry | module/server | 4 | 0 |
platform/registry | module/session | 4 | 0 |
platform/registry | module/shared-link | 6 | 0 |
platform/registry | module/stack | 4 | 0 |
platform/registry | module/sync | 6 | 0 |
platform/registry | module/system-metadata | 5 | 0 |
platform/registry | module/tag | 4 | 0 |
platform/registry | module/timeline | 2 | 0 |
platform/registry | module/trash | 4 | 0 |
platform/registry | module/user | 9 | 0 |
platform/registry | module/version | 4 | 0 |
platform/registry | module/video-stream | 4 | 0 |
platform/registry | module/view | 4 | 0 |
platform/registry | module/workflow | 5 | 0 |
platform/registry | platform/access | 3 | 0 |
platform/registry | platform/bootstrap | 1 | 0 |
platform/registry | platform/check | 1 | 0 |
platform/registry | platform/cron | 2 | 0 |
platform/registry | platform/crypto | 2 | 0 |
platform/registry | platform/database | 3 | 0 |
platform/registry | platform/event | 3 | 0 |
platform/registry | platform/file | 1 | 0 |
platform/registry | platform/http-client | 1 | 0 |
platform/registry | platform/logging | 6 | 0 |
platform/registry | platform/media | 4 | 0 |
platform/registry | platform/metadata | 3 | 0 |
platform/registry | platform/move | 2 | 0 |
platform/registry | platform/process | 3 | 0 |
platform/registry | platform/storage | 6 | 0 |
platform/registry | platform/telemetry | 4 | 0 |
platform/registry | platform/transcoding | 1 | 0 |
platform/registry | platform/websocket | 3 | 0 |
platform/registry | shared | 3 | 1 |
platform/registry | src/ | 2 | 0 |
platform/registry | src/maintenance/ | 1 | 0 |
platform/registry | src/repositories/ | 6 | 0 |
platform/registry | src/schema/ | 1 | 0 |
platform/registry | src/services/ | 2 | 0 |
platform/storage | module/asset | 3 | 0 |
platform/storage | module/config | 2 | 0 |
platform/storage | module/library | 1 | 0 |
platform/storage | module/person | 1 | 0 |
platform/storage | module/system-metadata | 1 | 0 |
platform/storage | platform/crypto | 1 | 0 |
platform/storage | platform/database | 1 | 0 |
platform/storage | platform/event | 1 | 1 |
platform/storage | platform/file | 1 | 0 |
platform/storage | platform/logging | 2 | 0 |
platform/storage | platform/move | 1 | 0 |
platform/storage | platform/registry | 2 | 0 |
platform/storage | shared | 9 | 3 |
platform/storage | src/ | 1 | 0 |
platform/storage | src/repositories/ | 1 | 0 |
platform/storage | src/utils/ | 1 | 0 |
platform/telemetry | platform/event | 1 | 1 |
platform/telemetry | platform/logging | 1 | 0 |
platform/telemetry | platform/registry | 1 | 0 |
platform/telemetry | shared | 3 | 0 |
platform/telemetry | src/ | 1 | 0 |
platform/telemetry | src/repositories/ | 1 | 0 |
platform/transcoding | platform/database | 1 | 0 |
platform/transcoding | platform/event | 1 | 1 |
platform/transcoding | platform/media | 1 | 0 |
platform/transcoding | platform/registry | 1 | 0 |
platform/transcoding | platform/storage | 1 | 0 |
platform/transcoding | shared | 3 | 1 |
platform/transcoding | src/ | 1 | 0 |
platform/websocket | module/asset | 1 | 0 |
platform/websocket | module/auth | 1 | 0 |
platform/websocket | module/notification | 1 | 0 |
platform/websocket | module/server | 1 | 0 |
platform/websocket | module/sync | 1 | 0 |
platform/websocket | platform/event | 1 | 0 |
platform/websocket | platform/logging | 1 | 0 |
platform/websocket | src/repositories/ | 1 | 0 |
platform/websocket | src/utils/ | 1 | 0 |
shared | module/asset | 3 | 0 |
shared | module/auth | 2 | 0 |
shared | module/config | 1 | 0 |
shared | module/maintenance | 1 | 0 |
shared | module/ocr | 1 | 0 |
shared | module/shared-link | 1 | 0 |
shared | module/user | 1 | 0 |
shared | platform/access | 1 | 0 |
shared | platform/database | 1 | 0 |
shared | platform/event | 1 | 0 |
shared | platform/file | 1 | 0 |
shared | platform/logging | 1 | 0 |
shared | src/ | 1 | 0 |
shared | src/repositories/ | 1 | 0 |
shared | src/schema/ | 1 | 0 |
shared | src/utils/ | 2 | 0 |
src/ | module/system-metadata | 1 | 0 |
src/ | platform/database | 1 | 0 |
src/ | platform/registry | 1 | 0 |
src/ | shared | 2 | 0 |
src/ | src/repositories/ | 1 | 0 |
src/ | src/schema/ | 1 | 1 |
src/bin/ | module/auth | 1 | 0 |
src/bin/ | module/machine-learning | 1 | 0 |
src/bin/ | module/sync | 1 | 0 |
src/bin/ | platform/access | 1 | 0 |
src/bin/ | platform/database | 1 | 0 |
src/bin/ | platform/logging | 1 | 0 |
src/bin/ | platform/registry | 2 | 0 |
src/bin/ | shared | 1 | 0 |
src/bin/ | src/repositories/ | 1 | 0 |
src/bin/ | src/utils/ | 1 | 0 |
src/emails/ | module/notification | 4 | 0 |
src/emails/ | module/tag | 3 | 0 |
src/maintenance/ | src/ | 1 | 0 |
src/repositories/ | platform/access | 1 | 0 |
src/repositories/ | platform/database | 1 | 0 |
src/repositories/ | platform/logging | 1 | 0 |
src/repositories/ | shared | 7 | 2 |
src/repositories/ | src/ | 2 | 0 |
src/repositories/ | src/schema/ | 2 | 0 |
src/schema/ | module/asset | 1 | 0 |
src/schema/ | module/person | 2 | 0 |
src/schema/ | module/plugin | 2 | 0 |
src/schema/ | platform/database | 4 | 0 |
src/schema/ | platform/logging | 2 | 0 |
src/schema/ | shared | 70 | 4 |
src/schema/ | src/ | 1 | 0 |
src/schema/ | src/repositories/ | 1 | 0 |
src/services/ | module/maintenance | 2 | 0 |
src/services/ | module/user | 1 | 0 |
src/services/ | platform/registry | 1 | 0 |
src/services/ | shared | 1 | 0 |
src/services/ | src/ | 1 | 0 |
src/services/ | src/utils/ | 1 | 0 |
src/utils/ | module/config | 1 | 0 |
src/utils/ | platform/logging | 1 | 0 |
src/utils/ | shared | 2 | 0 |
src/utils/ | src/ | 1 | 0 |
src/workers/ | module/maintenance | 4 | 0 |
src/workers/ | platform/bootstrap | 2 | 0 |
src/workers/ | platform/logging | 1 | 0 |
src/workers/ | platform/registry | 3 | 0 |
src/workers/ | platform/telemetry | 1 | 0 |
src/workers/ | platform/websocket | 1 | 0 |
src/workers/ | shared | 1 | 0 |
src/workers/ | src/ | 1 | 0 |
src/workers/ | src/repositories/ | 1 | 0 |
src/workers/ | src/utils/ | 3 | 0 |
Computed by architecture-cleaner analyzer (TypeScript module resolution), production importers under the module root with TypeScript 6.0.3, from git objects of both commits; stored in graph.json. Folders outside the layout are collapsed to their first directory under the module root, so this graph can count fewer folders than R4's report and the findings log.
The ladder
One transformation per commit: each of the 62 committed steps was certified against its parent before the next one started, with the static checks (K0, K1, K2, K3a, K3b, K3c, K4, K6, K7). Step 63 (R4) is certified with the oracles, by its rung certificate. The rung certificates of R1, R2, R3, R4 and the whole-PR certificate add the oracles (K8: tsc, unit, openapi). A FAIL rolls the commit back, and the step replans with the plan entries the failure names pinned in place.
| Rung | Status | Steps | Rung certificate | Duration |
|---|---|---|---|---|
| R0 | passed | – | – | 3 m 56 s |
| R1 | certified | 38 certified | PASS (static checks and oracles) | 1 h 00 m |
| R2 | certified | 21 certified | PASS (static checks and oracles) | 35 m 37 s |
| R3 | certified | 3 certified | PASS (static checks and oracles) | 7 m 49 s |
| R4 | certified | 1 certified | PASS (static checks and oracles) | 4 m 40 s |
Table view
| Phase | Time |
|---|---|
| preflight | 13.4 s |
| baseline test runs | 3 m 43 s |
| steps (move, commit, certify) | 1 h 34 m |
| rung certificates with oracles | 13 m 19 s |
| whole-PR certificate | 2 m 35 s |
| other (findings, report, bookkeeping) | 39.2 s |
| wall time | 1 h 55 m |
No attempt failed: each of the 63 certified steps passed its certificate on its first attempt.
Every step
Open a step for its moves, its attempts and its certificate.
001 R1 module/activity certified 6 files moved, 17 specifier edits in 12 files, 2 m 21 s
Commit cf670ebc57ae1b6c7e64daf26194be6bfd086efb, tree e6c86400e6aba4584b58dce69f982ffda608e85f
6 paths moved
server/src/controllers/activity.controller.spec.ts → server/src/modules/activity/activity.controller.spec.ts server/src/controllers/activity.controller.ts → server/src/modules/activity/activity.controller.ts server/src/dtos/activity.dto.ts → server/src/modules/activity/activity.dto.ts server/src/repositories/activity.repository.ts → server/src/modules/activity/activity.repository.ts server/src/services/activity.service.spec.ts → server/src/modules/activity/activity.service.spec.ts server/src/services/activity.service.ts → server/src/modules/activity/activity.service.ts
attempt 1: passed round 1, from 02063972e8, 6 moves, 2 m 21 s
Certificate: PASS (static checks) certificates/001-R1-module-activity.json
certificate JSON · digest sha256:909262855d4acc3f478bb34600f1209cda980a479c70a3cf7232da297ffac519
ac certify 02063972e8..11b856c607 (package root server/), profile immich
trees: 424df72c34..e6c86400e6
pathMap: 6 moves, 8 edited in place, 3450 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (9.6 s)
PASS K1 Move-set integrity: 6 moves, 8 files edited in place, nothing added or deleted (1.4 s)
PASS K2 Byte-span confinement: 17 specifier spans changed in 12 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 17 rewritten specifiers keep their form (1.4 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.7 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.7 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/activity.service.spec.ts (moved to server/src/modules/activity/activity.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/activity.repository.ts (moved to server/src/modules/activity/activity.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (97.4 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.7 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:909262855d4acc3f478bb34600f1209cda980a479c70a3cf7232da297ffac519002 R1 module/album certified 7 files moved, 36 specifier edits in 25 files, 1 m 28 s
Commit e4df7c888915bbb55f64d559a23ee97ee0e476d5, tree 7a4771bd66ed18dad2052efd2bf68f1a51fbffa7
7 paths moved
server/src/controllers/album.controller.spec.ts → server/src/modules/album/album.controller.spec.ts server/src/controllers/album.controller.ts → server/src/modules/album/album.controller.ts server/src/dtos/album.dto.ts → server/src/modules/album/album.dto.ts server/src/repositories/album-user.repository.ts → server/src/modules/album/album-user.repository.ts server/src/repositories/album.repository.ts → server/src/modules/album/album.repository.ts server/src/services/album.service.spec.ts → server/src/modules/album/album.service.spec.ts server/src/services/album.service.ts → server/src/modules/album/album.service.ts
attempt 1: passed round 1, from cf670ebc57, 7 moves, 1 m 28 s
Certificate: PASS (static checks) certificates/002-R1-module-album.json
certificate JSON · digest sha256:1ebedaefc44a510108ffde5b4237a1b523f60cab352fdb8680e66b4ca19a2495
ac certify cf670ebc57..e95cca0892 (package root server/), profile immich
trees: e6c86400e6..7a4771bd66
pathMap: 7 moves, 20 edited in place, 3437 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 7 moved files (5.0 s)
PASS K1 Move-set integrity: 7 moves, 20 files edited in place, nothing added or deleted (1.8 s)
PASS K2 Byte-span confinement: 36 specifier spans changed in 25 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 36 rewritten specifiers keep their form (1.5 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.0 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 7 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.4 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/album.service.spec.ts (moved to server/src/modules/album/album.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/album-user.repository.ts (moved to server/src/modules/album/album-user.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.4 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:1ebedaefc44a510108ffde5b4237a1b523f60cab352fdb8680e66b4ca19a2495003 R1 module/api-key certified 6 files moved, 14 specifier edits in 11 files, 1 m 28 s
Commit 36b507aec79264064153cd878600e7f1235381fe, tree 4bb492901defeb729b471f828d351dd938d6e019
6 paths moved
server/src/controllers/api-key.controller.spec.ts → server/src/modules/api-key/api-key.controller.spec.ts server/src/controllers/api-key.controller.ts → server/src/modules/api-key/api-key.controller.ts server/src/dtos/api-key.dto.ts → server/src/modules/api-key/api-key.dto.ts server/src/repositories/api-key.repository.ts → server/src/modules/api-key/api-key.repository.ts server/src/services/api-key.service.spec.ts → server/src/modules/api-key/api-key.service.spec.ts server/src/services/api-key.service.ts → server/src/modules/api-key/api-key.service.ts
attempt 1: passed round 1, from e4df7c8889, 6 moves, 1 m 28 s
Certificate: PASS (static checks) certificates/003-R1-module-api-key.json
certificate JSON · digest sha256:fd9e7e9b81e47a6f8713483882095ec3abfbcfb6eb0e66d75ced27a3e5adb571
ac certify e4df7c8889..0e923b226a (package root server/), profile immich
trees: 7a4771bd66..4bb492901d
pathMap: 6 moves, 7 edited in place, 3451 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (5.0 s)
PASS K1 Move-set integrity: 6 moves, 7 files edited in place, nothing added or deleted (1.8 s)
PASS K2 Byte-span confinement: 14 specifier spans changed in 11 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 14 rewritten specifiers keep their form (1.5 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.9 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/api-key.service.spec.ts (moved to server/src/modules/api-key/api-key.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/api-key.repository.ts (moved to server/src/modules/api-key/api-key.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.1 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.6 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:fd9e7e9b81e47a6f8713483882095ec3abfbcfb6eb0e66d75ced27a3e5adb571004 R1 module/asset certified 24 files moved, 210 specifier edits in 120 files, 1 m 31 s
Commit bc9ffcea2cff24ff1d598a32d32e36aa703d43bd, tree 9c99e5147528c53367c0ef593cad3c44ea8bc65f
24 paths moved
server/src/controllers/asset-file.controller.ts → server/src/modules/asset/asset-file.controller.ts server/src/controllers/asset-media.controller.spec.ts → server/src/modules/asset/asset-media.controller.spec.ts server/src/controllers/asset-media.controller.ts → server/src/modules/asset/asset-media.controller.ts server/src/controllers/asset.controller.spec.ts → server/src/modules/asset/asset.controller.spec.ts server/src/controllers/asset.controller.ts → server/src/modules/asset/asset.controller.ts server/src/dtos/asset-file.dto.ts → server/src/modules/asset/asset-file.dto.ts server/src/dtos/asset-ids.response.dto.ts → server/src/modules/asset/asset-ids.response.dto.ts server/src/dtos/asset-media-response.dto.ts → server/src/modules/asset/asset-media-response.dto.ts server/src/dtos/asset-media.dto.ts → server/src/modules/asset/asset-media.dto.ts server/src/dtos/asset-response.dto.ts → server/src/modules/asset/asset-response.dto.ts server/src/dtos/asset.dto.ts → server/src/modules/asset/asset.dto.ts server/src/dtos/editing.dto.ts → server/src/modules/asset/editing.dto.ts server/src/dtos/exif.dto.ts → server/src/modules/asset/exif.dto.ts server/src/middleware/asset-upload.interceptor.ts → server/src/modules/asset/asset-upload.interceptor.ts server/src/repositories/asset-edit.repository.ts → server/src/modules/asset/asset-edit.repository.ts server/src/repositories/asset-file.repository.ts → server/src/modules/asset/asset-file.repository.ts server/src/repositories/asset-job.repository.ts → server/src/modules/asset/asset-job.repository.ts server/src/repositories/asset.repository.ts → server/src/modules/asset/asset.repository.ts server/src/services/asset-file.service.ts → server/src/modules/asset/asset-file.service.ts server/src/services/asset-media.service.spec.ts → server/src/modules/asset/asset-media.service.spec.ts server/src/services/asset-media.service.ts → server/src/modules/asset/asset-media.service.ts server/src/services/asset.service.spec.ts → server/src/modules/asset/asset.service.spec.ts server/src/services/asset.service.ts → server/src/modules/asset/asset.service.ts server/src/utils/asset.util.ts → server/src/modules/asset/asset.util.ts
attempt 1: passed round 1, from 36b507aec7, 24 moves, 1 m 31 s
Certificate: PASS (static checks) certificates/004-R1-module-asset.json
certificate JSON · digest sha256:1b81fb81f24e437ed20222e0770206883820cabf3642374cb77ea823c98e62b9
ac certify 36b507aec7..4deb58fd2f (package root server/), profile immich
trees: 4bb492901d..9c99e51475
pathMap: 24 moves, 103 edited in place, 3337 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 24 moved files (5.0 s)
PASS K1 Move-set integrity: 24 moves, 103 files edited in place, nothing added or deleted (1.8 s)
PASS K2 Byte-span confinement: 210 specifier spans changed in 120 files; every other byte identical (0.9 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 210 rewritten specifiers keep their form (1.5 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.2 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 24 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (9 findings in docs, comments or ungated coverage settings) (5.8 s)
finding (stack-text) server/src/services/asset-media.service.ts: moved to server/src/modules/asset/asset-media.service.ts; 1 stack-trace reads passed along as text (line 224); their frames now name the new path
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/asset-file.service.ts (moved to server/src/modules/asset/asset-file.service.ts)
… 8 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.9 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:1b81fb81f24e437ed20222e0770206883820cabf3642374cb77ea823c98e62b9005 R1 module/auth certified 15 files moved, 177 specifier edits in 117 files, 1 m 30 s
Commit a6bcc0fa8c5a8429257f703d2ab089bcc50f33b7, tree b84e0e20724a378407c0a19b80a4737205983444
15 paths moved
server/src/commands/grant-admin.ts → server/src/modules/auth/grant-admin.ts server/src/commands/oauth-login.ts → server/src/modules/auth/oauth-login.ts server/src/commands/password-login.ts → server/src/modules/auth/password-login.ts server/src/controllers/auth-admin.controller.ts → server/src/modules/auth/auth-admin.controller.ts server/src/controllers/auth.controller.spec.ts → server/src/modules/auth/auth.controller.spec.ts server/src/controllers/auth.controller.ts → server/src/modules/auth/auth.controller.ts server/src/controllers/oauth.controller.spec.ts → server/src/modules/auth/oauth.controller.spec.ts server/src/controllers/oauth.controller.ts → server/src/modules/auth/oauth.controller.ts server/src/dtos/auth.dto.ts → server/src/modules/auth/auth.dto.ts server/src/middleware/auth.guard.spec.ts → server/src/modules/auth/auth.guard.spec.ts server/src/middleware/auth.guard.ts → server/src/modules/auth/auth.guard.ts server/src/repositories/oauth.repository.ts → server/src/modules/auth/oauth.repository.ts server/src/services/auth-admin.service.ts → server/src/modules/auth/auth-admin.service.ts server/src/services/auth.service.spec.ts → server/src/modules/auth/auth.service.spec.ts server/src/services/auth.service.ts → server/src/modules/auth/auth.service.ts
attempt 1: passed round 1, from bc9ffcea2c, 15 moves, 1 m 30 s
Certificate: PASS (static checks) certificates/005-R1-module-auth.json
certificate JSON · digest sha256:e66b3538df82d31cd5ed77ee1f7aece3a725e31b867dfc54bfec8b2dd5d1c0bb
ac certify bc9ffcea2c..b8191fa418 (package root server/), profile immich
trees: 9c99e51475..b84e0e2072
pathMap: 15 moves, 107 edited in place, 3342 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 15 moved files (5.0 s)
PASS K1 Move-set integrity: 15 moves, 107 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 177 specifier spans changed in 117 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 177 rewritten specifiers keep their form (1.5 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 15 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (stack-text) server/src/services/auth.service.ts: moved to server/src/modules/auth/auth.service.ts; 1 stack-trace reads passed along as text (line 403); their frames now name the new path
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/auth-admin.service.ts (moved to server/src/modules/auth/auth-admin.service.ts)
… 7 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.4 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:e66b3538df82d31cd5ed77ee1f7aece3a725e31b867dfc54bfec8b2dd5d1c0bb006 R1 module/cluster-group certified 4 files moved, 14 specifier edits in 12 files, 1 m 30 s
Commit 2402a3abeeb4041e4dd10843e084f705969e9bd2, tree 8a3fde209ddbc272fe9e70c8f133ddc3a2c3da31
4 paths moved
server/src/controllers/cluster-group.controller.ts → server/src/modules/cluster-group/cluster-group.controller.ts server/src/dtos/cluster-group.dto.ts → server/src/modules/cluster-group/cluster-group.dto.ts server/src/repositories/cluster-group.repository.ts → server/src/modules/cluster-group/cluster-group.repository.ts server/src/services/cluster-group.service.ts → server/src/modules/cluster-group/cluster-group.service.ts
attempt 1: passed round 1, from a6bcc0fa8c, 4 moves, 1 m 30 s
Certificate: PASS (static checks) certificates/006-R1-module-cluster-group.json
certificate JSON · digest sha256:b0fd9e09196a87239dbae7de95ca005fd53104a8e62ad99b73cc9db8dc7d0800
ac certify a6bcc0fa8c..99ba1b5b78 (package root server/), profile immich
trees: b84e0e2072..8a3fde209d
pathMap: 4 moves, 10 edited in place, 3450 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 4 moved files (5.2 s)
PASS K1 Move-set integrity: 4 moves, 10 files edited in place, nothing added or deleted (2.4 s)
PASS K2 Byte-span confinement: 14 specifier spans changed in 12 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 14 rewritten specifiers keep their form (1.5 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.0 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 4 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (7 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/cluster-group.service.ts (moved to server/src/modules/cluster-group/cluster-group.service.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/cluster-group.repository.ts (moved to server/src/modules/cluster-group/cluster-group.repository.ts)
… 5 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.3 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:b0fd9e09196a87239dbae7de95ca005fd53104a8e62ad99b73cc9db8dc7d0800007 R1 module/config certified 10 files moved, 66 specifier edits in 49 files, 1 m 30 s
Commit 06316bd4bad503ee71d7e775f920c1c64068c81c, tree 6b5fcf2a98f518f4a31421f3090a494cd3fa5f2c
10 paths moved
server/src/controllers/config-admin.controller.ts → server/src/modules/config/config-admin.controller.ts server/src/controllers/config-public.controller.ts → server/src/modules/config/config-public.controller.ts server/src/controllers/config-user.controller.ts → server/src/modules/config/config-user.controller.ts server/src/controllers/system-config.controller.spec.ts → server/src/modules/config/system-config.controller.spec.ts server/src/controllers/system-config.controller.ts → server/src/modules/config/system-config.controller.ts server/src/dtos/config.dto.spec.ts → server/src/modules/config/config.dto.spec.ts server/src/dtos/config.dto.ts → server/src/modules/config/config.dto.ts server/src/services/system-config.service.spec.ts → server/src/modules/config/system-config.service.spec.ts server/src/services/system-config.service.ts → server/src/modules/config/system-config.service.ts server/src/utils/config.ts → server/src/modules/config/config.ts
attempt 1: passed round 1, from 2402a3abee, 10 moves, 1 m 30 s
Certificate: PASS (static checks) certificates/007-R1-module-config.json
certificate JSON · digest sha256:a514c0d32d79c36971870eedb04ffc4b409e3065ea9423561e61534175fbfe6b
ac certify 2402a3abee..49c0dc4c4d (package root server/), profile immich
trees: 8a3fde209d..6b5fcf2a98
pathMap: 10 moves, 40 edited in place, 3414 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 10 moved files (5.1 s)
PASS K1 Move-set integrity: 10 moves, 40 files edited in place, nothing added or deleted (2.4 s)
PASS K2 Byte-span confinement: 66 specifier spans changed in 49 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 66 rewritten specifiers keep their form (1.5 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.1 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 10 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (7 findings in docs, comments or ungated coverage settings) (5.4 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/system-config.service.spec.ts (moved to server/src/modules/config/system-config.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/system-config.service.spec.ts (moved to server/src/modules/config/system-config.service.spec.ts)
… 5 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.1 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:a514c0d32d79c36971870eedb04ffc4b409e3065ea9423561e61534175fbfe6b008 R1 module/database-backup certified 6 files moved, 15 specifier edits in 10 files, 1 m 29 s
Commit d74f93bf1f35a8774b4511c45eb98ae334089728, tree d993961cea2ad74aede89d35917501e858790cd7
6 paths moved
server/src/controllers/database-backup.controller.spec.ts → server/src/modules/database-backup/database-backup.controller.spec.ts server/src/controllers/database-backup.controller.ts → server/src/modules/database-backup/database-backup.controller.ts server/src/dtos/database-backup.dto.ts → server/src/modules/database-backup/database-backup.dto.ts server/src/services/database-backup.service.spec.ts → server/src/modules/database-backup/database-backup.service.spec.ts server/src/services/database-backup.service.ts → server/src/modules/database-backup/database-backup.service.ts server/src/utils/database-backups.ts → server/src/modules/database-backup/database-backups.ts
attempt 1: passed round 1, from 06316bd4ba, 6 moves, 1 m 29 s
Certificate: PASS (static checks) certificates/008-R1-module-database-backup.json
certificate JSON · digest sha256:9aaae7b61cdc60655a1e5f494e8a8529ad1d84bcdf5c1b80f6f72b2c6314b895
ac certify 06316bd4ba..3d9cecfcaf (package root server/), profile immich
trees: 6b5fcf2a98..d993961cea
pathMap: 6 moves, 6 edited in place, 3452 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (5.1 s)
PASS K1 Move-set integrity: 6 moves, 6 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 15 specifier spans changed in 10 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 15 rewritten specifiers keep their form (1.5 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.1 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (7 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/database-backup.service.spec.ts (moved to server/src/modules/database-backup/database-backup.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/database-backup.service.spec.ts (moved to server/src/modules/database-backup/database-backup.service.spec.ts)
… 5 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.5 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:9aaae7b61cdc60655a1e5f494e8a8529ad1d84bcdf5c1b80f6f72b2c6314b895009 R1 module/download certified 6 files moved, 12 specifier edits in 9 files, 1 m 28 s
Commit 380b8ab16c16033f093b1928eb3a0fc7eb64cace, tree cd94b4f6f8aa3039d4518418beebe9437fbc5c58
6 paths moved
server/src/controllers/download.controller.spec.ts → server/src/modules/download/download.controller.spec.ts server/src/controllers/download.controller.ts → server/src/modules/download/download.controller.ts server/src/dtos/download.dto.ts → server/src/modules/download/download.dto.ts server/src/repositories/download.repository.ts → server/src/modules/download/download.repository.ts server/src/services/download.service.spec.ts → server/src/modules/download/download.service.spec.ts server/src/services/download.service.ts → server/src/modules/download/download.service.ts
attempt 1: passed round 1, from d74f93bf1f, 6 moves, 1 m 28 s
Certificate: PASS (static checks) certificates/009-R1-module-download.json
certificate JSON · digest sha256:d6229888093b5ca221c62cde71153b1824cc8e537f58336300727c76e79c670c
ac certify d74f93bf1f..ccef374134 (package root server/), profile immich
trees: d993961cea..cd94b4f6f8
pathMap: 6 moves, 5 edited in place, 3453 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (5.1 s)
PASS K1 Move-set integrity: 6 moves, 5 files edited in place, nothing added or deleted (1.9 s)
PASS K2 Byte-span confinement: 12 specifier spans changed in 9 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 12 rewritten specifiers keep their form (1.5 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/download.service.spec.ts (moved to server/src/modules/download/download.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/download.repository.ts (moved to server/src/modules/download/download.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.7 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:d6229888093b5ca221c62cde71153b1824cc8e537f58336300727c76e79c670c010 R1 module/duplicate certified 8 files moved, 16 specifier edits in 12 files, 1 m 29 s
Commit d49c79905bb39b3c3c41f1f8af697a4d90c3e5b1, tree 24cfcfceb2199535a71d25fab89763bfb02a28ea
8 paths moved
server/src/controllers/duplicate.controller.spec.ts → server/src/modules/duplicate/duplicate.controller.spec.ts server/src/controllers/duplicate.controller.ts → server/src/modules/duplicate/duplicate.controller.ts server/src/dtos/duplicate.dto.ts → server/src/modules/duplicate/duplicate.dto.ts server/src/repositories/duplicate.repository.ts → server/src/modules/duplicate/duplicate.repository.ts server/src/services/duplicate.service.spec.ts → server/src/modules/duplicate/duplicate.service.spec.ts server/src/services/duplicate.service.ts → server/src/modules/duplicate/duplicate.service.ts server/src/utils/duplicate.spec.ts → server/src/modules/duplicate/duplicate.spec.ts server/src/utils/duplicate.ts → server/src/modules/duplicate/duplicate.ts
attempt 1: passed round 1, from 380b8ab16c, 8 moves, 1 m 29 s
Certificate: PASS (static checks) certificates/010-R1-module-duplicate.json
certificate JSON · digest sha256:9716936939bbc76b643d524a99c73dad830faa3fc6fb9df6f783f598e0bc0f67
ac certify 380b8ab16c..e92962149e (package root server/), profile immich
trees: cd94b4f6f8..24cfcfceb2
pathMap: 8 moves, 7 edited in place, 3449 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 8 moved files (5.2 s)
PASS K1 Move-set integrity: 8 moves, 7 files edited in place, nothing added or deleted (1.9 s)
PASS K2 Byte-span confinement: 16 specifier spans changed in 12 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 16 rewritten specifiers keep their form (1.5 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.9 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 8 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (9 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (stack-text) server/src/services/duplicate.service.ts: moved to server/src/modules/duplicate/duplicate.service.ts; 1 stack-trace reads passed along as text (line 104); their frames now name the new path
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/duplicate.service.spec.ts (moved to server/src/modules/duplicate/duplicate.service.spec.ts)
… 8 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.7 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:9716936939bbc76b643d524a99c73dad830faa3fc6fb9df6f783f598e0bc0f67011 R1 module/integrity certified 5 files moved, 12 specifier edits in 10 files, 1 m 29 s
Commit 22f3b96735045bf904a588d7b4d25854906759be, tree be15f4a66ae811c0594cab9f5bdedda27b1a47e6
5 paths moved
server/src/controllers/integrity-admin.controller.ts → server/src/modules/integrity/integrity-admin.controller.ts server/src/dtos/integrity.dto.ts → server/src/modules/integrity/integrity.dto.ts server/src/repositories/integrity.repository.ts → server/src/modules/integrity/integrity.repository.ts server/src/services/integrity.service.spec.ts → server/src/modules/integrity/integrity.service.spec.ts server/src/services/integrity.service.ts → server/src/modules/integrity/integrity.service.ts
attempt 1: passed round 1, from d49c79905b, 5 moves, 1 m 29 s
Certificate: PASS (static checks) certificates/011-R1-module-integrity.json
certificate JSON · digest sha256:18639561a69abbe4dcbf806a0beb928aebde0867ab37d0c51de34b8e8d626503
ac certify d49c79905b..5036d72a59 (package root server/), profile immich
trees: 24cfcfceb2..be15f4a66a
pathMap: 5 moves, 7 edited in place, 3452 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 5 moved files (5.1 s)
PASS K1 Move-set integrity: 5 moves, 7 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 12 specifier spans changed in 10 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 12 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.3 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 5 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.1 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/integrity.service.spec.ts (moved to server/src/modules/integrity/integrity.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/integrity.repository.ts (moved to server/src/modules/integrity/integrity.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.2 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:18639561a69abbe4dcbf806a0beb928aebde0867ab37d0c51de34b8e8d626503012 R1 module/job certified 6 files moved, 24 specifier edits in 22 files, 1 m 29 s
Commit 0c9d579e786ba887e45a23c7a81907c2a376d84b, tree 77c6fb5d99b4593c19bac1c3724c0c8481b8f0d8
6 paths moved
server/src/controllers/job.controller.spec.ts → server/src/modules/job/job.controller.spec.ts server/src/controllers/job.controller.ts → server/src/modules/job/job.controller.ts server/src/dtos/job.dto.ts → server/src/modules/job/job.dto.ts server/src/repositories/job.repository.ts → server/src/modules/job/job.repository.ts server/src/services/job.service.spec.ts → server/src/modules/job/job.service.spec.ts server/src/services/job.service.ts → server/src/modules/job/job.service.ts
attempt 1: passed round 1, from 22f3b96735, 6 moves, 1 m 29 s
Certificate: PASS (static checks) certificates/012-R1-module-job.json
certificate JSON · digest sha256:7586bf31ee2d6700f5a08f9ddf663cbfc1396b5ab2bfba35e872f39d2f3eeb64
ac certify 22f3b96735..2254a40c73 (package root server/), profile immich
trees: be15f4a66a..77c6fb5d99
pathMap: 6 moves, 18 edited in place, 3440 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (5.1 s)
PASS K1 Move-set integrity: 6 moves, 18 files edited in place, nothing added or deleted (2.0 s)
PASS K2 Byte-span confinement: 24 specifier spans changed in 22 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 24 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.2 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/job.service.spec.ts (moved to server/src/modules/job/job.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/job.repository.ts (moved to server/src/modules/job/job.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.8 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:7586bf31ee2d6700f5a08f9ddf663cbfc1396b5ab2bfba35e872f39d2f3eeb64013 R1 module/library certified 5 files moved, 19 specifier edits in 14 files, 1 m 29 s
Commit 23352efd59d54f0a6c4376770e21b0187a52d941, tree accbe06180f94d44f2d8f1ab313e0725bfac7230
5 paths moved
server/src/controllers/library.controller.spec.ts → server/src/modules/library/library.controller.spec.ts server/src/controllers/library.controller.ts → server/src/modules/library/library.controller.ts server/src/dtos/library.dto.ts → server/src/modules/library/library.dto.ts server/src/repositories/library.repository.ts → server/src/modules/library/library.repository.ts server/src/services/library.service.ts → server/src/modules/library/library.service.ts
attempt 1: passed round 1, from 0c9d579e78, 5 moves, 1 m 29 s
Certificate: PASS (static checks) certificates/013-R1-module-library.json
certificate JSON · digest sha256:5f4a8c285905f27f4117c867d4dc70ec29faa7eac350a62b1c9ab4b7621113cb
ac certify 0c9d579e78..96c5114ac5 (package root server/), profile immich
trees: 77c6fb5d99..accbe06180
pathMap: 5 moves, 10 edited in place, 3449 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 5 moved files (5.1 s)
PASS K1 Move-set integrity: 5 moves, 10 files edited in place, nothing added or deleted (2.1 s)
PASS K2 Byte-span confinement: 19 specifier spans changed in 14 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 19 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.8 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.9 s)
PASS K4 Location scan: 5 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (7 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/library.service.ts (moved to server/src/modules/library/library.service.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/library.repository.ts (moved to server/src/modules/library/library.repository.ts)
… 5 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.4 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:5f4a8c285905f27f4117c867d4dc70ec29faa7eac350a62b1c9ab4b7621113cb014 R1 module/machine-learning certified 1 file moved, 10 specifier edits in 10 files, 1 m 29 s
Commit 17296cd4274fce3ffcaa75bec96588f4be9d3b28, tree 7b7a66bed340b1762fc6ed1675903697e572e911
1 path moved
server/src/repositories/machine-learning.repository.ts → server/src/modules/machine-learning/machine-learning.repository.ts
attempt 1: passed round 1, from 23352efd59, 1 move, 1 m 29 s
Certificate: PASS (static checks) certificates/014-R1-module-machine-learning.json
certificate JSON · digest sha256:78e92bbee77101fb14c4d94d8fdedac11cb680a4b025844230132af1f8098b22
ac certify 23352efd59..2675047a3b (package root server/), profile immich
trees: accbe06180..7b7a66bed3
pathMap: 1 moves, 10 edited in place, 3453 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 1 moved files (5.2 s)
PASS K1 Move-set integrity: 1 moves, 10 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 10 specifier spans changed in 10 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 10 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.5 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 1 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (2 findings in docs, comments or ungated coverage settings) (5.2 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/machine-learning.repository.ts (moved to server/src/modules/machine-learning/machine-learning.repository.ts)
finding (old-path-in-docs) docs/docs/developer/architecture.mdx: line 60: 'src/repositories' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/machine-learning.repository.ts (moved to server/src/modules/machine-learning/machine-learning.repository.ts)
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.9 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:78e92bbee77101fb14c4d94d8fdedac11cb680a4b025844230132af1f8098b22015 R1 module/maintenance certified 13 files moved, 42 specifier edits in 25 files, 1 m 29 s
Commit e896acc97857f42d0ef4a79fec48218014395189, tree c84fd64f006957fe709395b5da10492e88bb9c90
13 paths moved
server/src/commands/maintenance-mode.ts → server/src/modules/maintenance/maintenance-mode.ts server/src/controllers/maintenance.controller.spec.ts → server/src/modules/maintenance/maintenance.controller.spec.ts server/src/controllers/maintenance.controller.ts → server/src/modules/maintenance/maintenance.controller.ts server/src/dtos/maintenance.dto.ts → server/src/modules/maintenance/maintenance.dto.ts server/src/maintenance/maintenance-auth.guard.ts → server/src/modules/maintenance/maintenance-auth.guard.ts server/src/maintenance/maintenance-websocket.repository.ts → server/src/modules/maintenance/maintenance-websocket.repository.ts server/src/maintenance/maintenance-worker.controller.ts → server/src/modules/maintenance/maintenance-worker.controller.ts server/src/maintenance/maintenance-worker.service.spec.ts → server/src/modules/maintenance/maintenance-worker.service.spec.ts server/src/maintenance/maintenance-worker.service.ts → server/src/modules/maintenance/maintenance-worker.service.ts server/src/repositories/app.repository.ts → server/src/modules/maintenance/app.repository.ts server/src/services/maintenance.service.spec.ts → server/src/modules/maintenance/maintenance.service.spec.ts server/src/services/maintenance.service.ts → server/src/modules/maintenance/maintenance.service.ts server/src/utils/maintenance.ts → server/src/modules/maintenance/maintenance.ts
attempt 1: passed round 1, from 17296cd427, 13 moves, 1 m 29 s
Certificate: PASS (static checks) certificates/015-R1-module-maintenance.json
certificate JSON · digest sha256:19d4f2d25ed4cf1bccd3110486a7201ffd6d9bd9822bb93f073390d0a27d78d1
ac certify 17296cd427..0fd3eed055 (package root server/), profile immich
trees: 7b7a66bed3..c84fd64f00
pathMap: 13 moves, 15 edited in place, 3436 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 13 moved files (5.1 s)
PASS K1 Move-set integrity: 13 moves, 15 files edited in place, nothing added or deleted (2.0 s)
PASS K2 Byte-span confinement: 42 specifier spans changed in 25 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 42 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.7 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 13 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (9 findings in docs, comments or ungated coverage settings) (5.4 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/maintenance.service.spec.ts (moved to server/src/modules/maintenance/maintenance.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/app.repository.ts (moved to server/src/modules/maintenance/app.repository.ts)
… 7 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.2 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:19d4f2d25ed4cf1bccd3110486a7201ffd6d9bd9822bb93f073390d0a27d78d1016 R1 module/map certified 6 files moved, 15 specifier edits in 13 files, 1 m 28 s
Commit 07eedaa5ee692b1347215869e3b2a93caf8ff69c, tree fdcdfa4860055afde9e286504dc25f8be7eeef21
6 paths moved
server/src/controllers/map.controller.spec.ts → server/src/modules/map/map.controller.spec.ts server/src/controllers/map.controller.ts → server/src/modules/map/map.controller.ts server/src/dtos/map.dto.ts → server/src/modules/map/map.dto.ts server/src/repositories/map.repository.ts → server/src/modules/map/map.repository.ts server/src/services/map.service.spec.ts → server/src/modules/map/map.service.spec.ts server/src/services/map.service.ts → server/src/modules/map/map.service.ts
attempt 1: passed round 1, from e896acc978, 6 moves, 1 m 28 s
Certificate: PASS (static checks) certificates/016-R1-module-map.json
certificate JSON · digest sha256:c7010d48a6087c57c6957d620d7fbcf20fe586bb1227e0574b71752ee67bc120
ac certify e896acc978..e7a134f18a (package root server/), profile immich
trees: c84fd64f00..fdcdfa4860
pathMap: 6 moves, 9 edited in place, 3449 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (5.1 s)
PASS K1 Move-set integrity: 6 moves, 9 files edited in place, nothing added or deleted (2.0 s)
PASS K2 Byte-span confinement: 15 specifier spans changed in 13 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 15 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.4 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/map.service.spec.ts (moved to server/src/modules/map/map.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/map.repository.ts (moved to server/src/modules/map/map.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.5 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:c7010d48a6087c57c6957d620d7fbcf20fe586bb1227e0574b71752ee67bc120017 R1 module/memory certified 6 files moved, 18 specifier edits in 15 files, 1 m 28 s
Commit 997aa6197796b20170ea241200c861598d982244, tree be8c458f1124dcb9e57030695c6a4ef12ead03a0
6 paths moved
server/src/controllers/memory.controller.spec.ts → server/src/modules/memory/memory.controller.spec.ts server/src/controllers/memory.controller.ts → server/src/modules/memory/memory.controller.ts server/src/dtos/memory.dto.ts → server/src/modules/memory/memory.dto.ts server/src/repositories/memory.repository.ts → server/src/modules/memory/memory.repository.ts server/src/services/memory.service.spec.ts → server/src/modules/memory/memory.service.spec.ts server/src/services/memory.service.ts → server/src/modules/memory/memory.service.ts
attempt 1: passed round 1, from 07eedaa5ee, 6 moves, 1 m 28 s
Certificate: PASS (static checks) certificates/017-R1-module-memory.json
certificate JSON · digest sha256:635253430a5334005f89634284094c8951ea874265d3dc97bc686b66e2a41f37
ac certify 07eedaa5ee..fa7a0168e8 (package root server/), profile immich
trees: fdcdfa4860..be8c458f11
pathMap: 6 moves, 10 edited in place, 3448 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (5.1 s)
PASS K1 Move-set integrity: 6 moves, 10 files edited in place, nothing added or deleted (1.9 s)
PASS K2 Byte-span confinement: 18 specifier spans changed in 15 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 18 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.2 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/memory.service.spec.ts (moved to server/src/modules/memory/memory.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/memory.repository.ts (moved to server/src/modules/memory/memory.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (47.7 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:635253430a5334005f89634284094c8951ea874265d3dc97bc686b66e2a41f37018 R1 module/notification certified 12 files moved, 35 specifier edits in 21 files, 1 m 28 s
Commit 4e035e7be119fa8b6c80beda2f4fc8076ceaa6e0, tree 41fd829013c82d625da879b9ba2dd90dcdd1a6ad
12 paths moved
server/src/controllers/notification-admin.controller.spec.ts → server/src/modules/notification/notification-admin.controller.spec.ts server/src/controllers/notification-admin.controller.ts → server/src/modules/notification/notification-admin.controller.ts server/src/controllers/notification.controller.spec.ts → server/src/modules/notification/notification.controller.spec.ts server/src/controllers/notification.controller.ts → server/src/modules/notification/notification.controller.ts server/src/dtos/notification.dto.ts → server/src/modules/notification/notification.dto.ts server/src/repositories/email.repository.spec.ts → server/src/modules/notification/email.repository.spec.ts server/src/repositories/email.repository.ts → server/src/modules/notification/email.repository.ts server/src/repositories/notification.repository.ts → server/src/modules/notification/notification.repository.ts server/src/services/notification-admin.service.spec.ts → server/src/modules/notification/notification-admin.service.spec.ts server/src/services/notification-admin.service.ts → server/src/modules/notification/notification-admin.service.ts server/src/services/notification.service.spec.ts → server/src/modules/notification/notification.service.spec.ts server/src/services/notification.service.ts → server/src/modules/notification/notification.service.ts
attempt 1: passed round 1, from 997aa61977, 12 moves, 1 m 28 s
Certificate: PASS (static checks) certificates/018-R1-module-notification.json
certificate JSON · digest sha256:df5c32a7fd428f1a013c3961c5c399c4f3b059a1df98110de55550b017a1fa08
ac certify 997aa61977..47e5054c64 (package root server/), profile immich
trees: be8c458f11..41fd829013
pathMap: 12 moves, 11 edited in place, 3441 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 12 moved files (5.1 s)
PASS K1 Move-set integrity: 12 moves, 11 files edited in place, nothing added or deleted (2.0 s)
PASS K2 Byte-span confinement: 35 specifier spans changed in 21 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 35 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.4 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 12 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.2 s)
finding (stack-text) server/src/services/notification.service.ts: moved to server/src/modules/notification/notification.service.ts; 2 stack-trace reads passed along as text (line 88); their frames now name the new path
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/notification-admin.service.spec.ts (moved to server/src/modules/notification/notification-admin.service.spec.ts)
… 7 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (47.9 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:df5c32a7fd428f1a013c3961c5c399c4f3b059a1df98110de55550b017a1fa08019 R1 module/ocr certified 4 files moved, 17 specifier edits in 16 files, 1 m 29 s
Commit c96964ae28d71253902e0a096f1157b43a68db93, tree 8f6da4afe67068fc8f5f0ad934423bab32b64d4d
4 paths moved
server/src/dtos/ocr.dto.ts → server/src/modules/ocr/ocr.dto.ts server/src/repositories/ocr.repository.ts → server/src/modules/ocr/ocr.repository.ts server/src/services/ocr.service.spec.ts → server/src/modules/ocr/ocr.service.spec.ts server/src/services/ocr.service.ts → server/src/modules/ocr/ocr.service.ts
attempt 1: passed round 1, from 4e035e7be1, 4 moves, 1 m 29 s
Certificate: PASS (static checks) certificates/019-R1-module-ocr.json
certificate JSON · digest sha256:e809b3f2a5fb91e6617fb6bbda1b981bb3c9eac7844a0680c1567d27299f9ded
ac certify 4e035e7be1..aba51162b7 (package root server/), profile immich
trees: 41fd829013..8f6da4afe6
pathMap: 4 moves, 14 edited in place, 3446 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 4 moved files (5.1 s)
PASS K1 Move-set integrity: 4 moves, 14 files edited in place, nothing added or deleted (1.9 s)
PASS K2 Byte-span confinement: 17 specifier spans changed in 16 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 17 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.0 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 4 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (7 findings in docs, comments or ungated coverage settings) (5.2 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/ocr.service.spec.ts (moved to server/src/modules/ocr/ocr.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/ocr.repository.ts (moved to server/src/modules/ocr/ocr.repository.ts)
… 5 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:e809b3f2a5fb91e6617fb6bbda1b981bb3c9eac7844a0680c1567d27299f9ded020 R1 module/partner certified 6 files moved, 23 specifier edits in 19 files, 1 m 28 s
Commit ac92795533a878925c2c2259279b902a09e2afe5, tree f3720ee28842f1920d53b755c2f1a1fabd590a86
6 paths moved
server/src/controllers/partner.controller.spec.ts → server/src/modules/partner/partner.controller.spec.ts server/src/controllers/partner.controller.ts → server/src/modules/partner/partner.controller.ts server/src/dtos/partner.dto.ts → server/src/modules/partner/partner.dto.ts server/src/repositories/partner.repository.ts → server/src/modules/partner/partner.repository.ts server/src/services/partner.service.spec.ts → server/src/modules/partner/partner.service.spec.ts server/src/services/partner.service.ts → server/src/modules/partner/partner.service.ts
attempt 1: passed round 1, from c96964ae28, 6 moves, 1 m 28 s
Certificate: PASS (static checks) certificates/020-R1-module-partner.json
certificate JSON · digest sha256:41ce2ac126760b58f8f5dcabbdebd7f03387a538d2c29c448db6fd0771747909
ac certify c96964ae28..38717d35e0 (package root server/), profile immich
trees: 8f6da4afe6..f3720ee288
pathMap: 6 moves, 15 edited in place, 3443 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (5.1 s)
PASS K1 Move-set integrity: 6 moves, 15 files edited in place, nothing added or deleted (2.0 s)
PASS K2 Byte-span confinement: 23 specifier spans changed in 19 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 23 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.2 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/partner.service.spec.ts (moved to server/src/modules/partner/partner.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/partner.repository.ts (moved to server/src/modules/partner/partner.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (47.7 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:41ce2ac126760b58f8f5dcabbdebd7f03387a538d2c29c448db6fd0771747909021 R1 module/person certified 8 files moved, 52 specifier edits in 31 files, 1 m 28 s
Commit f46d651d904f1ba553e7eef6deeb1177781a5f19, tree 07ad191dc97ed965994764170d43bc38c7680a63
8 paths moved
server/src/controllers/face.controller.ts → server/src/modules/person/face.controller.ts server/src/controllers/person.controller.spec.ts → server/src/modules/person/person.controller.spec.ts server/src/controllers/person.controller.ts → server/src/modules/person/person.controller.ts server/src/dtos/person.dto.ts → server/src/modules/person/person.dto.ts server/src/repositories/person-user.repository.ts → server/src/modules/person/person-user.repository.ts server/src/repositories/person.repository.ts → server/src/modules/person/person.repository.ts server/src/services/person.service.spec.ts → server/src/modules/person/person.service.spec.ts server/src/services/person.service.ts → server/src/modules/person/person.service.ts
attempt 1: passed round 1, from ac92795533, 8 moves, 1 m 28 s
Certificate: PASS (static checks) certificates/021-R1-module-person.json
certificate JSON · digest sha256:b0b2ada7c863eebb10aa86da6d06a4f3ba702874909ec9122f31866141167bb3
ac certify ac92795533..54af14b759 (package root server/), profile immich
trees: f3720ee288..07ad191dc9
pathMap: 8 moves, 24 edited in place, 3432 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 8 moved files (5.1 s)
PASS K1 Move-set integrity: 8 moves, 24 files edited in place, nothing added or deleted (2.0 s)
PASS K2 Byte-span confinement: 52 specifier spans changed in 31 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 52 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.4 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 8 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (stack-text) server/src/services/person.service.ts: moved to server/src/modules/person/person.service.ts; 2 stack-trace reads passed along as text (line 321); their frames now name the new path
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/person.service.spec.ts (moved to server/src/modules/person/person.service.spec.ts)
… 7 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (47.7 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:b0b2ada7c863eebb10aa86da6d06a4f3ba702874909ec9122f31866141167bb3022 R1 module/plugin certified 7 files moved, 24 specifier edits in 20 files, 1 m 29 s
Commit f22cfdafe13ebf9ee14ad454ed819b1b7e825efd, tree 53a3f1e592812f05944b673a8473eae4695511ef
7 paths moved
server/src/controllers/plugin.controller.spec.ts → server/src/modules/plugin/plugin.controller.spec.ts server/src/controllers/plugin.controller.ts → server/src/modules/plugin/plugin.controller.ts server/src/dtos/json-schema.dto.ts → server/src/modules/plugin/json-schema.dto.ts server/src/dtos/plugin-manifest.dto.ts → server/src/modules/plugin/plugin-manifest.dto.ts server/src/dtos/plugin.dto.ts → server/src/modules/plugin/plugin.dto.ts server/src/repositories/plugin.repository.ts → server/src/modules/plugin/plugin.repository.ts server/src/services/plugin.service.ts → server/src/modules/plugin/plugin.service.ts
attempt 1: passed round 1, from f46d651d90, 7 moves, 1 m 29 s
Certificate: PASS (static checks) certificates/022-R1-module-plugin.json
certificate JSON · digest sha256:770eaff65c77e904901a4a7a9847c59e78e0aab4e1892ea88ef186fa6f439b1e
ac certify f46d651d90..09bbf50bbe (package root server/), profile immich
trees: 07ad191dc9..53a3f1e592
pathMap: 7 moves, 14 edited in place, 3443 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 7 moved files (5.1 s)
PASS K1 Move-set integrity: 7 moves, 14 files edited in place, nothing added or deleted (2.0 s)
PASS K2 Byte-span confinement: 24 specifier spans changed in 20 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 24 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.8 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 7 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (7 findings in docs, comments or ungated coverage settings) (5.1 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/plugin.service.ts (moved to server/src/modules/plugin/plugin.service.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/plugin.repository.ts (moved to server/src/modules/plugin/plugin.repository.ts)
… 5 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.8 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:770eaff65c77e904901a4a7a9847c59e78e0aab4e1892ea88ef186fa6f439b1e023 R1 module/queue certified 5 files moved, 15 specifier edits in 11 files, 1 m 28 s
Commit 647ede7d77c3986d2dbe5715f714848bf1205a24, tree 6fb8c8ea174210fc0dbe222e2a23837b94b08bb6
5 paths moved
server/src/controllers/queue.controller.ts → server/src/modules/queue/queue.controller.ts server/src/dtos/queue-legacy.dto.ts → server/src/modules/queue/queue-legacy.dto.ts server/src/dtos/queue.dto.ts → server/src/modules/queue/queue.dto.ts server/src/services/queue.service.spec.ts → server/src/modules/queue/queue.service.spec.ts server/src/services/queue.service.ts → server/src/modules/queue/queue.service.ts
attempt 1: passed round 1, from f22cfdafe1, 5 moves, 1 m 28 s
Certificate: PASS (static checks) certificates/023-R1-module-queue.json
certificate JSON · digest sha256:4d1451593104e43189095a261046555c59a308efc7adbb50924315aa7e5ba497
ac certify f22cfdafe1..8cc6af93f1 (package root server/), profile immich
trees: 53a3f1e592..6fb8c8ea17
pathMap: 5 moves, 7 edited in place, 3452 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 5 moved files (5.2 s)
PASS K1 Move-set integrity: 5 moves, 7 files edited in place, nothing added or deleted (2.0 s)
PASS K2 Byte-span confinement: 15 specifier spans changed in 11 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 15 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.7 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 5 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (6 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/queue.service.spec.ts (moved to server/src/modules/queue/queue.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/queue.service.spec.ts (moved to server/src/modules/queue/queue.service.spec.ts)
… 4 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.2 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:4d1451593104e43189095a261046555c59a308efc7adbb50924315aa7e5ba497024 R1 module/search certified 12 files moved, 30 specifier edits in 19 files, 1 m 32 s
Commit 19194fde7a3b6046822206a0d01564bb1a7c5a8a, tree ff3a6f8e15d85907ac3841d75cff36c0b1013263
12 paths moved
server/src/controllers/search.controller.spec.ts → server/src/modules/search/search.controller.spec.ts server/src/controllers/search.controller.ts → server/src/modules/search/search.controller.ts server/src/dtos/search.dto.ts → server/src/modules/search/search.dto.ts server/src/repositories/search.repository.ts → server/src/modules/search/search.repository.ts server/src/services/search.service.spec.ts → server/src/modules/search/search.service.spec.ts server/src/services/search.service.ts → server/src/modules/search/search.service.ts server/src/services/smart-info.service.spec.ts → server/src/modules/search/smart-info.service.spec.ts server/src/services/smart-info.service.ts → server/src/modules/search/smart-info.service.ts server/src/utils/search-cursor.spec.ts → server/src/modules/search/search-cursor.spec.ts server/src/utils/search-cursor.ts → server/src/modules/search/search-cursor.ts server/src/utils/search-filter.spec.ts → server/src/modules/search/search-filter.spec.ts server/src/utils/search-filter.ts → server/src/modules/search/search-filter.ts
attempt 1: passed round 1, from 647ede7d77, 12 moves, 1 m 32 s
Certificate: PASS (static checks) certificates/024-R1-module-search.json
certificate JSON · digest sha256:265a27a32e24e31750f7adf0deb62d56601cb91b6f4d81f11f603c114c1b98db
ac certify 647ede7d77..5bb36e6543 (package root server/), profile immich
trees: 6fb8c8ea17..ff3a6f8e15
pathMap: 12 moves, 10 edited in place, 3442 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 12 moved files (5.3 s)
PASS K1 Move-set integrity: 12 moves, 10 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 30 specifier spans changed in 19 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 30 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.7 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.0 s)
PASS K4 Location scan: 12 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (9 findings in docs, comments or ungated coverage settings) (5.4 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/search.service.spec.ts (moved to server/src/modules/search/search.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/search.repository.ts (moved to server/src/modules/search/search.repository.ts)
… 7 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.5 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:265a27a32e24e31750f7adf0deb62d56601cb91b6f4d81f11f603c114c1b98db025 R1 module/server certified 5 files moved, 15 specifier edits in 12 files, 1 m 30 s
Commit 4b1f6d4a3f8b7c9bcfde7925d9ccc0ada3ac21f5, tree d72c2af01678b138785dfe2f491df02db82aa7f3
5 paths moved
server/src/controllers/server.controller.ts → server/src/modules/server/server.controller.ts server/src/dtos/server.dto.ts → server/src/modules/server/server.dto.ts server/src/repositories/server-info.repository.ts → server/src/modules/server/server-info.repository.ts server/src/services/server.service.spec.ts → server/src/modules/server/server.service.spec.ts server/src/services/server.service.ts → server/src/modules/server/server.service.ts
attempt 1: passed round 1, from 19194fde7a, 5 moves, 1 m 30 s
Certificate: PASS (static checks) certificates/025-R1-module-server.json
certificate JSON · digest sha256:545f662ce944a51329a1decb935b765019fa3058699210d475530e7720e9f826
ac certify 19194fde7a..78aa204424 (package root server/), profile immich
trees: ff3a6f8e15..d72c2af016
pathMap: 5 moves, 9 edited in place, 3450 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 5 moved files (5.2 s)
PASS K1 Move-set integrity: 5 moves, 9 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 15 specifier spans changed in 12 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 15 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.3 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.9 s)
PASS K4 Location scan: 5 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/server.service.spec.ts (moved to server/src/modules/server/server.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/server-info.repository.ts (moved to server/src/modules/server/server-info.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.5 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:545f662ce944a51329a1decb935b765019fa3058699210d475530e7720e9f826026 R1 module/session certified 5 files moved, 14 specifier edits in 13 files, 1 m 28 s
Commit f52a272a087697b9a3514969a5b95c6b517cbdb6, tree 91f8dd59f7ac4588dabee2f5d33e45212b67d4d8
5 paths moved
server/src/controllers/session.controller.ts → server/src/modules/session/session.controller.ts server/src/dtos/session.dto.ts → server/src/modules/session/session.dto.ts server/src/repositories/session.repository.ts → server/src/modules/session/session.repository.ts server/src/services/session.service.spec.ts → server/src/modules/session/session.service.spec.ts server/src/services/session.service.ts → server/src/modules/session/session.service.ts
attempt 1: passed round 1, from 4b1f6d4a3f, 5 moves, 1 m 28 s
Certificate: PASS (static checks) certificates/026-R1-module-session.json
certificate JSON · digest sha256:cf929b5b12f8ced24cb07c16287d6e23be3f922f3adafb4e7ee43b8bf9c2014d
ac certify 4b1f6d4a3f..5e9bbade20 (package root server/), profile immich
trees: d72c2af016..91f8dd59f7
pathMap: 5 moves, 10 edited in place, 3449 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 5 moved files (5.1 s)
PASS K1 Move-set integrity: 5 moves, 10 files edited in place, nothing added or deleted (2.1 s)
PASS K2 Byte-span confinement: 14 specifier spans changed in 13 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 14 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 5 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/session.service.spec.ts (moved to server/src/modules/session/session.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/session.repository.ts (moved to server/src/modules/session/session.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:cf929b5b12f8ced24cb07c16287d6e23be3f922f3adafb4e7ee43b8bf9c2014d027 R1 module/shared-link certified 7 files moved, 25 specifier edits in 15 files, 1 m 31 s
Commit 8a0796ea65964c2fb89fd016a002de34ab6f8a74, tree 38a555880f940a9bf7d28d7233cccc9bf31ca4da
7 paths moved
server/src/controllers/shared-link.controller.spec.ts → server/src/modules/shared-link/shared-link.controller.spec.ts server/src/controllers/shared-link.controller.ts → server/src/modules/shared-link/shared-link.controller.ts server/src/dtos/shared-link.dto.ts → server/src/modules/shared-link/shared-link.dto.ts server/src/repositories/shared-link-asset.repository.ts → server/src/modules/shared-link/shared-link-asset.repository.ts server/src/repositories/shared-link.repository.ts → server/src/modules/shared-link/shared-link.repository.ts server/src/services/shared-link.service.spec.ts → server/src/modules/shared-link/shared-link.service.spec.ts server/src/services/shared-link.service.ts → server/src/modules/shared-link/shared-link.service.ts
attempt 1: passed round 1, from f52a272a08, 7 moves, 1 m 31 s
Certificate: PASS (static checks) certificates/027-R1-module-shared-link.json
certificate JSON · digest sha256:564f26960da4fc42577cb267598a06a8502d232a574d7b355ea3d079d63cde1b
ac certify f52a272a08..3a6ae826d5 (package root server/), profile immich
trees: 91f8dd59f7..38a555880f
pathMap: 7 moves, 11 edited in place, 3446 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 7 moved files (5.2 s)
PASS K1 Move-set integrity: 7 moves, 11 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 25 specifier spans changed in 15 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 25 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.2 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 7 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.7 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/shared-link.service.spec.ts (moved to server/src/modules/shared-link/shared-link.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/shared-link-asset.repository.ts (moved to server/src/modules/shared-link/shared-link-asset.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.5 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:564f26960da4fc42577cb267598a06a8502d232a574d7b355ea3d079d63cde1b028 R1 module/stack certified 6 files moved, 17 specifier edits in 14 files, 1 m 31 s
Commit e6dd9c9e329a5dcb073b2bca9b8cce621ed730f6, tree 7d27e1fdd2e02ecef417e3877b1d14496b470412
6 paths moved
server/src/controllers/stack.controller.spec.ts → server/src/modules/stack/stack.controller.spec.ts server/src/controllers/stack.controller.ts → server/src/modules/stack/stack.controller.ts server/src/dtos/stack.dto.ts → server/src/modules/stack/stack.dto.ts server/src/repositories/stack.repository.ts → server/src/modules/stack/stack.repository.ts server/src/services/stack.service.spec.ts → server/src/modules/stack/stack.service.spec.ts server/src/services/stack.service.ts → server/src/modules/stack/stack.service.ts
attempt 1: passed round 1, from 8a0796ea65, 6 moves, 1 m 31 s
Certificate: PASS (static checks) certificates/028-R1-module-stack.json
certificate JSON · digest sha256:bb1ddf305defe37d815400fcb5db5e0eec282b2e52799f0c2898b0a7aa6b173a
ac certify 8a0796ea65..3158cf0975 (package root server/), profile immich
trees: 38a555880f..7d27e1fdd2
pathMap: 6 moves, 10 edited in place, 3448 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (5.3 s)
PASS K1 Move-set integrity: 6 moves, 10 files edited in place, nothing added or deleted (2.1 s)
PASS K2 Byte-span confinement: 17 specifier spans changed in 14 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 17 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.5 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.4 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/stack.service.spec.ts (moved to server/src/modules/stack/stack.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/stack.repository.ts (moved to server/src/modules/stack/stack.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.9 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:bb1ddf305defe37d815400fcb5db5e0eec282b2e52799f0c2898b0a7aa6b173a029 R1 module/sync certified 8 files moved, 28 specifier edits in 16 files, 1 m 31 s
Commit 6c6c7beb83d0721371fa28dd4bb477f84c29fc5f, tree e937e8201a4729d1b594a5528639100355b5650b
8 paths moved
server/src/controllers/sync.controller.spec.ts → server/src/modules/sync/sync.controller.spec.ts server/src/controllers/sync.controller.ts → server/src/modules/sync/sync.controller.ts server/src/dtos/sync.dto.ts → server/src/modules/sync/sync.dto.ts server/src/repositories/sync-checkpoint.repository.ts → server/src/modules/sync/sync-checkpoint.repository.ts server/src/repositories/sync.repository.ts → server/src/modules/sync/sync.repository.ts server/src/services/sync.service.spec.ts → server/src/modules/sync/sync.service.spec.ts server/src/services/sync.service.ts → server/src/modules/sync/sync.service.ts server/src/utils/sync.ts → server/src/modules/sync/sync.ts
attempt 1: passed round 1, from e6dd9c9e32, 8 moves, 1 m 31 s
Certificate: PASS (static checks) certificates/029-R1-module-sync.json
certificate JSON · digest sha256:97f130ff95d11c84a28986f4b7c06e126809f22be573119a9606dec266ea2819
ac certify e6dd9c9e32..db4d2eef6a (package root server/), profile immich
trees: 7d27e1fdd2..e937e8201a
pathMap: 8 moves, 11 edited in place, 3445 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 8 moved files (5.2 s)
PASS K1 Move-set integrity: 8 moves, 11 files edited in place, nothing added or deleted (2.0 s)
PASS K2 Byte-span confinement: 28 specifier spans changed in 16 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 28 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.7 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 8 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (9 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/sync.service.spec.ts (moved to server/src/modules/sync/sync.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/sync-checkpoint.repository.ts (moved to server/src/modules/sync/sync-checkpoint.repository.ts)
… 7 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (50.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:97f130ff95d11c84a28986f4b7c06e126809f22be573119a9606dec266ea2819030 R1 module/system-metadata certified 7 files moved, 33 specifier edits in 30 files, 1 m 31 s
Commit d087b024ebcf22326d58ac5f034b15322c5d77b4, tree ffe63678445db4d6f8e981f32ca38f34bff4bec5
7 paths moved
server/src/controllers/system-metadata.controller.spec.ts → server/src/modules/system-metadata/system-metadata.controller.spec.ts server/src/controllers/system-metadata.controller.ts → server/src/modules/system-metadata/system-metadata.controller.ts server/src/dtos/onboarding.dto.ts → server/src/modules/system-metadata/onboarding.dto.ts server/src/dtos/system-metadata.dto.ts → server/src/modules/system-metadata/system-metadata.dto.ts server/src/repositories/system-metadata.repository.ts → server/src/modules/system-metadata/system-metadata.repository.ts server/src/services/system-metadata.service.spec.ts → server/src/modules/system-metadata/system-metadata.service.spec.ts server/src/services/system-metadata.service.ts → server/src/modules/system-metadata/system-metadata.service.ts
attempt 1: passed round 1, from 6c6c7beb83, 7 moves, 1 m 31 s
Certificate: PASS (static checks) certificates/030-R1-module-system-metadata.json
certificate JSON · digest sha256:a5c2078b5921fa3c2180cef828dd8176561c515469d6b6a78b2853618b9b63cf
ac certify 6c6c7beb83..98a5b5415f (package root server/), profile immich
trees: e937e8201a..ffe6367844
pathMap: 7 moves, 26 edited in place, 3431 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 7 moved files (5.4 s)
PASS K1 Move-set integrity: 7 moves, 26 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 33 specifier spans changed in 30 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 33 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.8 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 7 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.4 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/system-metadata.service.spec.ts (moved to server/src/modules/system-metadata/system-metadata.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/system-metadata.repository.ts (moved to server/src/modules/system-metadata/system-metadata.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.1 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:a5c2078b5921fa3c2180cef828dd8176561c515469d6b6a78b2853618b9b63cf031 R1 module/tag certified 8 files moved, 28 specifier edits in 22 files, 1 m 31 s
Commit 472518957e22f4911a81b93f61efcca4dd4c8b78, tree 2af2dcb65cc69f90778d5cdc9e50f5fd26b9e9ad
8 paths moved
server/src/controllers/tag.controller.spec.ts → server/src/modules/tag/tag.controller.spec.ts server/src/controllers/tag.controller.ts → server/src/modules/tag/tag.controller.ts server/src/dtos/tag.dto.ts → server/src/modules/tag/tag.dto.ts server/src/repositories/tag.repository.ts → server/src/modules/tag/tag.repository.ts server/src/services/tag.service.spec.ts → server/src/modules/tag/tag.service.spec.ts server/src/services/tag.service.ts → server/src/modules/tag/tag.service.ts server/src/utils/replace-template-tags.ts → server/src/modules/tag/replace-template-tags.ts server/src/utils/tag.ts → server/src/modules/tag/tag.ts
attempt 1: passed round 1, from d087b024eb, 8 moves, 1 m 31 s
Certificate: PASS (static checks) certificates/031-R1-module-tag.json
certificate JSON · digest sha256:f6df30cfeabd80c7c495f764dcf020090ef3150760bd48b94d5a0546d722723e
ac certify d087b024eb..1e96625d19 (package root server/), profile immich
trees: ffe6367844..2af2dcb65c
pathMap: 8 moves, 17 edited in place, 3439 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 8 moved files (5.2 s)
PASS K1 Move-set integrity: 8 moves, 17 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 28 specifier spans changed in 22 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 28 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.3 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.9 s)
PASS K4 Location scan: 8 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (9 findings in docs, comments or ungated coverage settings) (5.4 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/tag.service.spec.ts (moved to server/src/modules/tag/tag.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/tag.repository.ts (moved to server/src/modules/tag/tag.repository.ts)
… 7 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.7 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:f6df30cfeabd80c7c495f764dcf020090ef3150760bd48b94d5a0546d722723e032 R1 module/timeline certified 6 files moved, 10 specifier edits in 8 files, 1 m 29 s
Commit 4fa212f50fd4c45d09be22152b8047aa00d998dc, tree d22ff8be30f2efa6e4148869d25f359cb9e08169
6 paths moved
server/src/controllers/timeline.controller.spec.ts → server/src/modules/timeline/timeline.controller.spec.ts server/src/controllers/timeline.controller.ts → server/src/modules/timeline/timeline.controller.ts server/src/dtos/bbox.dto.ts → server/src/modules/timeline/bbox.dto.ts server/src/dtos/time-bucket.dto.ts → server/src/modules/timeline/time-bucket.dto.ts server/src/services/timeline.service.spec.ts → server/src/modules/timeline/timeline.service.spec.ts server/src/services/timeline.service.ts → server/src/modules/timeline/timeline.service.ts
attempt 1: passed round 1, from 472518957e, 6 moves, 1 m 29 s
Certificate: PASS (static checks) certificates/032-R1-module-timeline.json
certificate JSON · digest sha256:9fa6c741377db1aacd398d2ce851cfa7ab2371a75a44e55c5cc1af565a99998a
ac certify 472518957e..8d6ccb9c20 (package root server/), profile immich
trees: 2af2dcb65c..d22ff8be30
pathMap: 6 moves, 3 edited in place, 3455 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (5.2 s)
PASS K1 Move-set integrity: 6 moves, 3 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 10 specifier spans changed in 8 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 10 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.1 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (6 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/timeline.service.spec.ts (moved to server/src/modules/timeline/timeline.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/timeline.service.spec.ts (moved to server/src/modules/timeline/timeline.service.spec.ts)
… 4 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:9fa6c741377db1aacd398d2ce851cfa7ab2371a75a44e55c5cc1af565a99998a033 R1 module/trash certified 6 files moved, 11 specifier edits in 9 files, 1 m 29 s
Commit e3faa7670134cc0f23e68be62e479ad284bb2e3e, tree 9d839b19b3662c8284b824e10eafcb3c22f6c831
6 paths moved
server/src/controllers/trash.controller.spec.ts → server/src/modules/trash/trash.controller.spec.ts server/src/controllers/trash.controller.ts → server/src/modules/trash/trash.controller.ts server/src/dtos/trash.dto.ts → server/src/modules/trash/trash.dto.ts server/src/repositories/trash.repository.ts → server/src/modules/trash/trash.repository.ts server/src/services/trash.service.spec.ts → server/src/modules/trash/trash.service.spec.ts server/src/services/trash.service.ts → server/src/modules/trash/trash.service.ts
attempt 1: passed round 1, from 4fa212f50f, 6 moves, 1 m 29 s
Certificate: PASS (static checks) certificates/033-R1-module-trash.json
certificate JSON · digest sha256:4710fd16f9e24a9865c1ac66778fdb7e1e68e3af709b63c86e82756b289a3fc4
ac certify 4fa212f50f..556687fe73 (package root server/), profile immich
trees: d22ff8be30..9d839b19b3
pathMap: 6 moves, 5 edited in place, 3453 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (5.4 s)
PASS K1 Move-set integrity: 6 moves, 5 files edited in place, nothing added or deleted (1.9 s)
PASS K2 Byte-span confinement: 11 specifier spans changed in 9 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 11 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.7 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.2 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/trash.service.spec.ts (moved to server/src/modules/trash/trash.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/trash.repository.ts (moved to server/src/modules/trash/trash.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:4710fd16f9e24a9865c1ac66778fdb7e1e68e3af709b63c86e82756b289a3fc4034 R1 module/user certified 19 files moved, 84 specifier edits in 55 files, 1 m 34 s
Commit 7f6655d9b022638dbf63d4e23784dfb2df9e0b84, tree d422259252f5e0102c64f5c02023472ff89f73ec
19 paths moved
server/src/commands/list-users.command.ts → server/src/modules/user/list-users.command.ts server/src/commands/reset-admin-password.command.ts → server/src/modules/user/reset-admin-password.command.ts server/src/controllers/user-admin.controller.spec.ts → server/src/modules/user/user-admin.controller.spec.ts server/src/controllers/user-admin.controller.ts → server/src/modules/user/user-admin.controller.ts server/src/controllers/user.controller.spec.ts → server/src/modules/user/user.controller.spec.ts server/src/controllers/user.controller.ts → server/src/modules/user/user.controller.ts server/src/dtos/calendar-heatmap.dto.ts → server/src/modules/user/calendar-heatmap.dto.ts server/src/dtos/license.dto.ts → server/src/modules/user/license.dto.ts server/src/dtos/user-preferences.dto.ts → server/src/modules/user/user-preferences.dto.ts server/src/dtos/user-profile.dto.ts → server/src/modules/user/user-profile.dto.ts server/src/dtos/user.dto.spec.ts → server/src/modules/user/user.dto.spec.ts server/src/dtos/user.dto.ts → server/src/modules/user/user.dto.ts server/src/repositories/user.repository.ts → server/src/modules/user/user.repository.ts server/src/services/shared/user-methods.ts → server/src/modules/user/user-methods.ts server/src/services/user-admin.service.spec.ts → server/src/modules/user/user-admin.service.spec.ts server/src/services/user-admin.service.ts → server/src/modules/user/user-admin.service.ts server/src/services/user.service.spec.ts → server/src/modules/user/user.service.spec.ts server/src/services/user.service.ts → server/src/modules/user/user.service.ts server/src/utils/profile-image.ts → server/src/modules/user/profile-image.ts
attempt 1: passed round 1, from e3faa76701, 19 moves, 1 m 34 s
Certificate: PASS (static checks) certificates/034-R1-module-user.json
certificate JSON · digest sha256:05d6528809e72a363a08f80dc87ae32466c76c6b7d21ce65ddadd5cb0719f37b
ac certify e3faa76701..64bf31b18e (package root server/), profile immich
trees: 9d839b19b3..d422259252
pathMap: 19 moves, 43 edited in place, 3402 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 19 moved files (5.2 s)
PASS K1 Move-set integrity: 19 moves, 43 files edited in place, nothing added or deleted (2.1 s)
PASS K2 Byte-span confinement: 84 specifier spans changed in 55 files; every other byte identical (0.9 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 84 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.7 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.5 s)
PASS K4 Location scan: 19 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (9 findings in docs, comments or ungated coverage settings) (5.6 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/shared/user-methods.ts (moved to server/src/modules/user/user-methods.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/user.repository.ts (moved to server/src/modules/user/user.repository.ts)
… 7 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (51.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:05d6528809e72a363a08f80dc87ae32466c76c6b7d21ce65ddadd5cb0719f37b035 R1 module/version certified 4 files moved, 12 specifier edits in 11 files, 1 m 33 s
Commit e6dcb6a202a2b868d6653b4a311b621d901ec637, tree 2b7c2760ac74c0da8e6c07c99173f6620957cbfd
4 paths moved
server/src/commands/version.command.ts → server/src/modules/version/version.command.ts server/src/repositories/version-history.repository.ts → server/src/modules/version/version-history.repository.ts server/src/services/version.service.spec.ts → server/src/modules/version/version.service.spec.ts server/src/services/version.service.ts → server/src/modules/version/version.service.ts
attempt 1: passed round 1, from 7f6655d9b0, 4 moves, 1 m 33 s
Certificate: PASS (static checks) certificates/035-R1-module-version.json
certificate JSON · digest sha256:5e90d7f6c804818b780d9aa42d3362a36c03d170efa4c97d145381f9808090f6
ac certify 7f6655d9b0..efd50f92bf (package root server/), profile immich
trees: d422259252..2b7c2760ac
pathMap: 4 moves, 9 edited in place, 3451 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 4 moved files (5.3 s)
PASS K1 Move-set integrity: 4 moves, 9 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 12 specifier spans changed in 11 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 12 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.7 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 4 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (7 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (stack-text) server/src/services/version.service.ts: moved to server/src/modules/version/version.service.ts; 1 stack-trace reads passed along as text (line 140); their frames now name the new path
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/version.service.spec.ts (moved to server/src/modules/version/version.service.spec.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (50.8 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:5e90d7f6c804818b780d9aa42d3362a36c03d170efa4c97d145381f9808090f6036 R1 module/video-stream certified 5 files moved, 8 specifier edits in 7 files, 1 m 31 s
Commit 311549fdac8d226b3b2c4cb4dde607ef98a8f700, tree d074d7315073bf13f5381ba5bbd8f8369d671ec1
5 paths moved
server/src/controllers/video-stream.controller.ts → server/src/modules/video-stream/video-stream.controller.ts server/src/dtos/streaming.dto.ts → server/src/modules/video-stream/streaming.dto.ts server/src/repositories/video-stream.repository.ts → server/src/modules/video-stream/video-stream.repository.ts server/src/services/hls.service.spec.ts → server/src/modules/video-stream/hls.service.spec.ts server/src/services/hls.service.ts → server/src/modules/video-stream/hls.service.ts
attempt 1: passed round 1, from e6dcb6a202, 5 moves, 1 m 31 s
Certificate: PASS (static checks) certificates/036-R1-module-video-stream.json
certificate JSON · digest sha256:06e897d20ce18650a2e886cb584e97f6023f85aa54a406bd1e8909855ed62c8e
ac certify e6dcb6a202..e72c63b1ad (package root server/), profile immich
trees: 2b7c2760ac..d074d73150
pathMap: 5 moves, 5 edited in place, 3454 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 5 moved files (5.3 s)
PASS K1 Move-set integrity: 5 moves, 5 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 8 specifier spans changed in 7 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 8 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.9 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 5 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/hls.service.spec.ts (moved to server/src/modules/video-stream/hls.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/video-stream.repository.ts (moved to server/src/modules/video-stream/video-stream.repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:06e897d20ce18650a2e886cb584e97f6023f85aa54a406bd1e8909855ed62c8e037 R1 module/view certified 4 files moved, 7 specifier edits in 7 files, 1 m 32 s
Commit c8cd777f3808c7142d1c2d0171fb42d9ba63e1d5, tree 37262610ad710a9058ce0603a4ddc2159dcb7574
4 paths moved
server/src/controllers/view.controller.ts → server/src/modules/view/view.controller.ts server/src/repositories/view-repository.ts → server/src/modules/view/view-repository.ts server/src/services/view.service.spec.ts → server/src/modules/view/view.service.spec.ts server/src/services/view.service.ts → server/src/modules/view/view.service.ts
attempt 1: passed round 1, from 311549fdac, 4 moves, 1 m 32 s
Certificate: PASS (static checks) certificates/037-R1-module-view.json
certificate JSON · digest sha256:7c78bd44ab7c9cb73d562697db85985547fe218c949b621ac27f0e92af56ca37
ac certify 311549fdac..37569c3162 (package root server/), profile immich
trees: d074d73150..37262610ad
pathMap: 4 moves, 5 edited in place, 3455 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 4 moved files (5.3 s)
PASS K1 Move-set integrity: 4 moves, 5 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 7 specifier spans changed in 7 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 7 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.5 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 4 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.4 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/view.service.spec.ts (moved to server/src/modules/view/view.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/view-repository.ts (moved to server/src/modules/view/view-repository.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.8 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:7c78bd44ab7c9cb73d562697db85985547fe218c949b621ac27f0e92af56ca37038 R1 module/workflow certified 8 files moved, 22 specifier edits in 15 files, 1 m 30 s
Commit 2f35e608a3b83efdf968d6610876f99bf3533fd1, tree eae80d417fdbc5614a990668aff2433c920c162f
8 paths moved
server/src/controllers/workflow.controller.spec.ts → server/src/modules/workflow/workflow.controller.spec.ts server/src/controllers/workflow.controller.ts → server/src/modules/workflow/workflow.controller.ts server/src/dtos/workflow.dto.ts → server/src/modules/workflow/workflow.dto.ts server/src/repositories/workflow.repository.ts → server/src/modules/workflow/workflow.repository.ts server/src/services/workflow-execution.service.ts → server/src/modules/workflow/workflow-execution.service.ts server/src/services/workflow.service.ts → server/src/modules/workflow/workflow.service.ts server/src/utils/workflow.spec.ts → server/src/modules/workflow/workflow.spec.ts server/src/utils/workflow.ts → server/src/modules/workflow/workflow.ts
attempt 1: passed round 1, from c8cd777f38, 8 moves, 1 m 30 s
Certificate: PASS (static checks) certificates/038-R1-module-workflow.json
certificate JSON · digest sha256:87ea639f6470b33b21871816ac974e94eceb1e2f70ab6b10f105d1185226786d
ac certify c8cd777f38..83ebdb9bff (package root server/), profile immich
trees: 37262610ad..eae80d417f
pathMap: 8 moves, 10 edited in place, 3446 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 8 moved files (5.2 s)
PASS K1 Move-set integrity: 8 moves, 10 files edited in place, nothing added or deleted (1.9 s)
PASS K2 Byte-span confinement: 22 specifier spans changed in 15 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 22 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.2 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.6 s)
PASS K4 Location scan: 8 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (stack-text) server/src/services/workflow-execution.service.ts: moved to server/src/modules/workflow/workflow-execution.service.ts; 1 stack-trace reads passed along as text (line 197); their frames now name the new path
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/workflow-execution.service.ts (moved to server/src/modules/workflow/workflow-execution.service.ts)
… 7 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.2 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.6 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:87ea639f6470b33b21871816ac974e94eceb1e2f70ab6b10f105d1185226786d039 R2 platform/access certified 3 files moved, 38 specifier edits in 35 files, 1 m 33 s
Commit a86f388bdfc4c28c07bf5de3cee587397c0ed8f0, tree 35c1ac1bea6c50941a1a9f9517dbd9a58b9ad9da
3 paths moved
server/src/repositories/access.repository.ts → server/src/platform/access/access.repository.ts server/src/utils/access.ts → server/src/platform/access/access.ts server/src/utils/set.ts → server/src/platform/access/set.ts
attempt 1: passed round 1, from 2f35e608a3, 3 moves, 1 m 33 s
Certificate: PASS (static checks) certificates/039-R2-platform-access.json
certificate JSON · digest sha256:5f9001a4548b37c2fc9bef0f1197e89780605f1fc30431f574eed462951a4576
ac certify 2f35e608a3..aef65f3fd9 (package root server/), profile immich
trees: eae80d417f..35c1ac1bea
pathMap: 3 moves, 34 edited in place, 3427 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 3 moved files (5.3 s)
PASS K1 Move-set integrity: 3 moves, 34 files edited in place, nothing added or deleted (2.1 s)
PASS K2 Byte-span confinement: 38 specifier spans changed in 35 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 38 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.1 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.0 s)
PASS K4 Location scan: 3 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (3 findings in docs, comments or ungated coverage settings) (5.5 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/access.repository.ts (moved to server/src/platform/access/access.repository.ts)
finding (old-path-in-docs) docs/docs/developer/architecture.mdx: line 60: 'src/repositories' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/access.repository.ts (moved to server/src/platform/access/access.repository.ts)
… 1 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (50.5 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.6 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:5f9001a4548b37c2fc9bef0f1197e89780605f1fc30431f574eed462951a4576040 R2 platform/bootstrap certified 3 files moved, 4 specifier edits in 4 files, 1 m 32 s
Commit b38343f4aa5dbb7a072f7187cf04f28d433ca91d, tree 720d5b8fa671c668f556df07a1d1ca3e6f09c6ee
3 paths moved
server/src/app.common.ts → server/src/platform/bootstrap/app.common.ts server/src/controllers/app.controller.spec.ts → server/src/platform/bootstrap/app.controller.spec.ts server/src/controllers/app.controller.ts → server/src/platform/bootstrap/app.controller.ts
attempt 1: passed round 1, from a86f388bdf, 3 moves, 1 m 32 s
Certificate: PASS (static checks) certificates/040-R2-platform-bootstrap.json
certificate JSON · digest sha256:97af69aa161618d42c2e43f7b4231cf86d13e27d460d764ba3eff39a6d35d2d4
ac certify a86f388bdf..1330c88f66 (package root server/), profile immich
trees: 35c1ac1bea..720d5b8fa6
pathMap: 3 moves, 3 edited in place, 3458 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 3 moved files (5.3 s)
PASS K1 Move-set integrity: 3 moves, 3 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 4 specifier spans changed in 4 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 4 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.4 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 3 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (1 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) docs/docs/developer/architecture.mdx: line 64: 'src/controllers' is the directory server/src/controllers, whose contents change with the move of server/src/controllers/app.controller.spec.ts (moved to server/src/platform/bootstrap/app.controller.spec.ts)
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (50.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:97af69aa161618d42c2e43f7b4231cf86d13e27d460d764ba3eff39a6d35d2d4041 R2 platform/check certified 1 file moved, 1 specifier edit in 1 file, 1 m 33 s
Commit dfcfd4323e8d4a2a70ca6a07d07c15678a45970b, tree f6e3e91be0ebc02d353fc519ed9c987b02236cc3
1 path moved
server/src/commands/schema-check.ts → server/src/platform/check/schema-check.ts
attempt 1: passed round 1, from b38343f4aa, 1 move, 1 m 33 s
Certificate: PASS (static checks) certificates/041-R2-platform-check.json
certificate JSON · digest sha256:9f7847f15185cb1a33c05b2a8029bfc9b1cafc29b8d576e5925ab60633eaa853
ac certify b38343f4aa..bc4c402d50 (package root server/), profile immich
trees: 720d5b8fa6..f6e3e91be0
pathMap: 1 moves, 1 edited in place, 3462 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 1 moved files (5.4 s)
PASS K1 Move-set integrity: 1 moves, 1 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 1 specifier spans changed in 1 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 1 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.8 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.0 s)
PASS K4 Location scan: 1 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (0 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (50.3 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:9f7847f15185cb1a33c05b2a8029bfc9b1cafc29b8d576e5925ab60633eaa853042 R2 platform/cron certified 1 file moved, 7 specifier edits in 7 files, 1 m 33 s
Commit c995602e0c3f9058834ce2500e20c4d8ccd8bd4a, tree f324141fa0dd4753fa52c308a4d60adc589c66e6
1 path moved
server/src/repositories/cron.repository.ts → server/src/platform/cron/cron.repository.ts
attempt 1: passed round 1, from dfcfd4323e, 1 move, 1 m 33 s
Certificate: PASS (static checks) certificates/042-R2-platform-cron.json
certificate JSON · digest sha256:2eceadab131c16949a1c45290704b0cc9b39a1853b82d1c9a2d123bff66cda3d
ac certify dfcfd4323e..e23fd88c7a (package root server/), profile immich
trees: f6e3e91be0..f324141fa0
pathMap: 1 moves, 7 edited in place, 3456 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 1 moved files (5.3 s)
PASS K1 Move-set integrity: 1 moves, 7 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 7 specifier spans changed in 7 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 7 rewritten specifiers keep their form (1.7 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.0 s)
PASS K4 Location scan: 1 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (2 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/cron.repository.ts (moved to server/src/platform/cron/cron.repository.ts)
finding (old-path-in-docs) docs/docs/developer/architecture.mdx: line 60: 'src/repositories' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/cron.repository.ts (moved to server/src/platform/cron/cron.repository.ts)
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (50.6 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:2eceadab131c16949a1c45290704b0cc9b39a1853b82d1c9a2d123bff66cda3d043 R2 platform/crypto certified 1 file moved, 12 specifier edits in 12 files, 1 m 32 s
Commit 19338621e467b19b13d12338544abe1d0962f058, tree af9505307fb9340ea3737b03a98c2ba062edae72
1 path moved
server/src/repositories/crypto.repository.ts → server/src/platform/crypto/crypto.repository.ts
attempt 1: passed round 1, from c995602e0c, 1 move, 1 m 32 s
Certificate: PASS (static checks) certificates/043-R2-platform-crypto.json
certificate JSON · digest sha256:9278b63721c7b7a5d5ad1eb473559dfd00b642301d2e0e75081ec555d9a9bd3e
ac certify c995602e0c..a58ebfd956 (package root server/), profile immich
trees: f324141fa0..af9505307f
pathMap: 1 moves, 12 edited in place, 3451 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 1 moved files (5.3 s)
PASS K1 Move-set integrity: 1 moves, 12 files edited in place, nothing added or deleted (2.4 s)
PASS K2 Byte-span confinement: 12 specifier spans changed in 12 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 12 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.5 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.9 s)
PASS K4 Location scan: 1 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (2 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/crypto.repository.ts (moved to server/src/platform/crypto/crypto.repository.ts)
finding (old-path-in-docs) docs/docs/developer/architecture.mdx: line 60: 'src/repositories' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/crypto.repository.ts (moved to server/src/platform/crypto/crypto.repository.ts)
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (50.2 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:9278b63721c7b7a5d5ad1eb473559dfd00b642301d2e0e75081ec555d9a9bd3e044 R2 platform/database certified 4 files moved, 104 specifier edits in 87 files, 1 m 33 s
Commit f9a730b698c693b92fabacfefd3ed7a40e7c814c, tree 4dc9f4d619fcf77c47b72fb4037f63bc9e70adf4
4 paths moved
server/src/database.ts → server/src/platform/database/database.ts server/src/services/database.service.spec.ts → server/src/platform/database/database.service.spec.ts server/src/services/database.service.ts → server/src/platform/database/database.service.ts server/src/utils/database.ts → server/src/platform/database/utils/database.ts
attempt 1: passed round 1, from 19338621e4, 4 moves, 1 m 33 s
Certificate: PASS (static checks) certificates/044-R2-platform-database.json
certificate JSON · digest sha256:02b9e745714f356d676d1772a9ddd58bfb786aab86feed62d8038a7e39ae6e12
ac certify 19338621e4..7451d5899a (package root server/), profile immich
trees: af9505307f..4dc9f4d619
pathMap: 4 moves, 85 edited in place, 3375 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 4 moved files (5.2 s)
PASS K1 Move-set integrity: 4 moves, 85 files edited in place, nothing added or deleted (2.4 s)
PASS K2 Byte-span confinement: 104 specifier spans changed in 87 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 104 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.8 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.9 s)
PASS K4 Location scan: 4 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (6 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/database.service.spec.ts (moved to server/src/platform/database/database.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/database.service.spec.ts (moved to server/src/platform/database/database.service.spec.ts)
… 4 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.3 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:02b9e745714f356d676d1772a9ddd58bfb786aab86feed62d8038a7e39ae6e12045 R2 platform/event certified 2 files moved, 43 specifier edits in 42 files, 1 m 32 s
Commit e3ab6d217e8292784fed23d5f2fee09950e5fb5d, tree b2e65ff34f22f2a8f55613ada294cb7789482ae4
2 paths moved
server/src/repositories/event.repository.ts → server/src/platform/event/event.repository.ts server/src/utils/event.ts → server/src/platform/event/event.ts
attempt 1: passed round 1, from f9a730b698, 2 moves, 1 m 32 s
Certificate: PASS (static checks) certificates/045-R2-platform-event.json
certificate JSON · digest sha256:bfe9c5cef8dbf3e25252954c0c0300ae33e955b0f8481ba39ec4931b7dce2f50
ac certify f9a730b698..6159bdf641 (package root server/), profile immich
trees: 4dc9f4d619..b2e65ff34f
pathMap: 2 moves, 41 edited in place, 3421 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 2 moved files (5.2 s)
PASS K1 Move-set integrity: 2 moves, 41 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 43 specifier spans changed in 42 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 43 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.4 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.1 s)
PASS K4 Location scan: 2 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (3 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/event.repository.ts (moved to server/src/platform/event/event.repository.ts)
finding (old-path-in-docs) docs/docs/developer/architecture.mdx: line 60: 'src/repositories' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/event.repository.ts (moved to server/src/platform/event/event.repository.ts)
… 1 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.4 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:bfe9c5cef8dbf3e25252954c0c0300ae33e955b0f8481ba39ec4931b7dce2f50046 R2 platform/file certified 2 files moved, 27 specifier edits in 25 files, 1 m 33 s
Commit 7350eb58eb18b0393a6449ba9433ed7cffcacfa7, tree f42c64a08c0d442d7c9785e8a2dfac9f29f147b5
2 paths moved
server/src/middleware/file-upload.interceptor.ts → server/src/platform/file/file-upload.interceptor.ts server/src/utils/file.ts → server/src/platform/file/file.ts
attempt 1: passed round 1, from e3ab6d217e, 2 moves, 1 m 33 s
Certificate: PASS (static checks) certificates/046-R2-platform-file.json
certificate JSON · digest sha256:8107244c665070cb805b248dc1d9cd9d15d6c5285e6c7bbe6b847b358c25667d
ac certify e3ab6d217e..a71ccec443 (package root server/), profile immich
trees: b2e65ff34f..f42c64a08c
pathMap: 2 moves, 25 edited in place, 3437 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 2 moved files (5.3 s)
PASS K1 Move-set integrity: 2 moves, 25 files edited in place, nothing added or deleted (2.4 s)
PASS K2 Byte-span confinement: 27 specifier spans changed in 25 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 27 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.8 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.1 s)
PASS K4 Location scan: 2 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (1 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (coverage-scope) server/test/vitest.config.mjs: line 19: 'src/utils/**' is the glob server/src/utils/** whose matches change (1 moved files, e.g. server/src/utils/file.ts -> server/src/platform/file/file.ts) of server/src/utils/file.ts (moved to server/src/platform/file/file.ts) [config at test.coverage.include]; coverage now measures a different file set (no coverage threshold in this file, so no gate changes)
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.4 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:8107244c665070cb805b248dc1d9cd9d15d6c5285e6c7bbe6b847b358c25667d047 R2 platform/http-client certified 2 files moved, 2 specifier edits in 2 files, 1 m 32 s
Commit af075203b1b5aef732c55853ddc533414ae8df9a, tree 446f6e5158f77bb7f521059ff407c86fb70dfe8b
2 paths moved
server/src/utils/fetch.spec.ts → server/src/platform/http-client/fetch.spec.ts server/src/utils/fetch.ts → server/src/platform/http-client/fetch.ts
attempt 1: passed round 1, from 7350eb58eb, 2 moves, 1 m 32 s
Certificate: PASS (static checks) certificates/047-R2-platform-http-client.json
certificate JSON · digest sha256:6892882b6e9c76908b395ced8662fd545dd2f6354772e3c3b45b892c1eee2b43
ac certify 7350eb58eb..c0bca1d148 (package root server/), profile immich
trees: f42c64a08c..446f6e5158
pathMap: 2 moves, 1 edited in place, 3461 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 2 moved files (5.3 s)
PASS K1 Move-set integrity: 2 moves, 1 files edited in place, nothing added or deleted (2.4 s)
PASS K2 Byte-span confinement: 2 specifier spans changed in 2 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 2 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.9 s)
PASS K4 Location scan: 2 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (1 findings in docs, comments or ungated coverage settings) (5.6 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (coverage-scope) server/test/vitest.config.mjs: line 19: 'src/utils/**' is the glob server/src/utils/** whose matches change (2 moved files, e.g. server/src/utils/fetch.spec.ts -> server/src/platform/http-client/fetch.spec.ts) of server/src/utils/fetch.spec.ts (moved to server/src/platform/http-client/fetch.spec.ts) [config at test.coverage.include]; coverage now measures a different file set (no coverage threshold in this file, so no gate changes)
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.9 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:6892882b6e9c76908b395ced8662fd545dd2f6354772e3c3b45b892c1eee2b43048 R2 platform/http-response certified 1 file moved, 8 specifier edits in 8 files, 1 m 31 s
Commit b8c64a980b0705e83570cf697ab334a5867dbb32, tree 97efb6fa2068825498b5620ee1880cd8f69fb19d
1 path moved
server/src/utils/response.ts → server/src/platform/http-response/response.ts
attempt 1: passed round 1, from af075203b1, 1 move, 1 m 31 s
Certificate: PASS (static checks) certificates/048-R2-platform-http-response.json
certificate JSON · digest sha256:20bf2ba2a0b89403de0b1be171234aa8d99af6daf4a8806268b9dd6999c9f97f
ac certify af075203b1..0d77b843ac (package root server/), profile immich
trees: 446f6e5158..97efb6fa20
pathMap: 1 moves, 8 edited in place, 3455 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 1 moved files (5.2 s)
PASS K1 Move-set integrity: 1 moves, 8 files edited in place, nothing added or deleted (2.4 s)
PASS K2 Byte-span confinement: 8 specifier spans changed in 8 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 8 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.0 s)
PASS K4 Location scan: 1 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (1 findings in docs, comments or ungated coverage settings) (5.2 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (coverage-scope) server/test/vitest.config.mjs: line 19: 'src/utils/**' is the glob server/src/utils/** whose matches change (1 moved files, e.g. server/src/utils/response.ts -> server/src/platform/http-response/response.ts) of server/src/utils/response.ts (moved to server/src/platform/http-response/response.ts) [config at test.coverage.include]; coverage now measures a different file set (no coverage threshold in this file, so no gate changes)
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.8 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:20bf2ba2a0b89403de0b1be171234aa8d99af6daf4a8806268b9dd6999c9f97f049 R2 platform/logging certified 6 files moved, 111 specifier edits in 104 files, 1 m 33 s
Commit 71c050c10843ac09bd0482151632ec3ec58dae6f, tree 327bd02c2511ea23007f5bb7c91df86bda64e834
6 paths moved
server/src/middleware/error.interceptor.ts → server/src/platform/logging/error.interceptor.ts server/src/middleware/global-exception.filter.ts → server/src/platform/logging/global-exception.filter.ts server/src/middleware/logging.interceptor.ts → server/src/platform/logging/logging.interceptor.ts server/src/repositories/logging.repository.spec.ts → server/src/platform/logging/logging.repository.spec.ts server/src/repositories/logging.repository.ts → server/src/platform/logging/logging.repository.ts server/src/utils/logger.ts → server/src/platform/logging/logger.ts
attempt 1: passed round 1, from b8c64a980b, 6 moves, 1 m 33 s
Certificate: PASS (static checks) certificates/049-R2-platform-logging.json
certificate JSON · digest sha256:b3c0561f185b372e0b1bf96d7e1ea50ced1434d6aa75e99edf1bf4945c98109a
ac certify b8c64a980b..53b4294e9f (package root server/), profile immich
trees: 97efb6fa20..327bd02c25
pathMap: 6 moves, 99 edited in place, 3359 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 6 moved files (5.2 s)
PASS K1 Move-set integrity: 6 moves, 99 files edited in place, nothing added or deleted (2.5 s)
PASS K2 Byte-span confinement: 111 specifier spans changed in 104 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 111 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.3 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.1 s)
PASS K4 Location scan: 6 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (3 findings in docs, comments or ungated coverage settings) (5.4 s)
finding (stack-text) server/src/utils/logger.ts: moved to server/src/platform/logging/logger.ts; 1 stack-trace reads passed along as text (line 24); their frames now name the new path
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/logging.repository.spec.ts (moved to server/src/platform/logging/logging.repository.spec.ts)
… 2 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.3 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:b3c0561f185b372e0b1bf96d7e1ea50ced1434d6aa75e99edf1bf4945c98109a050 R2 platform/media certified 8 files moved, 15 specifier edits in 14 files, 1 m 33 s
Commit 99c3a69250885bea8261d28b592c9a65570b30a2, tree 8a261d152b199b40267e4c8d10844bc5ff52e6cf
8 paths moved
server/src/commands/media-location.command.ts → server/src/platform/media/media-location.command.ts server/src/repositories/media.repository.spec.ts → server/src/platform/media/media.repository.spec.ts server/src/repositories/media.repository.ts → server/src/platform/media/media.repository.ts server/src/services/media.service.spec.ts → server/src/platform/media/media.service.spec.ts server/src/services/media.service.ts → server/src/platform/media/media.service.ts server/src/utils/editor.spec.ts → server/src/platform/media/editor.spec.ts server/src/utils/editor.ts → server/src/platform/media/editor.ts server/src/utils/media.ts → server/src/platform/media/media.ts
attempt 1: passed round 1, from 71c050c108, 8 moves, 1 m 33 s
Certificate: PASS (static checks) certificates/050-R2-platform-media.json
certificate JSON · digest sha256:79c8b8b7a9a047664899b713f690cd88dc509522ef97f250e597ebdfb2fc3ed8
ac certify 71c050c108..51667efd5c (package root server/), profile immich
trees: 327bd02c25..8a261d152b
pathMap: 8 moves, 10 edited in place, 3446 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 8 moved files (5.3 s)
PASS K1 Move-set integrity: 8 moves, 10 files edited in place, nothing added or deleted (2.6 s)
PASS K2 Byte-span confinement: 15 specifier spans changed in 14 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 15 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.2 s)
PASS K4 Location scan: 8 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/media.service.spec.ts (moved to server/src/platform/media/media.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/media.repository.spec.ts (moved to server/src/platform/media/media.repository.spec.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.1 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:79c8b8b7a9a047664899b713f690cd88dc509522ef97f250e597ebdfb2fc3ed8051 R2 platform/metadata certified 4 files moved, 15 specifier edits in 11 files, 1 m 31 s
Commit 700c178708037183b9f342888b31b1c97e487428, tree ec245a9ea7f2c3096583b407b2aee494d144ac5c
4 paths moved
server/src/repositories/metadata.repository.ts → server/src/platform/metadata/metadata.repository.ts server/src/services/metadata.service.spec.ts → server/src/platform/metadata/metadata.service.spec.ts server/src/services/metadata.service.ts → server/src/platform/metadata/metadata.service.ts server/src/utils/tasks.ts → server/src/platform/metadata/tasks.ts
attempt 1: passed round 1, from 99c3a69250, 4 moves, 1 m 31 s
Certificate: PASS (static checks) certificates/051-R2-platform-metadata.json
certificate JSON · digest sha256:1dc3abdb72a1924860f7647d8bf2eea10afc5097959686d083f2766d14f5c2a4
ac certify 99c3a69250..c8f5f03748 (package root server/), profile immich
trees: 8a261d152b..ec245a9ea7
pathMap: 4 moves, 9 edited in place, 3451 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 4 moved files (5.2 s)
PASS K1 Move-set integrity: 4 moves, 9 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 15 specifier spans changed in 11 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 15 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.5 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 4 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.6 s)
finding (stack-text) server/src/repositories/metadata.repository.ts: moved to server/src/platform/metadata/metadata.repository.ts; 1 stack-trace reads passed along as text (line 133); their frames now name the new path
finding (stack-text) server/src/services/metadata.service.ts: moved to server/src/platform/metadata/metadata.service.ts; 2 stack-trace reads passed along as text (line 170); their frames now name the new path
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
… 8 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.6 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.6 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:1dc3abdb72a1924860f7647d8bf2eea10afc5097959686d083f2766d14f5c2a4052 R2 platform/move certified 1 file moved, 4 specifier edits in 4 files, 1 m 31 s
Commit 71acdb6e2896302b182dcebe4d8ac130afd414c0, tree 869cebd5ac23133a99b8d5c0ca728a8761e3544d
1 path moved
server/src/repositories/move.repository.ts → server/src/platform/move/move.repository.ts
attempt 1: passed round 1, from 700c178708, 1 move, 1 m 31 s
Certificate: PASS (static checks) certificates/052-R2-platform-move.json
certificate JSON · digest sha256:f53cddd6e471c308ca3524aa9d0020795bad5a80f2f3d0d76734e4fbfb17a9f7
ac certify 700c178708..a8abda6f0f (package root server/), profile immich
trees: ec245a9ea7..869cebd5ac
pathMap: 1 moves, 4 edited in place, 3459 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 1 moved files (5.2 s)
PASS K1 Move-set integrity: 1 moves, 4 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 4 specifier spans changed in 4 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 4 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 1 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (2 findings in docs, comments or ungated coverage settings) (5.4 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/move.repository.ts (moved to server/src/platform/move/move.repository.ts)
finding (old-path-in-docs) docs/docs/developer/architecture.mdx: line 60: 'src/repositories' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/move.repository.ts (moved to server/src/platform/move/move.repository.ts)
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.4 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:f53cddd6e471c308ca3524aa9d0020795bad5a80f2f3d0d76734e4fbfb17a9f7053 R2 platform/process certified 2 files moved, 7 specifier edits in 7 files, 1 m 31 s
Commit 54998b5d84b1798ab8ebc370675dab9615c03d34, tree 5d6acf1db837569f70d8164753b8ae3b455933e6
2 paths moved
server/src/repositories/process.repository.spec.ts → server/src/platform/process/process.repository.spec.ts server/src/repositories/process.repository.ts → server/src/platform/process/process.repository.ts
attempt 1: passed round 1, from 71acdb6e28, 2 moves, 1 m 31 s
Certificate: PASS (static checks) certificates/053-R2-platform-process.json
certificate JSON · digest sha256:7996d66314421817b6e2f69a5d8a44025ad1aca863f42415eb9dff2ec548a06a
ac certify 71acdb6e28..804aef06fe (package root server/), profile immich
trees: 869cebd5ac..5d6acf1db8
pathMap: 2 moves, 6 edited in place, 3456 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 2 moved files (5.3 s)
PASS K1 Move-set integrity: 2 moves, 6 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 7 specifier spans changed in 7 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 7 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.4 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.1 s)
PASS K4 Location scan: 2 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (2 findings in docs, comments or ungated coverage settings) (5.6 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/process.repository.spec.ts (moved to server/src/platform/process/process.repository.spec.ts)
finding (old-path-in-docs) docs/docs/developer/architecture.mdx: line 60: 'src/repositories' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/process.repository.spec.ts (moved to server/src/platform/process/process.repository.spec.ts)
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:7996d66314421817b6e2f69a5d8a44025ad1aca863f42415eb9dff2ec548a06a054 R2 platform/registry certified 7 files moved, 74 specifier edits in 71 files, 1 m 33 s
Commit be7267223af13e07f3e6819652ed8f1c45a6501a, tree dd149b5cdd6370749ccc2efd668c8a758c4fe4f9
7 paths moved
server/src/app.module.ts → server/src/platform/registry/app.module.ts server/src/commands/index.ts → server/src/platform/registry/commands/index.ts server/src/controllers/index.spec.ts → server/src/platform/registry/controllers/index.spec.ts server/src/controllers/index.ts → server/src/platform/registry/controllers/index.ts server/src/repositories/index.ts → server/src/platform/registry/repositories/index.ts server/src/services/base.service.ts → server/src/platform/registry/base.service.ts server/src/services/index.ts → server/src/platform/registry/services/index.ts
attempt 1: passed round 1, from 54998b5d84, 7 moves, 1 m 33 s
Certificate: PASS (static checks) certificates/054-R2-platform-registry.json
certificate JSON · digest sha256:821b5e167a89d81d2e0b9e9aaac4b8aef45aef55388d9ac2f8864c07da076791
ac certify 54998b5d84..07006eb4d4 (package root server/), profile immich
trees: 5d6acf1db8..dd149b5cdd
pathMap: 7 moves, 69 edited in place, 3388 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 7 moved files (5.2 s)
PASS K1 Move-set integrity: 7 moves, 69 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 74 specifier spans changed in 71 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 74 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.2 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 7 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the old directory of an index file of server/src/services/index.ts (moved to server/src/platform/registry/services/index.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the old directory of an index file of server/src/repositories/index.ts (moved to server/src/platform/registry/repositories/index.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.5 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:821b5e167a89d81d2e0b9e9aaac4b8aef45aef55388d9ac2f8864c07da076791055 R2 platform/storage certified 7 files moved, 55 specifier edits in 45 files, 1 m 33 s
Commit 75a721923d76e3adc220e0bfb155915a8df653d9, tree 66a0cb2b9f928990a4fc6bd09078c883292c08b4
7 paths moved
server/src/cores/storage.core.spec.ts → server/src/platform/storage/storage.core.spec.ts server/src/cores/storage.core.ts → server/src/platform/storage/storage.core.ts server/src/repositories/storage.repository.ts → server/src/platform/storage/storage.repository.ts server/src/services/storage-template.service.spec.ts → server/src/platform/storage/storage-template.service.spec.ts server/src/services/storage-template.service.ts → server/src/platform/storage/storage-template.service.ts server/src/services/storage.service.spec.ts → server/src/platform/storage/storage.service.spec.ts server/src/services/storage.service.ts → server/src/platform/storage/storage.service.ts
attempt 1: passed round 1, from be7267223a, 7 moves, 1 m 33 s
Certificate: PASS (static checks) certificates/055-R2-platform-storage.json
certificate JSON · digest sha256:5b7d8e3365b3d26dbe3ff59354a5d8f0873bb5685e9edc48227c8d976b09798d
ac certify be7267223a..3fe302817b (package root server/), profile immich
trees: dd149b5cdd..66a0cb2b9f
pathMap: 7 moves, 39 edited in place, 3418 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 7 moved files (5.3 s)
PASS K1 Move-set integrity: 7 moves, 39 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 55 specifier spans changed in 45 files; every other byte identical (0.8 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 55 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.1 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 7 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (stack-text) server/src/services/storage-template.service.ts: moved to server/src/platform/storage/storage-template.service.ts; 1 stack-trace reads passed along as text (line 263); their frames now name the new path
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/storage-template.service.spec.ts (moved to server/src/platform/storage/storage-template.service.spec.ts)
… 7 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.7 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:5b7d8e3365b3d26dbe3ff59354a5d8f0873bb5685e9edc48227c8d976b09798d056 R2 platform/telemetry certified 2 files moved, 10 specifier edits in 10 files, 1 m 31 s
Commit 945d1b921c8d0c39043ca3507f450770306e951f, tree b1bca129f697bac27ef2c647fd817d8eeeeb44f9
2 paths moved
server/src/repositories/telemetry.repository.ts → server/src/platform/telemetry/telemetry.repository.ts server/src/services/telemetry.service.ts → server/src/platform/telemetry/telemetry.service.ts
attempt 1: passed round 1, from 75a721923d, 2 moves, 1 m 31 s
Certificate: PASS (static checks) certificates/056-R2-platform-telemetry.json
certificate JSON · digest sha256:514d1bd551c8f61bfd70886c8d8dae512fbc83fb794812a740a4d4011ae18986
ac certify 75a721923d..c441a7c117 (package root server/), profile immich
trees: 66a0cb2b9f..b1bca129f6
pathMap: 2 moves, 10 edited in place, 3452 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 2 moved files (5.3 s)
PASS K1 Move-set integrity: 2 moves, 10 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 10 specifier spans changed in 10 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 10 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (7.8 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.9 s)
PASS K4 Location scan: 2 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (6 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/telemetry.service.ts (moved to server/src/platform/telemetry/telemetry.service.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/telemetry.repository.ts (moved to server/src/platform/telemetry/telemetry.repository.ts)
… 4 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.5 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:514d1bd551c8f61bfd70886c8d8dae512fbc83fb794812a740a4d4011ae18986057 R2 platform/transcoding certified 2 files moved, 2 specifier edits in 2 files, 1 m 31 s
Commit 342dac06cad209c23e0b4e1f44771cb96bc92767, tree c2606fadaca621b66da6f7fada8150ae9da6d713
2 paths moved
server/src/services/transcoding.service.spec.ts → server/src/platform/transcoding/transcoding.service.spec.ts server/src/services/transcoding.service.ts → server/src/platform/transcoding/transcoding.service.ts
attempt 1: passed round 1, from 945d1b921c, 2 moves, 1 m 31 s
Certificate: PASS (static checks) certificates/057-R2-platform-transcoding.json
certificate JSON · digest sha256:f64c793d74e44efa4040c50679a58de65bdb91787f2782a3648b8affaacfd4c3
ac certify 945d1b921c..9d670a6abd (package root server/), profile immich
trees: b1bca129f6..c2606fadac
pathMap: 2 moves, 1 edited in place, 3461 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 2 moved files (5.4 s)
PASS K1 Move-set integrity: 2 moves, 1 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 2 specifier spans changed in 2 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 2 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.3 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 2 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (5 findings in docs, comments or ungated coverage settings) (5.2 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/transcoding.service.spec.ts (moved to server/src/platform/transcoding/transcoding.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/transcoding.service.spec.ts (moved to server/src/platform/transcoding/transcoding.service.spec.ts)
… 3 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.7 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:f64c793d74e44efa4040c50679a58de65bdb91787f2782a3648b8affaacfd4c3058 R2 platform/websocket certified 2 files moved, 8 specifier edits in 8 files, 1 m 32 s
Commit 9710213d6994fdc4939f6d27e6969e40b0affd62, tree 29a75536ca9cc63bc1b7613587cf175e79da01cb
2 paths moved
server/src/middleware/websocket.adapter.ts → server/src/platform/websocket/websocket.adapter.ts server/src/repositories/websocket.repository.ts → server/src/platform/websocket/websocket.repository.ts
attempt 1: passed round 1, from 342dac06ca, 2 moves, 1 m 32 s
Certificate: PASS (static checks) certificates/058-R2-platform-websocket.json
certificate JSON · digest sha256:c4193cd30f687e7981f3b49eb6b9856666f5f34fccaf7930e63cd75a786b9953
ac certify 342dac06ca..b4cccaeb98 (package root server/), profile immich
trees: c2606fadac..29a75536ca
pathMap: 2 moves, 8 edited in place, 3454 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 2 moved files (5.3 s)
PASS K1 Move-set integrity: 2 moves, 8 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 8 specifier spans changed in 8 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 8 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.2 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.0 s)
PASS K4 Location scan: 2 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (2 findings in docs, comments or ungated coverage settings) (5.2 s)
finding (stack-text) server/src/repositories/websocket.repository.ts: moved to server/src/platform/websocket/websocket.repository.ts; 1 stack-trace reads passed along as text (line 95); their frames now name the new path
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/websocket.repository.ts (moved to server/src/platform/websocket/websocket.repository.ts)
… 1 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.7 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:c4193cd30f687e7981f3b49eb6b9856666f5f34fccaf7930e63cd75a786b9953059 R2 shared/shared certified 20 files moved, 700 specifier edits in 411 files, 1 m 36 s
Commit 775d52db5e82037e73aa66cde6f8a0fd3fdc720d, tree 7dfa3b6c72a2f7b096f6d7b6821b51bc3df1c8db
20 paths moved
server/src/decorators.ts → server/src/shared/decorators.ts server/src/dtos/env.dto.ts → server/src/shared/env.dto.ts server/src/enum.ts → server/src/shared/enum.ts server/src/services/api.service.spec.ts → server/src/shared/api.service.spec.ts server/src/services/api.service.ts → server/src/shared/api.service.ts server/src/types.ts → server/src/shared/types.ts server/src/utils/bytes.ts → server/src/shared/bytes.ts server/src/utils/date.spec.ts → server/src/shared/date.spec.ts server/src/utils/date.ts → server/src/shared/date.ts server/src/utils/mime-types.spec.ts → server/src/shared/mime-types.spec.ts server/src/utils/mime-types.ts → server/src/shared/mime-types.ts server/src/utils/object.ts → server/src/shared/object.ts server/src/utils/pagination.ts → server/src/shared/pagination.ts server/src/utils/preferences.ts → server/src/shared/preferences.ts server/src/utils/request.spec.ts → server/src/shared/request.spec.ts server/src/utils/request.ts → server/src/shared/request.ts server/src/utils/transform.spec.ts → server/src/shared/transform.spec.ts server/src/utils/transform.ts → server/src/shared/transform.ts server/src/validation.spec.ts → server/src/shared/validation.spec.ts server/src/validation.ts → server/src/shared/validation.ts
attempt 1: passed round 1, from 9710213d69, 20 moves, 1 m 36 s
Certificate: PASS (static checks) certificates/059-R2-shared-shared.json
certificate JSON · digest sha256:c974d003c3af07901cdf4a6c709e50e50915a5fcb7db005f2d443b72f3e64b23
ac certify 9710213d69..ec4c596d97 (package root server/), profile immich
trees: 29a75536ca..7dfa3b6c72
pathMap: 20 moves, 398 edited in place, 3046 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 20 moved files (5.3 s)
PASS K1 Move-set integrity: 20 moves, 398 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 700 specifier spans changed in 411 files; every other byte identical (0.9 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 700 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (5.8 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.9 s)
PASS K4 Location scan: 20 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (8 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
finding (old-path-in-docs) .github/pull_request_template.md: line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/api.service.spec.ts (moved to server/src/shared/api.service.spec.ts)
finding (old-path-in-docs) .github/pull_request_template.md: line 37: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/api.service.spec.ts (moved to server/src/shared/api.service.spec.ts)
… 6 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (49.8 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:c974d003c3af07901cdf4a6c709e50e50915a5fcb7db005f2d443b72f3e64b23060 R3 module/search certified 2 files moved, 2 specifier edits in 2 files, 1 m 30 s
Commit 8eac5f6107f02e256de5e5f61ea0a6990d9fb3aa, tree c94d47662aa08f066a91f7687203ee7faee7180b
2 paths moved
server/src/modules/search/search-filter.spec.ts → server/src/modules/search/search.filter.spec.ts server/src/modules/search/search-filter.ts → server/src/modules/search/search.filter.ts
attempt 1: passed round 1, from 775d52db5e, 2 moves, 1 m 30 s
Certificate: PASS (static checks) certificates/060-R3-module-search.json
certificate JSON · digest sha256:b775e6f44ed8b4f02be65da19e6177d582b3ed03e83d94f20a1d9960855baf70
ac certify 775d52db5e..b9a7001f2a (package root server/), profile immich
trees: 7dfa3b6c72..c94d47662a
pathMap: 2 moves, 1 edited in place, 3461 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 2 moved files (5.2 s)
PASS K1 Move-set integrity: 2 moves, 1 files edited in place, nothing added or deleted (2.1 s)
PASS K2 Byte-span confinement: 2 specifier spans changed in 2 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 2 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.4 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.0 s)
PASS K4 Location scan: 2 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (0 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.7 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:b775e6f44ed8b4f02be65da19e6177d582b3ed03e83d94f20a1d9960855baf70061 R3 module/view certified 1 file moved, 3 specifier edits in 3 files, 1 m 31 s
Commit f4965adc1f68b660bbec45ef0b8ad158b72e742a, tree 199d3a6f41a5b0db356f4413556dfd11073c2772
1 path moved
server/src/modules/view/view-repository.ts → server/src/modules/view/view.repository.ts
attempt 1: passed round 1, from 8eac5f6107, 1 move, 1 m 31 s
Certificate: PASS (static checks) certificates/061-R3-module-view.json
certificate JSON · digest sha256:70dc3f40d8186e75c0ba7cace201511584e1ca0ddf8144fb2324c9acdb1b8a21
ac certify 8eac5f6107..ceed7e5ae9 (package root server/), profile immich
trees: c94d47662a..199d3a6f41
pathMap: 1 moves, 3 edited in place, 3460 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 1 moved files (5.2 s)
PASS K1 Move-set integrity: 1 moves, 3 files edited in place, nothing added or deleted (2.2 s)
PASS K2 Byte-span confinement: 3 specifier spans changed in 3 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 3 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.4 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.9 s)
PASS K4 Location scan: 1 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (0 findings in docs, comments or ungated coverage settings) (5.2 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.9 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:70dc3f40d8186e75c0ba7cace201511584e1ca0ddf8144fb2324c9acdb1b8a21062 R3 shared/shared certified 2 files moved, 13 specifier edits in 13 files, 1 m 30 s
Commit 91a57545b7898352df944e09cc0f38eaadbbd89d, tree 6a8a901cbb01c97f5d421020421828f493922ba5
2 paths moved
server/src/shared/mime-types.spec.ts → server/src/shared/mime.types.spec.ts server/src/shared/mime-types.ts → server/src/shared/mime.types.ts
attempt 1: passed round 1, from f4965adc1f, 2 moves, 1 m 30 s
Certificate: PASS (static checks) certificates/062-R3-shared-shared.json
certificate JSON · digest sha256:9457bec5a0d699c7c5341423fd48b0afae406c6fb32ee2c95848630283dc34af
ac certify f4965adc1f..d9311758a7 (package root server/), profile immich
trees: 199d3a6f41..6a8a901cbb
pathMap: 2 moves, 12 edited in place, 3450 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 2 moved files (5.2 s)
PASS K1 Move-set integrity: 2 moves, 12 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 13 specifier spans changed in 13 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 13 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.2 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.0 s)
PASS K4 Location scan: 2 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (0 findings in docs, comments or ungated coverage settings) (5.0 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.8 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
verdict: PASS (static checks only)
digest: sha256:9457bec5a0d699c7c5341423fd48b0afae406c6fb32ee2c95848630283dc34af063 R4 boundaries certified boundary rules added, 4 m 40 s
Commit c4be040b5739351507750669c3a179dd752f4a72, tree 4e457bb4e806f1bc0a63b83141345e20edab0f57
attempt 1: passed round 1, from 91a57545b7, 0 moves, 4 m 40 s
80 rules over 38 modules (8 back-edges against the DAG order), 161 known violations frozen in the baseline, 80/80 rules fired on their synthetic violation; check from server/ with `npx -y -p dependency-cruiser@18.6.0 -p typescript@6.0.2 depcruise src --config .dependency-cruiser.json --ignore-known .dependency-cruiser-known-violations.json`
Certificate: PASS (static checks and oracles) rungs/R4.json
certificate JSON · digest sha256:c57590c655d8e83e44aea69fd39c09d701371379e702c6accd4c097bb2f7c0ec
ac certify 91a57545b7..b609f38a4a (package root server/), profile immich
trees: 6a8a901cbb..4e457bb4e8
pathMap: 0 moves, 0 edited in place, 3464 unchanged, 2 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 0 moved files (5.3 s)
PASS K1 Move-set integrity: 0 moves, 0 files edited in place, 2 inert tool configs added, nothing else added or deleted (8.2 s)
finding (tool-config-added) server/.dependency-cruiser-known-violations.json: added at the package root and proven inert: in no tsconfig program, loaded by no reference, packed by no published package, named or globbed by no other file, and the tool runs nowhere; CI path filters match it, so it triggers their jobs: 'server/**' in .github/workflows/docker.yml (line 45), 'server/**' in .github/workflows/test.yml (line 46)
finding (tool-config-added) server/.dependency-cruiser.json: added at the package root and proven inert: in no tsconfig program, loaded by no reference, packed by no published package, named or globbed by no other file, and the tool runs nowhere; CI path filters match it, so it triggers their jobs: 'server/**' in .github/workflows/docker.yml (line 45), 'server/**' in .github/workflows/test.yml (line 46)
PASS K2 Byte-span confinement: 0 specifier spans changed in 0 files; every other byte identical (0.0 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 0 rewritten specifiers keep their form (1.9 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (6.7 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 0 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (0 findings in docs, comments or ungated coverage settings) (0.3 s)
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.6 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.7 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
PASS K8 Oracles on the commit: tsc exit 0; unit 105/105 files and 2,337/2,337 cases equal to base (head: 105/105 files load, 2,337 passed, 0 failed, 0 skipped); openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes) (170.7 s)
verdict: PASS (static checks and oracles)
digest: sha256:c57590c655d8e83e44aea69fd39c09d701371379e702c6accd4c097bb2f7c0ecSeconds per step, from run.json attempt timings. R4 has no static step certificate: its time is its rung certificate (with oracles).
Table view
| # | Rung | Group | Move + commit (s) | Certify (s) | Other (s) | Failed attempts (s) |
|---|---|---|---|---|---|---|
| 1 | R1 | module/activity | 8.6 | 132.6 | 0.1 | 0.0 |
| 2 | R1 | module/album | 8.9 | 79.4 | 0.1 | 0.0 |
| 3 | R1 | module/api-key | 8.7 | 79.1 | 0.1 | 0.0 |
| 4 | R1 | module/asset | 10.3 | 80.6 | 0.1 | 0.0 |
| 5 | R1 | module/auth | 10.3 | 80.1 | 0.1 | 0.0 |
| 6 | R1 | module/cluster-group | 8.7 | 81.2 | 0.1 | 0.0 |
| 7 | R1 | module/config | 9.4 | 80.6 | 0.1 | 0.0 |
| 8 | R1 | module/database-backup | 8.8 | 80.1 | 0.1 | 0.0 |
| 9 | R1 | module/download | 8.7 | 79.4 | 0.1 | 0.0 |
| 10 | R1 | module/duplicate | 9.0 | 80.0 | 0.1 | 0.0 |
| 11 | R1 | module/integrity | 9.0 | 80.0 | 0.1 | 0.0 |
| 12 | R1 | module/job | 8.9 | 79.8 | 0.1 | 0.0 |
| 13 | R1 | module/library | 9.1 | 79.9 | 0.1 | 0.0 |
| 14 | R1 | module/machine-learning | 8.8 | 79.9 | 0.1 | 0.0 |
| 15 | R1 | module/maintenance | 9.5 | 79.3 | 0.1 | 0.0 |
| 16 | R1 | module/map | 9.0 | 79.2 | 0.1 | 0.0 |
| 17 | R1 | module/memory | 8.9 | 78.6 | 0.1 | 0.0 |
| 18 | R1 | module/notification | 9.4 | 78.7 | 0.1 | 0.0 |
| 19 | R1 | module/ocr | 8.9 | 80.1 | 0.1 | 0.0 |
| 20 | R1 | module/partner | 9.0 | 78.7 | 0.1 | 0.0 |
| 21 | R1 | module/person | 9.4 | 78.8 | 0.1 | 0.0 |
| 22 | R1 | module/plugin | 9.1 | 79.8 | 0.1 | 0.0 |
| 23 | R1 | module/queue | 9.0 | 79.2 | 0.1 | 0.0 |
| 24 | R1 | module/search | 9.7 | 81.7 | 0.1 | 0.0 |
| 25 | R1 | module/server | 9.2 | 80.8 | 0.1 | 0.0 |
| 26 | R1 | module/session | 9.1 | 79.2 | 0.1 | 0.0 |
| 27 | R1 | module/shared-link | 9.4 | 81.2 | 0.1 | 0.0 |
| 28 | R1 | module/stack | 9.4 | 81.3 | 0.1 | 0.0 |
| 29 | R1 | module/sync | 9.4 | 81.4 | 0.1 | 0.0 |
| 30 | R1 | module/system-metadata | 9.7 | 81.3 | 0.1 | 0.0 |
| 31 | R1 | module/tag | 9.6 | 81.2 | 0.1 | 0.0 |
| 32 | R1 | module/timeline | 9.1 | 79.9 | 0.1 | 0.0 |
| 33 | R1 | module/trash | 9.2 | 80.1 | 0.1 | 0.0 |
| 34 | R1 | module/user | 10.3 | 84.0 | 0.1 | 0.0 |
| 35 | R1 | module/version | 9.3 | 83.5 | 0.1 | 0.0 |
| 36 | R1 | module/video-stream | 9.3 | 82.0 | 0.1 | 0.0 |
| 37 | R1 | module/view | 9.3 | 82.3 | 0.1 | 0.0 |
| 38 | R1 | module/workflow | 9.3 | 81.0 | 0.1 | 0.0 |
| 39 | R2 | platform/access | 9.7 | 83.2 | 0.1 | 0.0 |
| 40 | R2 | platform/bootstrap | 9.1 | 82.5 | 0.1 | 0.0 |
| 41 | R2 | platform/check | 8.9 | 83.6 | 0.1 | 0.0 |
| 42 | R2 | platform/cron | 9.0 | 83.5 | 0.1 | 0.0 |
| 43 | R2 | platform/crypto | 9.1 | 83.1 | 0.1 | 0.0 |
| 44 | R2 | platform/database | 10.2 | 82.2 | 0.1 | 0.0 |
| 45 | R2 | platform/event | 9.6 | 82.5 | 0.1 | 0.0 |
| 46 | R2 | platform/file | 9.5 | 83.0 | 0.1 | 0.0 |
| 47 | R2 | platform/http-client | 9.0 | 83.2 | 0.1 | 0.0 |
| 48 | R2 | platform/http-response | 9.0 | 81.8 | 0.1 | 0.0 |
| 49 | R2 | platform/logging | 10.2 | 83.0 | 0.1 | 0.0 |
| 50 | R2 | platform/media | 9.7 | 82.9 | 0.1 | 0.0 |
| 51 | R2 | platform/metadata | 9.3 | 81.6 | 0.1 | 0.0 |
| 52 | R2 | platform/move | 9.1 | 82.0 | 0.1 | 0.0 |
| 53 | R2 | platform/process | 9.2 | 82.1 | 0.1 | 0.0 |
| 54 | R2 | platform/registry | 10.7 | 82.3 | 0.1 | 0.0 |
| 55 | R2 | platform/storage | 10.1 | 82.4 | 0.1 | 0.0 |
| 56 | R2 | platform/telemetry | 9.5 | 81.6 | 0.1 | 0.0 |
| 57 | R2 | platform/transcoding | 9.2 | 81.2 | 0.1 | 0.0 |
| 58 | R2 | platform/websocket | 9.4 | 82.2 | 0.1 | 0.0 |
| 59 | R2 | shared/shared | 13.1 | 82.3 | 0.1 | 0.0 |
| 60 | R3 | module/search | 8.9 | 81.2 | 0.1 | 0.0 |
| 61 | R3 | module/view | 9.2 | 81.3 | 0.1 | 0.0 |
| 62 | R3 | shared/shared | 9.3 | 81.1 | 0.1 | 0.0 |
| 63 | R4 | boundaries | 0.1 | 256.4 | 0.0 | 0.0 |
Rung certificates
R1 rung certificate: PASS (static checks and oracles) rungs/R1.json
certificate JSON · digest sha256:d03d02e7de2c1d09739f0703ba22000075fd3ead7488369cfd87708f2b37984b
ac certify 02063972e8..2f35e608a3 (package root server/), profile immich
trees: 424df72c34..eae80d417f
pathMap: 286 moves, 130 edited in place, 3048 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 286 moved files (0.2 s)
PASS K1 Move-set integrity: 286 moves, 130 files edited in place, nothing added or deleted (2.0 s)
PASS K2 Byte-span confinement: 1227 specifier spans changed in 352 files; every other byte identical (3.0 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 1227 rewritten specifiers keep their form (1.6 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (6.3 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 286 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (9 findings in docs, comments or ungated coverage settings) (5.7 s)
finding (stack-text) server/src/services/asset-media.service.ts: moved to server/src/modules/asset/asset-media.service.ts; 1 stack-trace reads passed along as text (line 224); their frames now name the new path
finding (stack-text) server/src/services/auth.service.ts: moved to server/src/modules/auth/auth.service.ts; 1 stack-trace reads passed along as text (line 403); their frames now name the new path
finding (stack-text) server/src/services/duplicate.service.ts: moved to server/src/modules/duplicate/duplicate.service.ts; 1 stack-trace reads passed along as text (line 104); their frames now name the new path
… 14 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (0.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
PASS K8 Oracles on the commit: tsc exit 0; unit 105/105 files and 2,337/2,337 cases equal to base (head: 105/105 files load, 2,337 passed, 0 failed, 0 skipped); openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes) (116.1 s)
verdict: PASS (static checks and oracles)
digest: sha256:d03d02e7de2c1d09739f0703ba22000075fd3ead7488369cfd87708f2b37984bR2 rung certificate: PASS (static checks and oracles) rungs/R2.json
certificate JSON · digest sha256:0d0cf9a3bae58090bbe1a9f7bd41cfe5dd71fab780a557c85607e33183108703
ac certify 2f35e608a3..775d52db5e (package root server/), profile immich
trees: eae80d417f..7dfa3b6c72
pathMap: 81 moves, 403 edited in place, 2980 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 81 moved files (0.2 s)
PASS K1 Move-set integrity: 81 moves, 403 files edited in place, nothing added or deleted (2.3 s)
PASS K2 Byte-span confinement: 1247 specifier spans changed in 469 files; every other byte identical (1.3 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 1247 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (6.0 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.1 s)
PASS K4 Location scan: 81 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (13 findings in docs, comments or ungated coverage settings) (5.3 s)
finding (stack-text) server/src/repositories/metadata.repository.ts: moved to server/src/platform/metadata/metadata.repository.ts; 1 stack-trace reads passed along as text (line 133); their frames now name the new path
finding (stack-text) server/src/repositories/websocket.repository.ts: moved to server/src/platform/websocket/websocket.repository.ts; 1 stack-trace reads passed along as text (line 95); their frames now name the new path
finding (stack-text) server/src/services/metadata.service.ts: moved to server/src/platform/metadata/metadata.service.ts; 2 stack-trace reads passed along as text (line 170); their frames now name the new path
… 16 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (0.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
PASS K8 Oracles on the commit: tsc exit 0; unit 105/105 files and 2,337/2,337 cases equal to base (head: 105/105 files load, 2,337 passed, 0 failed, 0 skipped); openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes) (170.7 s)
verdict: PASS (static checks and oracles)
digest: sha256:0d0cf9a3bae58090bbe1a9f7bd41cfe5dd71fab780a557c85607e33183108703R3 rung certificate: PASS (static checks and oracles) rungs/R3.json
certificate JSON · digest sha256:043030173380b8fd7aaae467c0a67bcc72ed19d66f9d8eb89933e809a849350d
ac certify 775d52db5e..91a57545b7 (package root server/), profile immich
trees: 7dfa3b6c72..6a8a901cbb
pathMap: 5 moves, 16 edited in place, 3443 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 5 moved files (0.4 s)
PASS K1 Move-set integrity: 5 moves, 16 files edited in place, nothing added or deleted (2.4 s)
PASS K2 Byte-span confinement: 18 specifier spans changed in 18 files; every other byte identical (0.7 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 18 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (8.1 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.1 s)
PASS K4 Location scan: 5 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (0 findings in docs, comments or ungated coverage settings) (5.6 s)
finding (opaque-dynamic-load) server/src/repositories/database.repository.ts: line 510: import(filePath) loads a module by a path K4 can't evaluate
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (0.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
PASS K8 Oracles on the commit: tsc exit 0; unit 105/105 files and 2,337/2,337 cases equal to base (head: 105/105 files load, 2,337 passed, 0 failed, 0 skipped); openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes) (169.5 s)
verdict: PASS (static checks and oracles)
digest: sha256:043030173380b8fd7aaae467c0a67bcc72ed19d66f9d8eb89933e809a849350dR4 rung certificate: PASS (static checks and oracles) rungs/R4.json
certificate JSON · digest sha256:c57590c655d8e83e44aea69fd39c09d701371379e702c6accd4c097bb2f7c0ec
ac certify 91a57545b7..b609f38a4a (package root server/), profile immich
trees: 6a8a901cbb..4e457bb4e8
pathMap: 0 moves, 0 edited in place, 3464 unchanged, 2 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 0 moved files (5.3 s)
PASS K1 Move-set integrity: 0 moves, 0 files edited in place, 2 inert tool configs added, nothing else added or deleted (8.2 s)
finding (tool-config-added) server/.dependency-cruiser-known-violations.json: added at the package root and proven inert: in no tsconfig program, loaded by no reference, packed by no published package, named or globbed by no other file, and the tool runs nowhere; CI path filters match it, so it triggers their jobs: 'server/**' in .github/workflows/docker.yml (line 45), 'server/**' in .github/workflows/test.yml (line 46)
finding (tool-config-added) server/.dependency-cruiser.json: added at the package root and proven inert: in no tsconfig program, loaded by no reference, packed by no published package, named or globbed by no other file, and the tool runs nowhere; CI path filters match it, so it triggers their jobs: 'server/**' in .github/workflows/docker.yml (line 45), 'server/**' in .github/workflows/test.yml (line 46)
PASS K2 Byte-span confinement: 0 specifier spans changed in 0 files; every other byte identical (0.0 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 0 rewritten specifiers keep their form (1.9 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (6.7 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.8 s)
PASS K4 Location scan: 0 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (0 findings in docs, comments or ungated coverage settings) (0.3 s)
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (48.6 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.7 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
PASS K8 Oracles on the commit: tsc exit 0; unit 105/105 files and 2,337/2,337 cases equal to base (head: 105/105 files load, 2,337 passed, 0 failed, 0 skipped); openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes) (170.7 s)
verdict: PASS (static checks and oracles)
digest: sha256:c57590c655d8e83e44aea69fd39c09d701371379e702c6accd4c097bb2f7c0ecThe whole PR
Whole-PR certificate: PASS (static checks and oracles) certificate.json
certificate JSON · digest sha256:9a5b2404631c2ac668462ad93fcbcd116637244e2b4f76e987bcc4e23e8be2b5
ac certify 02063972e8..c4be040b57 (package root server/), profile immich
trees: 424df72c34..4e457bb4e8
pathMap: 367 moves, 180 edited in place, 2917 unchanged, 2 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 367 moved files (0.2 s)
PASS K1 Move-set integrity: 367 moves, 180 files edited in place, 2 inert tool configs added, nothing else added or deleted (8.3 s)
finding (tool-config-added) server/.dependency-cruiser-known-violations.json: added at the package root and proven inert: in no tsconfig program, loaded by no reference, packed by no published package, named or globbed by no other file, and the tool runs nowhere; CI path filters match it, so it triggers their jobs: 'server/**' in .github/workflows/docker.yml (line 45), 'server/**' in .github/workflows/test.yml (line 46)
finding (tool-config-added) server/.dependency-cruiser.json: added at the package root and proven inert: in no tsconfig program, loaded by no reference, packed by no published package, named or globbed by no other file, and the tool runs nowhere; CI path filters match it, so it triggers their jobs: 'server/**' in .github/workflows/docker.yml (line 45), 'server/**' in .github/workflows/test.yml (line 46)
PASS K2 Byte-span confinement: 2474 specifier spans changed in 515 files; every other byte identical (3.4 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 2474 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (5.1 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 367 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (13 findings in docs, comments or ungated coverage settings) (5.7 s)
finding (stack-text) server/src/repositories/metadata.repository.ts: moved to server/src/platform/metadata/metadata.repository.ts; 1 stack-trace reads passed along as text (line 133); their frames now name the new path
finding (stack-text) server/src/repositories/websocket.repository.ts: moved to server/src/platform/websocket/websocket.repository.ts; 1 stack-trace reads passed along as text (line 95); their frames now name the new path
finding (stack-text) server/src/services/asset-media.service.ts: moved to server/src/modules/asset/asset-media.service.ts; 1 stack-trace reads passed along as text (line 224); their frames now name the new path
… 23 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (0.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
PASS K8 Oracles on the commit: tsc exit 0; unit 105/105 files and 2,337/2,337 cases equal to base (head: 105/105 files load, 2,337 passed, 0 failed, 0 skipped); openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes) (114.9 s)
verdict: PASS (static checks and oracles)
digest: sha256:9a5b2404631c2ac668462ad93fcbcd116637244e2b4f76e987bcc4e23e8be2b5Findings: recorded, never fixed
A good restructure makes existing bugs obvious; fixing them is never part of it. These 45 findings were found by deterministic collectors and are left exactly as they are in the code.
Narration: Nemotron 3.5 Lightning (thinking off) (nvidia/Nemotron-3_5-Lightning), 2 calls, $0.0010 when recorded, replayed here; 35 findings narrated of the 40 findings sent (5 more were not sent: the narration takes the first 40); 4 narrations dropped by the lexical guard (a narration may only restate its evidence), 1 finding with no narration returned by the model.
Findings sent without a narration
| Finding | Why |
|---|---|
F-68921a0c7282 | dropped by the guard: names "server/src/repositories/database.repository.ts", which the evidence doesn't contain |
F-a1ef2439353b | dropped by the guard: names "relocated", which the evidence doesn't contain |
F-ab4403001c97 | dropped by the guard: names "relocated", which the evidence doesn't contain |
F-ab71273b30ce | dropped by the guard: names "relocated", which the evidence doesn't contain |
F-70d9e19108a1 | no narration returned |
Sources
| Source | What it contributed |
|---|---|
target | facts at 02063972e8: 269 movable files, 1759 edges, 269 placed by the plan |
boundaries | boundaries/report.json: 2 strongly connected sets, 8 back-edges |
facts | 3 tables with writers in several groups, 1 god-injection base classes |
analyzer | 458 production files analyzed, 0 import test code |
validator | 10 warnings on the run's plan |
certificate | 67 certificates read (steps, rungs, whole PR) |
run | 107 run.json findings |
module-cycle (2)
42 folders form one import cycle F-f375142329cd
The R4 report shows that 42 out of 73 folders are strongly connected through imports, each reaching every other. With 328 edges over 1025 files inside the set, these 91 edges spanning 174 files are the only back-edges that close the cycles; removing them leaves the collection acyclic. (narration: Nemotron 3.5 Lightning)
Evidence
42 of 73 folders are strongly connected (from R4's boundary report (boundaries/report.json)): each reaches every other through imports. Members: module/album, module/asset, module/auth, module/config, module/database-backup, module/job, module/library, module/machine-learning, module/maintenance, module/map, module/ocr, module/partner, module/person, module/plugin, module/queue, module/search, module/server, module/session, module/shared-link, module/system-metadata, module/tag, module/user, module/version, module/workflow, other:src, other:src/maintenance, other:src/repositories, other:src/schema, other:src/schema/tables, other:src/services, other:src/utils, platform/access, platform/cron, platform/database, platform/event, platform/file, platform/http-response, platform/logging, platform/media, platform/move, platform/storage, shared. Inside the set: 328 edges between them over 1025 files. These 91 edges (174 files) close every cycle (R4's back-edges first); without them the set is acyclic: - other:src/schema/tables → other:src/schema (21 files, e.g. server/src/schema/tables/album-asset.table.ts → server/src/schema/functions.ts) - module/person → module/asset (6 files, e.g. server/src/modules/person/person.controller.ts → server/src/modules/asset/asset-ids.response.dto.ts) - module/album → module/asset (5 files, e.g. server/src/modules/album/album.controller.ts → server/src/modules/asset/asset-ids.response.dto.ts) - module/search → module/asset (5 files, e.g. server/src/modules/search/search.controller.ts → server/src/modules/asset/asset-response.dto.ts) - module/shared-link → module/asset (5 files, e.g. server/src/modules/shared-link/shared-link.controller.ts → server/src/modules/asset/asset-ids.response.dto.ts) - platform/database → other:src/schema/tables (5 files, e.g. server/src/platform/database/database.ts → server/src/schema/tables/album.table.ts) - module/auth → module/user (4 files, e.g. server/src/modules/auth/auth.controller.ts → server/src/modules/user/user.dto.ts) - module/user → module/asset (4 files, e.g. server/src/modules/user/user-admin.controller.ts → server/src/modules/asset/asset.dto.ts) - platform/access → module/person (4 files, e.g. server/src/platform/access/access.repository.ts → server/src/modules/person/person.dto.ts) - platform/media → module/asset (4 files, e.g. server/src/platform/media/media.repository.ts → server/src/modules/asset/editing.dto.ts) - module/album → other:src/schema/tables (3 files, e.g. server/src/modules/album/album-user.repository.ts → server/src/schema/tables/album-user.table.ts) - module/server → module/user (3 files, e.g. server/src/modules/server/server.controller.ts → server/src/modules/user/license.dto.ts) - module/shared-link → other:src/schema/tables (3 files, e.g. server/src/modules/shared-link/shared-link.repository.ts → server/src/schema/tables/asset-exif.table.ts) - module/tag → module/asset (3 files, e.g. server/src/modules/tag/tag.controller.ts → server/src/modules/asset/asset-ids.response.dto.ts) - platform/file → module/asset (3 files, e.g. server/src/platform/file/file-upload.interceptor.ts → server/src/modules/asset/asset-media.dto.ts) - … 76 more edges (96 files)
Files: server/src/modules/album/album-user.repository.ts server/src/modules/album/album.controller.ts server/src/modules/asset/asset-ids.response.dto.ts server/src/modules/asset/asset-media.dto.ts server/src/modules/asset/asset-response.dto.ts server/src/modules/asset/asset.dto.ts server/src/modules/asset/editing.dto.ts server/src/modules/auth/auth.controller.ts and 19 more
Source: boundaries
module/notification and other:src/emails import each other F-848cb161117b
Module notification and other:src/emails are strongly connected, each reaching the other through imports; one edge over four files closes the cycle, and removing it makes the set acyclic. (narration: Nemotron 3.5 Lightning)
Evidence
2 of 73 folders are strongly connected (from R4's boundary report (boundaries/report.json)): each reaches every other through imports. Members: module/notification, other:src/emails. Inside the set: 2 edges between them over 8 files. These 1 edges (4 files) close every cycle (R4's back-edges first); without them the set is acyclic: - other:src/emails → module/notification (4 files, e.g. server/src/emails/album-invite.email.tsx → server/src/modules/notification/email.repository.ts)
Files: server/src/emails/album-invite.email.tsx server/src/modules/notification/email.repository.ts
Source: boundaries
god-injection (1)
BaseService injects 56 members into 51 classes F-190847636c3d
BaseService receives 56 constructor-injected members, and 51 classes extend it so each inherits all 56; on average a subclass reads 5.7 of them, and the most-read members such as logger and repositories are accessed by many classes. (narration: Nemotron 3.5 Lightning)
Evidence
BaseService (server/src/services/base.service.ts) takes 56 constructor-injected members (56 of them repositories), and 51 classes extend it, so each receives all 56. Each subclass reads 5.7 of them on average through this.<member> (median 5, min 1, max 15 in MetadataService); every member has a reader. Most read: logger (33 classes), jobRepository (23 classes), assetRepository (21 classes), eventRepository (18 classes), userRepository (18 classes). Per class (members read of 56): - MetadataService (server/src/services/metadata.service.ts): 15 (albumRepository, assetJobRepository, assetRepository, cryptoRepository, databaseRepository, eventRepository, jobRepository, logger, … 7 more) - PersonService (server/src/services/person.service.ts): 15 (assetJobRepository, assetRepository, clusterGroupRepository, cryptoRepository, databaseRepository, jobRepository, logger, machineLearningRepository, … 7 more) - AssetService (server/src/services/asset.service.ts): 13 (albumRepository, assetEditRepository, assetJobRepository, assetRepository, eventRepository, jobRepository, logger, ocrRepository, … 5 more) - AuthService (server/src/services/auth.service.ts): 10 (apiKeyRepository, cryptoRepository, eventRepository, jobRepository, logger, mediaRepository, oauthRepository, sessionRepository, … 2 more) - LibraryService (server/src/services/library.service.ts): 10 (assetJobRepository, assetRepository, cronRepository, cryptoRepository, databaseRepository, eventRepository, jobRepository, libraryRepository, … 2 more) - UserService (server/src/services/user.service.ts): 10 (albumRepository, assetRepository, configRepository, cryptoRepository, eventRepository, jobRepository, logger, mediaRepository, … 2 more) - CliService (server/src/services/cli.service.ts): 9 (appRepository, assetRepository, cryptoRepository, databaseRepository, personRepository, sessionRepository, storageRepository, systemMetadataRepository, … 1 more) - DuplicateService (server/src/services/duplicate.service.ts): 9 (albumRepository, assetJobRepository, assetRepository, cryptoRepository, duplicateRepository, eventRepository, jobRepository, logger, … 1 more) - IntegrityService (server/src/services/integrity.service.ts): 9 (assetRepository, cronRepository, databaseRepository, eventRepository, integrityRepository, jobRepository, logger, storageRepository, … 1 more) - NotificationService (server/src/services/notification.service.ts): 9 (albumRepository, assetJobRepository, assetRepository, emailRepository, jobRepository, logger, notificationRepository, userRepository, … 1 more) - VersionService (server/src/services/version.service.ts): 9 (configRepository, cronRepository, databaseRepository, jobRepository, logger, serverInfoRepository, systemMetadataRepository, versionRepository, … 1 more) - MediaService (server/src/services/media.service.ts): 8 (assetJobRepository, assetRepository, jobRepository, logger, mediaRepository, ocrRepository, personRepository, storageRepository) - MemoryService (server/src/services/memory.service.ts): 8 (accessRepository, assetRepository, databaseRepository, logger, memoryRepository, personRepository, systemMetadataRepository, userRepository) - StorageTemplateService (server/src/services/storage-template.service.ts): 8 (albumRepository, assetJobRepository, databaseRepository, jobRepository, logger, moveRepository, storageRepository, userRepository) - UserAdminService (server/src/services/user-admin.service.ts): 8 (albumRepository, assetRepository, cryptoRepository, eventRepository, jobRepository, logger, sessionRepository, userRepository) - WorkflowExecutionService (server/src/services/workflow-execution.service.ts): 8 (configRepository, cryptoRepository, databaseRepository, jobRepository, logger, pluginRepository, storageRepository, workflowRepository) - AlbumService (server/src/services/album.service.ts): 7 (accessRepository, albumRepository, albumUserRepository, eventRepository, logger, mapRepository, userRepository) - AssetMediaService (server/src/services/asset-media.service.ts): 7 (albumRepository, assetRepository, eventRepository, jobRepository, logger, sharedLinkRepository, storageRepository) - ServerService (server/src/services/server.service.ts): 7 (configRepository, cryptoRepository, logger, serverInfoRepository, storageRepository, systemMetadataRepository, userRepository) - JobService (server/src/services/job.service.ts): 6 (assetEditRepository, assetRepository, eventRepository, jobRepository, logger, websocketRepository) - OcrService (server/src/services/ocr.service.ts): 6 (assetJobRepository, assetRepository, jobRepository, logger, machineLearningRepository, ocrRepository) - SmartInfoService (server/src/services/smart-info.service.ts): 6 (assetJobRepository, databaseRepository, jobRepository, logger, machineLearningRepository, searchRepository) - StorageService (server/src/services/storage.service.ts): 6 (assetRepository, configRepository, databaseRepository, logger, storageRepository, systemMetadataRepository) - TranscodingService (server/src/services/transcoding.service.ts): 6 (databaseRepository, logger, processRepository, storageRepository, videoStreamRepository, websocketRepository) - ClusterGroupService (server/src/services/cluster-group.service.ts): 5 (clusterGroupRepository, eventRepository, jobRepository, personRepository, userRepository) - DownloadService (server/src/services/download.service.ts): 5 (assetRepository, downloadRepository, logger, storageRepository, userRepository) - MaintenanceService (server/src/services/maintenance.service.ts): 5 (appRepository, eventRepository, logger, storageRepository, systemMetadataRepository) - QueueService (server/src/services/queue.service.ts): 5 (cronRepository, databaseRepository, eventRepository, jobRepository, logger) - SearchService (server/src/services/search.service.ts): 5 (assetRepository, machineLearningRepository, partnerRepository, personRepository, searchRepository) - TagService (server/src/services/tag.service.ts): 5 (accessRepository, assetRepository, eventRepository, jobRepository, tagRepository) - HlsService (server/src/services/hls.service.ts): 4 (cryptoRepository, storageRepository, videoStreamRepository, websocketRepository) - SharedLinkService (server/src/services/shared-link.service.ts): 4 (cryptoRepository, logger, sharedLinkAssetRepository, sharedLinkRepository) - SyncService (server/src/services/sync.service.ts): 4 (logger, sessionRepository, syncCheckpointRepository, syncRepository) - SystemConfigService (server/src/services/system-config.service.ts): 4 (configRepository, eventRepository, logger, machineLearningRepository) - TrashService (server/src/services/trash.service.ts): 4 (eventRepository, jobRepository, logger, trashRepository) - DatabaseService (server/src/services/database.service.ts): 3 (configRepository, databaseRepository, logger) - MapService (server/src/services/map.service.ts): 3 (albumRepository, mapRepository, partnerRepository) - NotificationAdminService (server/src/services/notification-admin.service.ts): 3 (emailRepository, notificationRepository, userRepository) - PartnerService (server/src/services/partner.service.ts): 3 (logger, partnerRepository, userRepository) - SessionService (server/src/services/session.service.ts): 3 (cryptoRepository, logger, sessionRepository) - StackService (server/src/services/stack.service.ts): 3 (assetRepository, eventRepository, stackRepository) - ApiKeyService (server/src/services/api-key.service.ts): 2 (apiKeyRepository, cryptoRepository) - AssetFileService (server/src/services/asset-file.service.ts): 2 (assetFileRepository, jobRepository) - TelemetryService (server/src/services/telemetry.service.ts): 2 (telemetryRepository, userRepository) - TimelineService (server/src/services/timeline.service.ts): 2 (assetRepository, partnerRepository) - WorkflowService (server/src/services/workflow.service.ts): 2 (pluginRepository, workflowRepository) - ActivityService (server/src/services/activity.service.ts): 1 (activityRepository) - AuthAdminService (server/src/services/auth-admin.service.ts): 1 (userRepository) - PluginService (server/src/services/plugin.service.ts): 1 (pluginRepository) - SystemMetadataService (server/src/services/system-metadata.service.ts): 1 (systemMetadataRepository) - ViewService (server/src/services/view.service.ts): 1 (viewRepository)
Files: server/src/services/activity.service.ts server/src/services/album.service.ts server/src/services/api-key.service.ts server/src/services/asset-file.service.ts server/src/services/asset-media.service.ts server/src/services/asset.service.ts server/src/services/auth-admin.service.ts server/src/services/auth.service.ts and 44 more
Source: facts
multi-writer-table (3)
Table asset is written by 4 groups F-471f7dbe2fc2
The table asset is written by four files located in four separate plan groups: module/asset, module/duplicate, module/stack, and module/trash. (narration: Nemotron 3.5 Lightning)
Evidence
Table asset is written by 4 files in 4 plan groups (and read by 23 files in 22 groups): - module/asset: server/src/repositories/asset.repository.ts - module/duplicate: server/src/repositories/duplicate.repository.ts - module/stack: server/src/repositories/stack.repository.ts - module/trash: server/src/repositories/trash.repository.ts
Files: server/src/repositories/asset.repository.ts server/src/repositories/duplicate.repository.ts server/src/repositories/stack.repository.ts server/src/repositories/trash.repository.ts
Source: facts
Table cluster_group is written by 2 groups F-bdcfcf0f1886
Table cluster_group is written by two files in two plan groups: module/cluster-group and module/person. (narration: Nemotron 3.5 Lightning)
Evidence
Table cluster_group is written by 2 files in 2 plan groups: - module/cluster-group: server/src/repositories/cluster-group.repository.ts - module/person: server/src/repositories/person.repository.ts
Files: server/src/repositories/cluster-group.repository.ts server/src/repositories/person.repository.ts
Source: facts
Table session_sync_checkpoint is written by 2 groups F-e7b889cd5d1e
Table session_sync_checkpoint is written by two files in two plan groups (module/session and module/sync) and read by one file in one group. (narration: Nemotron 3.5 Lightning)
Evidence
Table session_sync_checkpoint is written by 2 files in 2 plan groups (and read by 1 file in 1 group): - module/session: server/src/repositories/session.repository.ts - module/sync: server/src/repositories/sync-checkpoint.repository.ts
Files: server/src/repositories/session.repository.ts server/src/repositories/sync-checkpoint.repository.ts
Source: facts
back-edge (8)
Back-edge module/auth → module/user F-0f4709d1dd31
Module auth imports module user in four files, which violates the allow-list encoded in R4's module order; R4's baseline records this as a known violation. (narration: Nemotron 3.5 Lightning)
Evidence
module/auth imports module/user in 4 files, against the module order R4's allow-list encodes; R4's baseline freezes it as a known violation. - server/src/modules/auth/auth.controller.ts → server/src/modules/user/user.dto.ts - server/src/modules/auth/auth.service.ts → server/src/modules/user/profile-image.ts - server/src/modules/auth/auth.service.ts → server/src/modules/user/user.dto.ts
Files: server/src/modules/auth/auth.controller.ts server/src/modules/auth/auth.service.ts server/src/modules/user/profile-image.ts server/src/modules/user/user.dto.ts
Source: boundaries
Back-edge module/user → module/asset F-d23785863ced
Module user imports module asset in four files, which violates the allow-list encoded in R4's module order; R4's baseline records this as a known violation. (narration: Nemotron 3.5 Lightning)
Evidence
module/user imports module/asset in 4 files, against the module order R4's allow-list encodes; R4's baseline freezes it as a known violation. - server/src/modules/user/user-admin.controller.ts → server/src/modules/asset/asset.dto.ts - server/src/modules/user/user-admin.service.ts → server/src/modules/asset/asset.dto.ts - server/src/modules/user/user-methods.ts → server/src/modules/asset/asset.repository.ts
Files: server/src/modules/asset/asset.dto.ts server/src/modules/asset/asset.repository.ts server/src/modules/user/user-admin.controller.ts server/src/modules/user/user-admin.service.ts server/src/modules/user/user-methods.ts
Source: boundaries
Back-edge module/tag → module/asset F-8dbbbf14f9f3
Three files under module/tag import module/asset, but R4's allow-list does not permit this dependency. R4's baseline marks these as known violations that remain unchanged. (narration: Nemotron 3.5 Lightning)
Evidence
module/tag imports module/asset in 3 files, against the module order R4's allow-list encodes; R4's baseline freezes it as a known violation. - server/src/modules/tag/tag.controller.ts → server/src/modules/asset/asset-ids.response.dto.ts - server/src/modules/tag/tag.service.ts → server/src/modules/asset/asset-ids.response.dto.ts - server/src/modules/tag/tag.service.ts → server/src/modules/asset/asset.util.ts
Files: server/src/modules/asset/asset-ids.response.dto.ts server/src/modules/asset/asset.util.ts server/src/modules/tag/tag.controller.ts server/src/modules/tag/tag.service.ts
Source: boundaries
Back-edge module/plugin → module/workflow F-834724fcbf9e
Two files under module/plugin import module/workflow, but R4's allow-list does not allow this. R4's baseline records these as known violations. (narration: Nemotron 3.5 Lightning)
Evidence
module/plugin imports module/workflow in 2 files, against the module order R4's allow-list encodes; R4's baseline freezes it as a known violation. - server/src/modules/plugin/plugin.dto.ts → server/src/modules/workflow/workflow.ts - server/src/modules/plugin/plugin.service.ts → server/src/modules/workflow/workflow.ts
Files: server/src/modules/plugin/plugin.dto.ts server/src/modules/plugin/plugin.service.ts server/src/modules/workflow/workflow.ts
Source: boundaries
Back-edge module/database-backup → module/maintenance F-6a82ccadb707
One file under module/database-backup imports module/maintenance, which R4's allow-list forbids. R4's baseline records this as a known violation. (narration: Nemotron 3.5 Lightning)
Evidence
module/database-backup imports module/maintenance in 1 files, against the module order R4's allow-list encodes; R4's baseline freezes it as a known violation. - server/src/modules/database-backup/database-backup.controller.ts → server/src/modules/maintenance/maintenance.service.ts
Files: server/src/modules/database-backup/database-backup.controller.ts server/src/modules/maintenance/maintenance.service.ts
Source: boundaries
Back-edge module/version → module/server F-86474a013374
One file under module/version imports module/server, which R4's allow-list disallows. R4's baseline records this as a known violation. (narration: Nemotron 3.5 Lightning)
Evidence
module/version imports module/server in 1 files, against the module order R4's allow-list encodes; R4's baseline freezes it as a known violation. - server/src/modules/version/version.service.ts → server/src/modules/server/server.dto.ts
Files: server/src/modules/server/server.dto.ts server/src/modules/version/version.service.ts
Source: boundaries
Back-edge module/asset → module/person F-bdf320395cbd
One file under module/asset imports module/person, which R4's allow-list forbids. R4's baseline records this as a known violation. (narration: Nemotron 3.5 Lightning)
Evidence
module/asset imports module/person in 1 files, against the module order R4's allow-list encodes; R4's baseline freezes it as a known violation. - server/src/modules/asset/asset-response.dto.ts → server/src/modules/person/person.dto.ts
Files: server/src/modules/asset/asset-response.dto.ts server/src/modules/person/person.dto.ts
Source: boundaries
Back-edge module/auth → module/config F-ddff071a1b0b
One file under module/auth imports module/config, which R4's allow-list disallows. R4's baseline records this as a known violation. (narration: Nemotron 3.5 Lightning)
Evidence
module/auth imports module/config in 1 files, against the module order R4's allow-list encodes; R4's baseline freezes it as a known violation. - server/src/modules/auth/auth.service.ts → server/src/modules/config/config.dto.ts
Files: server/src/modules/auth/auth.service.ts server/src/modules/config/config.dto.ts
Source: boundaries
stack-text (12)
Stack-trace text names moved paths (K4): server/src/services/metadata.service.ts F-49561c40d405
In server/src/services/metadata.service.ts a stack-trace text at line 170 now names the new path after the file was moved to server/src/platform/metadata/metadata.service.ts; two stack-trace reads passed along as text recorded three times. (narration: Nemotron 3.5 Lightning)
Evidence
K4 reported one finding in server/src/services/metadata.service.ts, 3 times (step 51, certificate.json, rungs/R2.json): - moved to server/src/platform/metadata/metadata.service.ts; 2 stack-trace reads passed along as text (line 170); their frames now name the new path (step 51, certificate.json, rungs/R2.json)
Files: server/src/services/metadata.service.ts
Source: certificate; steps 51; certificates certificate.json, rungs/R2.json
Stack-trace text names moved paths (K4): server/src/services/workflow-execution.service.ts F-6ab2e0a4c68b
In server/src/services/workflow-execution.service.ts line 197, a stack-trace text now names the new path after the file moved to server/src/modules/workflow/workflow-execution.service.ts; one stack-trace read passed along as text recorded three times. (narration: Nemotron 3.5 Lightning)
Evidence
K4 reported one finding in server/src/services/workflow-execution.service.ts, 3 times (step 38, certificate.json, rungs/R1.json): - moved to server/src/modules/workflow/workflow-execution.service.ts; 1 stack-trace reads passed along as text (line 197); their frames now name the new path (step 38, certificate.json, rungs/R1.json)
Files: server/src/services/workflow-execution.service.ts
Source: certificate; steps 38; certificates certificate.json, rungs/R1.json
Stack-trace text names moved paths (K4): server/src/services/auth.service.ts F-991694f69a68
Stack-trace text in one file still references the old path of auth.service.ts after its move; the frames now use the new module location. (narration: Nemotron 3.5 Lightning)
Evidence
K4 reported one finding in server/src/services/auth.service.ts, 3 times (step 5, certificate.json, rungs/R1.json): - moved to server/src/modules/auth/auth.service.ts; 1 stack-trace reads passed along as text (line 403); their frames now name the new path (step 5, certificate.json, rungs/R1.json)
Files: server/src/services/auth.service.ts
Source: certificate; steps 5; certificates certificate.json, rungs/R1.json
Stack-trace text names moved paths (K4): server/src/repositories/websocket.repository.ts F-a1ef2439353b
Evidence
K4 reported one finding in server/src/repositories/websocket.repository.ts, 3 times (step 58, certificate.json, rungs/R2.json): - moved to server/src/platform/websocket/websocket.repository.ts; 1 stack-trace reads passed along as text (line 95); their frames now name the new path (step 58, certificate.json, rungs/R2.json)
Files: server/src/repositories/websocket.repository.ts
Source: certificate; steps 58; certificates certificate.json, rungs/R2.json
Stack-trace text names moved paths (K4): server/src/services/person.service.ts F-a3f6cf654776
Two stack-trace reads in person.service.ts reference the moved path after the module relocation. (narration: Nemotron 3.5 Lightning)
Evidence
K4 reported one finding in server/src/services/person.service.ts, 3 times (step 21, certificate.json, rungs/R1.json): - moved to server/src/modules/person/person.service.ts; 2 stack-trace reads passed along as text (line 321); their frames now name the new path (step 21, certificate.json, rungs/R1.json)
Files: server/src/services/person.service.ts
Source: certificate; steps 21; certificates certificate.json, rungs/R1.json
Stack-trace text names moved paths (K4): server/src/services/notification.service.ts F-a9fafedd2e0c
Two stack-trace reads in notification.service.ts now name the moved service path after the module relocation. (narration: Nemotron 3.5 Lightning)
Evidence
K4 reported one finding in server/src/services/notification.service.ts, 3 times (step 18, certificate.json, rungs/R1.json): - moved to server/src/modules/notification/notification.service.ts; 2 stack-trace reads passed along as text (line 88); their frames now name the new path (step 18, certificate.json, rungs/R1.json)
Files: server/src/services/notification.service.ts
Source: certificate; steps 18; certificates certificate.json, rungs/R1.json
Stack-trace text names moved paths (K4): server/src/services/duplicate.service.ts F-ab4403001c97
Evidence
K4 reported one finding in server/src/services/duplicate.service.ts, 3 times (step 10, certificate.json, rungs/R1.json): - moved to server/src/modules/duplicate/duplicate.service.ts; 1 stack-trace reads passed along as text (line 104); their frames now name the new path (step 10, certificate.json, rungs/R1.json)
Files: server/src/services/duplicate.service.ts
Source: certificate; steps 10; certificates certificate.json, rungs/R1.json
Stack-trace text names moved paths (K4): server/src/services/storage-template.service.ts F-ab71273b30ce
Evidence
K4 reported one finding in server/src/services/storage-template.service.ts, 3 times (step 55, certificate.json, rungs/R2.json): - moved to server/src/platform/storage/storage-template.service.ts; 1 stack-trace reads passed along as text (line 263); their frames now name the new path (step 55, certificate.json, rungs/R2.json)
Files: server/src/services/storage-template.service.ts
Source: certificate; steps 55; certificates certificate.json, rungs/R2.json
Stack-trace text names moved paths (K4): server/src/utils/logger.ts F-b5d99548eaf9
One stack-trace in logger.ts reads passed-along text that now names the relocated utility path. (narration: Nemotron 3.5 Lightning)
Evidence
K4 reported one finding in server/src/utils/logger.ts, 3 times (step 49, certificate.json, rungs/R2.json): - moved to server/src/platform/logging/logger.ts; 1 stack-trace reads passed along as text (line 24); their frames now name the new path (step 49, certificate.json, rungs/R2.json)
Files: server/src/utils/logger.ts
Source: certificate; steps 49; certificates certificate.json, rungs/R2.json
Stack-trace text names moved paths (K4): server/src/repositories/metadata.repository.ts F-cd5da954f0ed
Evidence
K4 reported one finding in server/src/repositories/metadata.repository.ts, 3 times (step 51, certificate.json, rungs/R2.json): - moved to server/src/platform/metadata/metadata.repository.ts; 1 stack-trace reads passed along as text (line 133); their frames now name the new path (step 51, certificate.json, rungs/R2.json)
Files: server/src/repositories/metadata.repository.ts
Source: certificate; steps 51; certificates certificate.json, rungs/R2.json
Stack-trace text names moved paths (K4): server/src/services/asset-media.service.ts F-d7f70626dd55
Evidence
K4 reported one finding in server/src/services/asset-media.service.ts, 3 times (step 4, certificate.json, rungs/R1.json): - moved to server/src/modules/asset/asset-media.service.ts; 1 stack-trace reads passed along as text (line 224); their frames now name the new path (step 4, certificate.json, rungs/R1.json)
Files: server/src/services/asset-media.service.ts
Source: certificate; steps 4; certificates certificate.json, rungs/R1.json
Stack-trace text names moved paths (K4): server/src/services/version.service.ts F-dad88f8446e6
Evidence
K4 reported one finding in server/src/services/version.service.ts, 3 times (step 35, certificate.json, rungs/R1.json): - moved to server/src/modules/version/version.service.ts; 1 stack-trace reads passed along as text (line 140); their frames now name the new path (step 35, certificate.json, rungs/R1.json)
Files: server/src/services/version.service.ts
Source: certificate; steps 35; certificates certificate.json, rungs/R1.json
plan-warning (10)
Plan warning (one-file-platform): platform/http-client F-14d96dec2313
The platform/http-client group in plan.yaml contains only one file and no other planned group uses it, so the one-file-platform rule flags it for possible folding. (narration: Nemotron 3.5 Lightning)
Evidence
The plan validator's rule one-file-platform, on the run's plan.yaml (group platform/http-client): platform/http-client holds one file, and no other planned group uses it: consider folding it into the concern or feature it serves
Files: server/src/utils/fetch.ts
Source: validator
Plan warning (one-file-platform): platform/check F-175fe3a4820a
The platform/check group in plan.yaml contains only one file and no other planned group uses it, so the one-file-platform rule flags it for possible folding. (narration: Nemotron 3.5 Lightning)
Evidence
The plan validator's rule one-file-platform, on the run's plan.yaml (group platform/check): platform/check holds one file, and no other planned group uses it: consider folding it into the concern or feature it serves
Files: server/src/commands/schema-check.ts
Source: validator
Plan warning (singleton-group): module/machine-learning F-545a4b88a62f
Rule singleton-group flags module/machine-learning because the plan holds only one file in that group. (narration: Nemotron 3.5 Lightning)
Evidence
The plan validator's rule singleton-group, on the run's plan.yaml (group module/machine-learning): module/machine-learning holds one file
Files: server/src/repositories/machine-learning.repository.ts
Source: validator
Plan warning (unsupported-merge): module/auth F-692ad4017c11
Plan rule unsupported-merge reports that module/auth has a draft group "grant" with no shared word, edge, table or route. (narration: Nemotron 3.5 Lightning)
Evidence
The plan validator's rule unsupported-merge, on the run's plan.yaml (group module/auth): module/auth takes draft group "grant" (src/commands/grant-admin.ts): no shared word, edge, table or route
Source: validator
Plan warning (platform-feature): platform/move F-6dc722024105
Rule platform-feature on group platform/move notes that move.repository.ts writes to table move_history, classifying it as a feature rather than plumbing. (narration: Nemotron 3.5 Lightning)
Evidence
The plan validator's rule platform-feature, on the run's plan.yaml (group platform/move): src/repositories/move.repository.ts writes tables (move_history): a feature, not plumbing
Files: server/src/repositories/move.repository.ts
Source: validator
Plan warning (one-file-platform): platform/move F-af06f12438b8
Rule one-file-platform on group platform/move flags that the group holds a single file used only by platform/storage, suggesting a potential fold. (narration: Nemotron 3.5 Lightning)
Evidence
The plan validator's rule one-file-platform, on the run's plan.yaml (group platform/move): platform/move holds one file, and only platform/storage uses it: consider folding it there
Files: server/src/repositories/move.repository.ts
Source: validator
Plan warning (platform-feature): platform/bootstrap F-e1c975dc8064
Rule platform-feature on group platform/bootstrap notes that app.controller.ts serves routes, classifying it as a feature rather than plumbing. (narration: Nemotron 3.5 Lightning)
Evidence
The plan validator's rule platform-feature, on the run's plan.yaml (group platform/bootstrap): src/controllers/app.controller.ts serves routes: a feature, not plumbing
Files: server/src/controllers/app.controller.ts
Source: validator
Plan warning (impure-shared): shared/shared F-e3b63d08f742
Rule impure-shared on group shared/shared flags that src/services/api.service.ts is a service, while shared/ should hold only pure code. (narration: Nemotron 3.5 Lightning)
Evidence
The plan validator's rule impure-shared, on the run's plan.yaml (group shared/shared): src/services/api.service.ts is a service; shared/ holds pure code only
Files: server/src/services/api.service.ts
Source: validator
Plan warning (one-file-platform): platform/transcoding F-fa4aa2cae116
Evidence
The plan validator's rule one-file-platform, on the run's plan.yaml (group platform/transcoding): platform/transcoding holds one file, and no other planned group uses it: consider folding it into the concern or feature it serves
Files: server/src/services/transcoding.service.ts
Source: validator
Plan warning (unsupported-merge): module/auth F-ff0edb54f50f
Evidence
The plan validator's rule unsupported-merge, on the run's plan.yaml (group module/auth): module/auth takes draft group "password-login" (src/commands/password-login.ts): no shared word, edge, table or route
Source: validator
old-path-in-docs (3)
Docs name old paths (K4): docs/docs/developer/architecture.mdx F-68921a0c7282
Evidence
K4 reported 3 distinct findings in docs/docs/developer/architecture.mdx, 138 times (steps 1–40, 42–45, 49–59, certificate.json, rungs/R1.json, rungs/R2.json): - line 60: 'src/repositories' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/activity.repository.ts (moved to server/src/modules/activity/activity.repository.ts) (steps 1–6, 9–22, 24–31, 33–39, 42–43, 45, 49–56, 58, certificate.json, rungs/R1.json, rungs/R2.json) - line 60: 'src/services' is the directory server/src/services, whose contents change with the move of server/src/services/activity.service.spec.ts (moved to server/src/modules/activity/activity.service.spec.ts) (steps 1–13, 15–38, 44, 50–51, 54–57, 59, certificate.json, rungs/R1.json, rungs/R2.json) - line 64: 'src/controllers' is the directory server/src/controllers, whose contents change with the move of server/src/controllers/activity.controller.spec.ts (moved to server/src/modules/activity/activity.controller.spec.ts) (steps 1–13, 15–18, 20–34, 36–38, 40, 54, certificate.json, rungs/R1.json, rungs/R2.json)
Files: docs/docs/developer/architecture.mdx
Source: certificate; steps 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59; certificates certificate.json, rungs/R1.json, rungs/R2.json
Docs name old paths (K4): .github/pull_request_template.md F-8759fa26d236
The pull request template references three directories (src/services, src/repositories, and again src/services) whose contents change as files move to module folders, recorded 146 times across steps and rung JSON files. (narration: Nemotron 3.5 Lightning)
Evidence
K4 reported 3 distinct findings in .github/pull_request_template.md, 146 times (steps 1–39, 42–45, 49–59, certificate.json, rungs/R1.json, rungs/R2.json): - line 36: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/activity.service.spec.ts (moved to server/src/modules/activity/activity.service.spec.ts) (steps 1–13, 15–38, 44, 50–51, 54–57, 59, certificate.json, rungs/R1.json, rungs/R2.json) - line 37: 'src/repositories/' is the directory server/src/repositories, whose contents change with the move of server/src/repositories/activity.repository.ts (moved to server/src/modules/activity/activity.repository.ts) (steps 1–6, 9–22, 24–31, 33–39, 42–43, 45, 49–56, 58, certificate.json, rungs/R1.json, rungs/R2.json) - line 37: 'src/services/' is the directory server/src/services, whose contents change with the move of server/src/services/activity.service.spec.ts (moved to server/src/modules/activity/activity.service.spec.ts) (steps 1–13, 15–38, 44, 50–51, 54–57, 59, certificate.json, rungs/R1.json, rungs/R2.json)
Files: .github/pull_request_template.md
Source: certificate; steps 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59; certificates certificate.json, rungs/R1.json, rungs/R2.json
Docs name old paths (K4): docs/docs/features/supported-formats.md F-b033494c9d5b
Docs reference the old path for mime-types.ts in three locations; the refactoring left the outdated path intact in documentation. (narration: Nemotron 3.5 Lightning)
Evidence
K4 reported one finding in docs/docs/features/supported-formats.md, 3 times (step 59, certificate.json, rungs/R2.json): - line 6: '//github.com/immich-app/immich/blob/main/server/src/utils/mime-types.ts' is the old path of server/src/utils/mime-types.ts (moved to server/src/shared/mime-types.ts) (step 59, certificate.json, rungs/R2.json)
Files: docs/docs/features/supported-formats.md
Source: certificate; steps 59; certificates certificate.json, rungs/R2.json
tool-config-added (2)
Inert tool config added (K1): server/.dependency-cruiser.json F-06567c18470b
K1 added a dependency-cruiser config at the package root that proves inert: no tsconfig program loads it, no reference references it, no published package packs it, and no other file names or globs it; CI path filters still trigger its jobs. (narration: Nemotron 3.5 Lightning)
Evidence
K1 reported one finding in server/.dependency-cruiser.json, 2 times (certificate.json, rungs/R4.json): - added at the package root and proven inert: in no tsconfig program, loaded by no reference, packed by no published package, named or globbed by no other file, and the tool runs nowhere; CI path filters match it, so it triggers their jobs: 'server/**' in .github/workflows/docker.yml (line 45), 'serv… (certificate.json, rungs/R4.json)
Files: server/.dependency-cruiser.json
Source: certificate; certificates certificate.json, rungs/R4.json
Inert tool config added (K1): server/.dependency-cruiser-known-violations.json F-d75862632092
K1 added a dependency-cruiser-known-violations config at the package root that proves inert: no tsconfig program loads it, no reference references it, no published package packs it, and no other file names or globs it; CI path filters still trigger its jobs. (narration: Nemotron 3.5 Lightning)
Evidence
K1 reported one finding in server/.dependency-cruiser-known-violations.json, 2 times (certificate.json, rungs/R4.json): - added at the package root and proven inert: in no tsconfig program, loaded by no reference, packed by no published package, named or globbed by no other file, and the tool runs nowhere; CI path filters match it, so it triggers their jobs: 'server/**' in .github/workflows/docker.yml (line 45), 'serv… (certificate.json, rungs/R4.json)
Files: server/.dependency-cruiser-known-violations.json
Source: certificate; certificates certificate.json, rungs/R4.json
coverage-scope (1)
Coverage globs match other files (K4): server/test/vitest.config.mjs F-800da5f4439a
K4 reported six distinct coverage-glob findings in the vitest config that match 122 steps across certificate.json and rung JSON files, where globs such as 'src/services/**' change matches when files move to module folders. (narration: Nemotron 3.5 Lightning)
Evidence
K4 reported 6 distinct findings in server/test/vitest.config.mjs, 122 times (steps 1–13, 15–39, 44–51, 54–57, 59, certificate.json, rungs/R1.json, rungs/R2.json): - line 19: 'src/services/**' is the glob server/src/services/** whose matches change (2 moved files, e.g. server/src/services/activity.service.spec.ts -> server/src/modules/activity/activity.service.spec.ts) of server/src/services/activity.service.spec.ts (moved to server/src/modules/activity/activit… (steps 1–13, 15–38, 44, 50–51, 54–57, 59, certificate.json, rungs/R1.json, rungs/R2.json) - line 21: 'src/services/*.spec.ts' is the glob server/src/services/*.spec.ts whose matches change (1 moved files, e.g. server/src/services/activity.service.spec.ts -> server/src/modules/activity/activity.service.spec.ts) of server/src/services/activity.service.spec.ts (moved to server/src/modules/ac… (steps 1–5, 7–12, 15–21, 23–37, 44, 50–51, 55, 57, 59, certificate.json, rungs/R1.json, rungs/R2.json) - line 19: 'src/utils/**' is the glob server/src/utils/** whose matches change (1 moved files, e.g. server/src/utils/asset.util.ts -> server/src/modules/asset/asset.util.ts) of server/src/utils/asset.util.ts (moved to server/src/modules/asset/asset.util.ts) [config at test.coverage.include]; coverage… (steps 4, 7–8, 10, 15, 24, 29, 31, 34, 38–39, 44–51, 59, certificate.json, rungs/R1.json, rungs/R2.json) - line 24: 'src/services/index.ts' is the old path of server/src/services/index.ts (moved to server/src/platform/registry/services/index.ts) [config at test.coverage.exclude]; coverage now measures a different file set (no coverage threshold in this file, so no gate changes) (step 54, certificate.json, rungs/R2.json) - line 19: 'src/cores/**' is the glob server/src/cores/** whose matches change (2 moved files, e.g. server/src/cores/storage.core.spec.ts -> server/src/platform/storage/storage.core.spec.ts) of server/src/cores/storage.core.spec.ts (moved to server/src/platform/storage/storage.core.spec.ts) [config a… (step 55, certificate.json, rungs/R2.json) - line 22: 'src/services/api.service.ts' is the old path of server/src/services/api.service.ts (moved to server/src/shared/api.service.ts) [config at test.coverage.exclude]; coverage now measures a different file set (no coverage threshold in this file, so no gate changes) (step 59, certificate.json, rungs/R2.json)
Files: server/test/vitest.config.mjs
Source: certificate; steps 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 44, 45, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 59; certificates certificate.json, rungs/R1.json, rungs/R2.json
default-root-dir (1)
Emit without a rootDir (K7): e2e/tsconfig.json F-966da7d59056
The e2e tsconfig emits into e2e/dist without specifying a rootDir, so TypeScript uses its default of e2e for both the input and output, a situation recorded 67 times across steps and rung files. (narration: Nemotron 3.5 Lightning)
Evidence
K7 reported one finding in e2e/tsconfig.json, 67 times (steps 1–62, certificate.json, rungs/R1.json, rungs/R2.json, rungs/R3.json, rungs/R4.json): - emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e (steps 1–62, certificate.json, rungs/R1.json, rungs/R2.json, rungs/R3.json, rungs/R4.json)
Files: e2e/tsconfig.json
Source: certificate; steps 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62; certificates certificate.json, rungs/R1.json, rungs/R2.json, rungs/R3.json, rungs/R4.json
opaque-dynamic-load (1)
A module loaded by a computed path (K4): server/src/repositories/database.repository.ts F-70d9e19108a1
Evidence
K4 reported one finding in server/src/repositories/database.repository.ts, 66 times (steps 1–62, certificate.json, rungs/R1.json, rungs/R2.json, rungs/R3.json): - line 510: import(filePath) loads a module by a path K4 can't evaluate (steps 1–62, certificate.json, rungs/R1.json, rungs/R2.json, rungs/R3.json)
Files: server/src/repositories/database.repository.ts
Source: certificate; steps 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62; certificates certificate.json, rungs/R1.json, rungs/R2.json, rungs/R3.json
ungated-coverage-glob (1)
Coverage globs match other files, with no gate: server/test/vitest.config.mjs F-89500b32bdee
The vitest config contains six distinct coverage-glob findings that match 107 steps, but no threshold or check gates the coverage, so the globs match differently for moved service and utility files without enforcing any rule. (narration: Nemotron 3.5 Lightning)
Evidence
The run recorded 6 distinct findings in server/test/vitest.config.mjs, 107 times (steps 1–13, 15–39, 44–51, 54–57, 59): - server/test/vitest.config.mjs line 19 [test.coverage.include]: coverage glob 'src/services/**' (server/src/services/**) matches differently for server/src/services/activity.service.ts (moving to server/src/modules/activity/activity.service.ts), server/src/services/activity.service.spec.ts (moving t… (steps 1–13, 15–38, 44, 50–51, 54–57, 59) - server/test/vitest.config.mjs line 21 [test.coverage.exclude]: coverage glob 'src/services/*.spec.ts' (server/src/services/*.spec.ts) matches differently for server/src/services/activity.service.spec.ts (moving to server/src/modules/activity/activity.service.spec.ts); nothing in server/test/vitest.… (steps 1–5, 7–12, 15–21, 23–37, 44, 50–51, 55, 57, 59) - server/test/vitest.config.mjs line 19 [test.coverage.include]: coverage glob 'src/utils/**' (server/src/utils/**) matches differently for server/src/utils/asset.util.ts (moving to server/src/modules/asset/asset.util.ts); nothing in server/test/vitest.config.mjs gates coverage (no threshold or check… (steps 4, 7–8, 10, 15, 24, 29, 31, 34, 38–39, 44–51, 59) - server/test/vitest.config.mjs line 24 [test.coverage.exclude]: coverage glob 'src/services/index.ts' matches differently for server/src/services/index.ts (moving to server/src/platform/registry/services/index.ts); nothing in server/test/vitest.config.mjs gates coverage (no threshold or check-covera… (step 54) - server/test/vitest.config.mjs line 19 [test.coverage.include]: coverage glob 'src/cores/**' (server/src/cores/**) matches differently for server/src/cores/storage.core.ts (moving to server/src/platform/storage/storage.core.ts), server/src/cores/storage.core.spec.ts (moving to server/src/platform/st… (step 55) - server/test/vitest.config.mjs line 22 [test.coverage.exclude]: coverage glob 'src/services/api.service.ts' matches differently for server/src/services/api.service.ts (moving to server/src/shared/api.service.ts); nothing in server/test/vitest.config.mjs gates coverage (no threshold or check-coverage… (step 59)
Files: server/test/vitest.config.mjs
Source: run; steps 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 44, 45, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 59
Table access
63 table names × the 32 groups whose files touch them, from the planner's facts at the base commit (Kysely, Prisma and Drizzle call shapes), mapped through the plan's placements. 3 tables are written by files of several groups: asset (module/asset, module/duplicate, module/stack, module/trash); cluster_group (module/cluster-group, module/person); session_sync_checkpoint (module/session, module/sync). The findings log records 3 multi-writer-table findings, not fixed.
Rows are tables, ordered under the first group that writes them; columns are groups in plan order. The facts read table names from query call shapes. Under planner rules 1 (immich's recorded plan) a common table expression's alias (.with('cte', …)) shows up as a read-only table; rules 2 (S8) leave out an alias read inside the query that declares it.
Table view
| Table | Written by | Read only by |
|---|---|---|
activity | module/activity | platform/access |
album | module/album | module/shared-link module/sync platform/access platform/database |
album_asset | module/album | module/asset module/download module/map module/shared-link module/sync platform/access platform/database |
album_user | module/album | module/shared-link module/sync platform/access platform/database |
api_key | module/api-key | – |
agg | – | module/asset |
⚠ asset | module/asset module/duplicate module/stack module/trash | module/activity module/album module/download module/integrity module/library module/map module/memory module/person module/search module/shared-link module/sync module/user module/video-stream module/view module/workflow platform/access platform/database platform/move |
asset_audio | module/asset | module/video-stream |
asset_edit | module/asset | platform/database |
asset_exif | module/asset | module/album module/download module/duplicate module/library module/map module/person module/search module/shared-link module/stack module/sync module/user module/video-stream module/workflow platform/database |
asset_file | module/asset | module/integrity module/memory platform/access platform/database |
asset_job_status | module/asset | module/person |
asset_keyframe | module/asset | module/video-stream |
asset_metadata | module/asset | – |
asset_video | module/asset | module/video-stream |
cities | – | module/asset |
cte | – | module/asset module/duplicate module/search |
res | – | module/asset |
today | – | module/asset |
⚠ cluster_group | module/cluster-group module/person | – |
cluster_group_request | module/cluster-group | platform/access |
duplicates | – | module/duplicate |
integrity_report | module/integrity | – |
library | module/library | platform/database |
geodata_places | module/map | module/search |
naturalearth_countries | module/map | – |
memory | module/memory | module/sync platform/access |
memory_asset | module/memory | – |
notification | module/notification | platform/access |
asset_ocr | module/ocr | – |
ocr_search | module/ocr | platform/database |
partner | module/partner | module/sync platform/access |
asset_face | module/person | module/memory module/search platform/access platform/database |
face_search | module/person | module/search |
mapping | – | module/person |
person | module/person | module/integrity module/memory module/search platform/access platform/database |
person_group | module/person | – |
person_user | module/person | platform/access |
shared | – | module/person |
plugin | module/plugin | module/workflow |
plugin_method | module/plugin | module/workflow |
smart_search | module/search | module/asset module/duplicate platform/database |
session | module/session | platform/access |
⚠ session_sync_checkpoint | module/session module/sync | – |
shared_link | module/shared-link | module/album platform/access |
shared_link_asset | module/shared-link | platform/access |
stack | module/stack | module/asset platform/access |
system_metadata | module/system-metadata | – |
created_tag | – | module/tag |
descendants | – | module/tag |
tag | module/tag | module/asset module/duplicate module/stack platform/access platform/database |
tag_asset | module/tag | module/asset module/duplicate module/stack platform/database |
tag_closure | module/tag | platform/database |
user | module/user | module/activity module/album module/api-key module/asset module/cluster-group module/partner module/person module/search module/session module/shared-link module/sync platform/access platform/database |
user_metadata | module/user | – |
version_history | module/version | – |
video_stream_segment | module/video-stream | – |
video_stream_session | module/video-stream | – |
video_stream_variant | module/video-stream | – |
workflow | module/workflow | platform/access |
workflow_log | module/workflow | – |
workflow_step | module/workflow | – |
move_history | platform/move | – |
Cost
This run: the plan cost $0.1998 when it was recorded; planner spend during the run $0.0000 (budget run s6, mode auto); the findings narration $0.0010 in 2 calls of Nemotron 3.5 Lightning (thinking off) (replayed, $0 now). Replaying the plan and the narration from the committed cassettes costs $0.
The whole project's spend on Nebius Token Factory, from the gateway's ledger (budget/ledger.jsonl): $24.3980 of the $50.00 hard cap. The lines marked reconciled bring the ledger to the Nebius console bill: what Token Factory billed differently from the gateway's count (a lost call, cached input at its cached price, calls it didn't bill). The G3 runs (opencode with Nemotron 3 Super and, in S9, with Ultra: the generic-agent baseline) account for $8.9572 of it. The runs tf-probes, g1, g3-smoke, g3-immich, g3-mcphub, g3u-smoke, g3u-immich, g3u-immich-persistent are carried over from the gate spike as one line each.
Table view
| Budget run | Paid calls | Cost | Cap | Models | Notes |
|---|---|---|---|---|---|
tf-probes | 82 | $0.0250 | – | – | carried over from spike/gates:spike/llm/ledger.jsonl: 82 paid calls, $0.0250 |
g1 | 53 | $1.7552 | – | – | carried over from spike/gates:spike/llm/ledger.jsonl: 53 paid calls, $1.7042 reconciled, $0.0510: Nebius console 2026-10-14 21:31 UTC ($9.31) vs ledger ($9.259): Super output +58k and input +8k tokens are one G1 call lost to 'fetch failed' at 2026-10-02T13:46:58Z (estimate $0.0601), which the spike gateway booked at $0 and Token Factory billed |
g3-smoke | 6 | $0.0143 | – | – | carried over from spike/gates:spike/llm/ledger.jsonl: 6 paid calls, $0.0143 |
g3-immich | 251 | $4.9333 | – | – | carried over from spike/gates:spike/llm/ledger.jsonl: 251 paid calls, $4.9333 |
g3-mcphub | 62 | $0.8603 | – | – | carried over from spike/gates:spike/llm/ledger.jsonl: 62 paid calls, $0.8603 |
s5 | 17 | $1.2877 | $3.00 | Nemotron 3 Ultra | |
s6 | 38 | $0.4343 | $3.00 | Nemotron 3 Ultra, Nemotron 3.5 Lightning | |
s7 | 12 | $1.1213 | $5.00 | Nemotron 3 Ultra | |
s8 | 3 | $0.1114 | $3.00 | Nemotron 3 Ultra | |
s8b | 70 | $3.7268 | $7.00 | Nemotron 3 Ultra, Nemotron 3.5 Super VL | reconciled, −$0.2723: Nebius console export, 2026-09-24 to 10-24 (corupta, 2026-10-24): $24.40 billed; Ultra's cached input billed at its cached price, $0.12/M (from 2026-10-20 20:01 UTC at the latest; S7's hits on 2026-10-17 were billed in full), which the ledger charged at $1.00/M: 252,416 tokens; Super VL's cached input at $0.06/M, which the ledger charged at $0.30/M: 208,896 tokens reconciled, $0.0000: Nebius console export, 2026-09-24 to 10-24 (corupta, 2026-10-24): $24.40 billed; the Super VL call stopped at 2026-10-20T20:54Z leaves no trace in the bill (Super VL's billed input, 0.57M, is the 200 responses' 565,968 uncached prompt tokens; billed without a cache hit, its ~11k-token prompt would have made it 0.58M; sub-cent either way): its $0.0387 reservation settles at $0 |
s8c | 3 | $0.5941 | $3.00 | Nemotron 3.5 Super VL | reconciled, −$0.7033: Nebius console export, 2026-09-24 to 10-24 (corupta, 2026-10-24): $24.40 billed; Super VL's cached input at $0.06/M, which the ledger charged at $0.30/M: 6,528 tokens; the non-streamed call cut at 600 s (HTTP 504, 2026-10-21T00:31Z), booked at its $0.7017 estimate, was not billed (Super VL's billed output, 9.09M, matches its 200 responses' 9,092,987 tokens to the console's 0.01M) |
s8d | 30 | $6.3850 | $10.00 | Nemotron 3.5 Super VL | reconciled, −$0.0345: Nebius console export, 2026-09-24 to 10-24 (corupta, 2026-10-24): $24.40 billed; Super VL's cached input at $0.06/M, which the ledger charged at $0.30/M: 143,616 tokens |
g3u-smoke | 7 | $0.0570 | – | – | carried over from spike/g3-ultra:spike/llm/ledger.jsonl: 7 paid calls, $0.0762 reconciled, −$0.0191: Nebius console export, 2026-09-24 to 10-24 (corupta, 2026-10-24): $24.40 billed; Ultra's cached input billed at its cached price, $0.12/M (from 2026-10-20 20:01 UTC at the latest; S7's hits on 2026-10-17 were billed in full), which the ledger charged at $1.00/M: 21,760 tokens |
g3u-immich | 49 | $0.5456 | – | – | carried over from spike/g3-ultra:spike/llm/ledger.jsonl: 49 paid calls, $1.8630 reconciled, −$1.3174: Nebius console export, 2026-09-24 to 10-24 (corupta, 2026-10-24): $24.40 billed; Ultra's cached input billed at its cached price, $0.12/M (from 2026-10-20 20:01 UTC at the latest; S7's hits on 2026-10-17 were billed in full), which the ledger charged at $1.00/M: 1,497,088 tokens |
g3u-immich-persistent | 170 | $2.5468 | – | – | carried over from spike/g3-ultra:spike/llm/ledger.jsonl: 170 paid calls, $11.7612 reconciled, −$9.2144: Nebius console export, 2026-09-24 to 10-24 (corupta, 2026-10-24): $24.40 billed; Ultra's cached input billed at its cached price, $0.12/M (from 2026-10-20 20:01 UTC at the latest; S7's hits on 2026-10-17 were billed in full), which the ledger charged at $1.00/M: 10,470,912 tokens |
| total | 853 | $24.3980 | $50.00 |
A/B: the same task, a generic agent
G3 gave opencode 1.18.34 with NVIDIA Nemotron 3 Super on Nebius Token Factory the same restructure, with a fixed prompt and no human input. Its branches were certified in session S4 by our checker, the version before this run's (certificate format 1; K7 came later). The same agent on Nemotron 3 Ultra, the model ac plans with (S9), is on the site's A/B page: its single-shot changed nothing, and its persistent run hit its $12 cap in turn 1 with every import of the moved files dangling.
immich server/ @ 02063972e8
Target: immich @ 02063972e8. Base: tsc 0 errors; vitest 105 test files, 2,337 cases (docs/gates.md, G2); the OpenAPI spec is 947,932 bytes (the certificates' K8).
A green test count is not proof. On immich, the branch g3/opencode-super (opencode + Nemotron 3 Super, single-shot) still passes all 2,337 of the base's test cases, while 66 of its 171 test files fail to load and tsc reports 1,680 errors (its certificate: K6, K8).
| ac, the full ladder (ours) | ac, one R1-style step (ours) | opencode + Nemotron 3 Super, single-shot | opencode + Nemotron 3 Super, persistent | Source | |
|---|---|---|---|---|---|
| Who | ac architecture-cleaner: Nemotron 3 Ultra plans, the executor moves, the certifier checks every commit | ac architecture-cleaner's executor, one move of 292 of the 302 controllers, services, repositories and DTOs (the 3 index.ts barrels and the barrel's spec, two process.cwd() specs, the three import.meta.dirname users and services/shared/user-methods.ts stay) | opencode 1.18.34, NVIDIA Nemotron 3 Super on Nebius Token Factory, one `opencode run` with the fixed prompt | the same agent; whenever it stopped, an automated reply reported typecheck and test results and asked it to continue | |
| Branch | ac/s6-ladder (S6)run report | ac/s3-r1 (S3) | g3/opencode-super (G3 (S2)) | g3/opencode-super-persistent (G3 (S2)) | |
| Outcome | Completed unattended: 63 commits, each certified on its first attempt; every rung and the whole PR PASS with the oracles | One certified commit | Stopped after 169 s and asked the user to run its sed commands | Stopped by the $5 budget cap during turn 5, after 33 min | docs/sessions/s6.md; docs/sessions/s3.md; docs/gates.md (G3 table) |
| What the diff is | 367 files moved into 38 modules, 20 platform folders and shared/; 2,474 specifier edits in 515 files; 2 boundary-rule files added and proven inert; every other byte identical certificate K1: 367 moved, 180 edited in place, 2 added (2 inert tool configs), 0 deleted | 292 files moved into 100 modules; 1,445 specifier edits in 386 files; every other byte identical certificate K1: 292 moved, 152 edited in place, 0 added, 0 deleted | 211 files copied into src/features/, originals kept; every rewritten import corrupted certificate K1: 0 moved, 0 edited in place, 211 added (31 of them copies of files that still exist), 0 deleted | 297 moved, 562 TypeScript files copied (a src.backup/ tree), 68 edited, 12 Python scripts left behind certificate K1: 365 moved, 0 edited in place, 614 added (291 of them copies of files that still exist), 0 deleted | docs/storyboard.md (lead table); docs/gates.md (G3 table); runs/immich-ladder/certificate.txt (K1, K2) certificate line: each arm's certificate, K1 |
| tsc errors (base: 0) | 0 certificate K8: tsc exit 0 | 0 certificate K8: tsc exit 0 | 1,680 certificate K8: tsc exited 1 on head (1,680 diagnostics), 0 on base | 768 (nest build: 4,675) certificate K8: tsc exited 1 on head (768 diagnostics), 0 on base | docs/storyboard.md (lead table); docs/gates.md (G3 table); runs/immich-ladder/certificate.txt (K8) certificate line: each arm's certificate, K8 tsc |
| Unit suite (base: 105 files, 2,337 cases) | 105/105 files, 2,337/2,337 cases certificate K8: unit 105/105 files and 2,337/2,337 cases equal to base (head: 105/105 files load, 2,337 passed, 0 failed, 0 skipped) | 105/105 files, 2,337/2,337 cases certificate K8: unit 105/105 files and 2,337/2,337 cases equal to base (head: 105/105 files load, 2,337 passed, 0 failed, 0 skipped) | 2,337/2,337 cases pass, but 66 of 171 spec files never load certificate K8: unit 105/171 files and 2,337/2,337 cases equal to base (head: 105/171 files load, 2,337 passed, 0 failed, 0 skipped) | 5/105 files, 52 cases certificate K8: unit 5/105 files and 52/2,337 cases equal to base (head: 5/105 files load, 52 passed, 0 failed, 0 skipped) | docs/storyboard.md (lead table); runs/immich-ladder/certificate.txt (K6, K8) certificate line: each arm's certificate, K8 unit |
| OpenAPI spec (base: 947,932 bytes) | byte-identical certificate K8: openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes) | byte-identical certificate K8: openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes) | byte-identical: the copies are dead code certificate K8: openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes), but 1 step failed on head | not produced: sync-open-api crashes certificate K8: openapi produced nothing | docs/storyboard.md (lead table); docs/gates.md (G3 table); runs/immich-ladder/certificate.txt (K8) certificate line: each arm's certificate, K8 openapi |
| Non-specifier lines changed in moved or copied files | 0 (K2) certificate K2: 2474 specifier spans changed in 515 files; every other byte identical | 0 (K2) certificate K2: 1445 specifier spans changed in 386 files; every other byte identical | 1,104 (2.4%) certificate K2: no file paired with a base file changed, so there was nothing to compare; K1 counts the 211 added files | 0, plus 926 in modified files certificate K2: no file paired with a base file changed, so there was nothing to compare; K1 counts the 614 added files | G3 arms: docs/gates.md (G3 table, the gate's line diff); ac arms: the certificates' K2 certificate line: each arm's certificate, K2 |
| New dangling specifiers | 0 (K3a, K3b, K3c: every site resolves to its base target) certificate K3b: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) | 0 (K3a, K3b, K3c) certificate K3b: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) | 0: its 552 rewritten imports are syntax errors, not specifiers, so the analyzer counts none; the rest still import the originals certificate K3b: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) | 2,923 certificate K3b: vitest 4.1.11: 4548 violations (2802 dangling, 131 retargeted, 1615 dangling in added files) | G3 arms: docs/gates.md (G3 table, the gate's TypeScript analyzer); ac arms: the certificates' K3a–K3c certificate line: each arm's certificate, K3b |
| Behavior changes no unit test catches | None found: K4 finds no moved file whose location reaches behavior; 12 logged stack traces now name the new path (K4 findings) certificate K4: 367 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (13 findings in docs, comments or ungated coverage settings) | None found (K4; 11 logged stack traces now name the new path) certificate K4: 292 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (9 findings in docs, comments or ungated coverage settings) | 0 claims survived review: the copies are dead code certificate K4: 0 path-exposing uses in moved files (and 3 in added files), 0 computed paths into changed directories, 0 old paths in code/config (0 in coverage settings) | 2 survived review: database.repository.ts and config.repository.ts moved but kept their import.meta.dirname paths (migrations, helmet.json) certificate K4: 12 path-exposing uses in moved files (and 15 in added files), 2 computed paths into changed directories, 52 old paths in code/config (0 in coverage settings) | G3 arms: docs/gates.md (Addendum: G3 review); ac arms: the certificates' K4 certificate line: each arm's certificate, K4 |
| LLM cost | $0.1998 for the plan when recorded (Nemotron 3 Ultra) and $0.0010 for the findings narration (Nemotron 3.5 Lightning); a replay costs $0 | $0 | $0.30 (0.98M input tokens, 51 calls) | $4.63 (15.3M input tokens, 200 calls) | runs/immich-ladder/run.json (cost); docs/sessions/s6.md; docs/storyboard.md (lead table); docs/gates.md (G3 table) |
| Time | 1 h 55 m wall time on a quiet machine, certificates included | executor 14 s; certificate: static checks 124 s, oracles 111 s | 169 s | 33 min | docs/sessions/s6.md; docs/storyboard.md (lead table) |
ac certify verdict | PASS (with oracles) | PASS (with oracles) | FAIL (with oracles) failing: K1, K3a, K4, K6, K8 | FAIL (with oracles) failing: K1, K3a, K3b, K3c, K4, K6, K8 | the certificate files; one row per check below |
| K0 Envelope | PASS | PASS | PASS | PASS | |
| K1 Move-set integrity | PASS | PASS | FAIL | FAIL | |
| K2 Byte-span confinement | PASS | PASS | PASS nothing to compare: K1 counts the 211 added files | PASS nothing to compare: K1 counts the 614 added files | |
| K3a Resolution identity under TypeScript | PASS | PASS | FAIL | FAIL | |
| K3b Resolution identity under the test runner | PASS | PASS | PASS | FAIL | |
| K3c Resolution identity under the runtime | PASS | PASS | PASS | FAIL | |
| K4 Location scan | PASS | PASS | FAIL | FAIL | |
| K6 Test inventory | PASS | PASS | FAIL | FAIL | |
| K7 Emit layout | PASS | not checked: K7 came after this certificate (S6) | not checked: K7 came after this certificate (S6) | not checked: K7 came after this certificate (S6) | |
| K8 Oracles on the commit | PASS | PASS | FAIL | FAIL |
Where the gate's numbers and the certificates' differ
- What the diff is: The gate counted moved and copied files with git's rename and copy detection at 50% similarity (spike/g3/measure-diff.mjs). The certifier pairs a head file with a base file only when their bytes are equal outside specifier spans, so a moved, copied or edited file with any other change is an added file to it, and only exact copies count as copies. The persistent branch's certified moves are its base files paired with their untouched copies in src.backup/ (the certificate's pathMap); the files it moved into src/features/ or edited are among the added.
- Non-specifier lines changed in moved or copied files: The gate diffed each renamed or copied file against its original line by line. K2 compares only the files the certifier pairs with a base file, and those differ at most in specifier spans by construction, so the edits inside copies and rewrites are not K2's to see: those files are K1's added files, and K1 fails.
- New dangling specifiers: The gate counted import sites its TypeScript analyzer could not resolve at the head, leaving out specifiers already unresolved at base. K3b resolves every site the way the test runner does (vitest) and counts the sites of kept or moved files that no longer reach their base target (dangling, retargeted) apart from unresolved sites in added files; K3a and K3c do the same under TypeScript and the runtime.
- Behavior changes no unit test catches: K4 fails closed: it lists every use of a moved file's location, computed path into a changed directory and old path in code or config that it can't prove safe, so its counts are hazards, not confirmed breaks. On the persistent branch it flags both files whose breaks the G3 review confirmed by hand (database.repository.ts and config.repository.ts, as added files: their certified pairs are the src.backup/ copies).
The single-shot branch's restructure is a dead copy tree: nothing imports its 211 copies, so the tests still run against the original files. (docs/gates.md (G3 table; Addendum: G3 review))
The persistent run is the reference baseline, because single-shot runs quit within 3 minutes. (docs/gates.md (Plan corrections, item 3))
The certificates
ac, the full ladder: PASS sha256:9a5b2404631c…
ac certify 02063972e8..c4be040b57 (package root server/), profile immich
trees: 424df72c34..4e457bb4e8
pathMap: 367 moves, 180 edited in place, 2917 unchanged, 2 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 367 moved files (0.2 s)
PASS K1 Move-set integrity: 367 moves, 180 files edited in place, 2 inert tool configs added, nothing else added or deleted (8.3 s)
finding (tool-config-added) server/.dependency-cruiser-known-violations.json: added at the package root and proven inert: in no tsconfig program, loaded by no reference, packed by no published package, named or globbed by no other file, and the tool runs nowhere; CI path filters match it, so it triggers their jobs: 'server/**' in .github/workflows/docker.yml (line 45), 'server/**' in .github/workflows/test.yml (line 46)
finding (tool-config-added) server/.dependency-cruiser.json: added at the package root and proven inert: in no tsconfig program, loaded by no reference, packed by no published package, named or globbed by no other file, and the tool runs nowhere; CI path filters match it, so it triggers their jobs: 'server/**' in .github/workflows/docker.yml (line 45), 'server/**' in .github/workflows/test.yml (line 46)
PASS K2 Byte-span confinement: 2474 specifier spans changed in 515 files; every other byte identical (3.4 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 2474 rewritten specifiers keep their form (1.8 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (5.1 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (6.7 s)
PASS K4 Location scan: 367 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (13 findings in docs, comments or ungated coverage settings) (5.7 s)
finding (stack-text) server/src/repositories/metadata.repository.ts: moved to server/src/platform/metadata/metadata.repository.ts; 1 stack-trace reads passed along as text (line 133); their frames now name the new path
finding (stack-text) server/src/repositories/websocket.repository.ts: moved to server/src/platform/websocket/websocket.repository.ts; 1 stack-trace reads passed along as text (line 95); their frames now name the new path
finding (stack-text) server/src/services/asset-media.service.ts: moved to server/src/modules/asset/asset-media.service.ts; 1 stack-trace reads passed along as text (line 224); their frames now name the new path
… 23 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (0.0 s)
PASS K7 Emit layout: 7 emitting programs keep their outDir and rootDir (1 by TypeScript's default) (0.5 s)
finding (default-root-dir) e2e/tsconfig.json: emits into e2e/dist without a rootDir; TypeScript 6.0+ and before 6.0's default stays e2e and e2e
PASS K8 Oracles on the commit: tsc exit 0; unit 105/105 files and 2,337/2,337 cases equal to base (head: 105/105 files load, 2,337 passed, 0 failed, 0 skipped); openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes) (114.9 s)
verdict: PASS (static checks and oracles)
digest: sha256:9a5b2404631c2ac668462ad93fcbcd116637244e2b4f76e987bcc4e23e8be2b5ac, one R1-style step: PASS sha256:2e9e00c96572…
ac certify 02063972e8..ff429b0d24 (package root server/)
pathMap: 292 moves, 152 edited in place, 3020 unchanged, 0 added, 0 deleted
PASS K0 Envelope: inside the envelope: 678 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 292 moved files (8.5 s)
PASS K1 Move-set integrity: 292 moves, 152 files edited in place, nothing added or deleted (1.5 s)
PASS K2 Byte-span confinement: 1445 specifier spans changed in 386 files; every other byte identical (2.9 s)
PASS K3a Resolution identity under TypeScript: 6647 sites in 1100 files resolve to map(base) under every program (458 files in several); 1445 rewritten specifiers keep their form (1.5 s)
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (5.8 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.2 s)
PASS K4 Location scan: 292 moved files expose no location; no computed path reaches a change; no old path in code, config or CI (9 findings in docs, comments or ungated coverage settings) (5.5 s)
finding (stack-text) server/src/repositories/metadata.repository.ts: moved to server/src/modules/metadata/metadata.repository.ts; 1 stack-trace reads passed along as text (line 133); their frames now name the new path
finding (stack-text) server/src/repositories/websocket.repository.ts: moved to server/src/modules/websocket/websocket.repository.ts; 1 stack-trace reads passed along as text (line 95); their frames now name the new path
finding (stack-text) server/src/services/asset-media.service.ts: moved to server/src/modules/asset-media/asset-media.service.ts; 1 stack-trace reads passed along as text (line 224); their frames now name the new path
… 18 more findings
PASS K6 Test inventory: vitest 4.1.11: 105 test files, 2337 tests, per-file load status and case names equal (91.2 s)
PASS K8 Oracles on the commit: tsc exit 0; unit 105/105 files and 2,337/2,337 cases equal to base (head: 105/105 files load, 2,337 passed, 0 failed, 0 skipped); openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes) (110.7 s)
verdict: PASS (static checks and oracles)
digest: sha256:2e9e00c96572e7347cf00084cacd7e371c3004c261092888575bb32d99138820
Ac-Certificate: pass (full) K0=pass K1=pass K2=pass K3=pass K4=pass K6=pass K8=pass
Ac-Certificate-Base: 02063972e82b1bfd17b6fc2e3b3ff39936229ea5
Ac-Certificate-Digest: sha256:2e9e00c96572e7347cf00084cacd7e371c3004c261092888575bb32d99138820opencode + Nemotron 3 Super, single-shot: FAIL sha256:8cbe6c92987f…
ac certify 02063972e8..03e76f3faa (package root server/)
pathMap: 0 moves, 0 edited in place, 3464 unchanged, 211 added, 0 deleted
PASS K0 Envelope: inside the envelope: 889 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 0 moved files (9.1 s)
FAIL K1 Move-set integrity: 211 violations (211 added, 0 deleted, 31 copies) (1.2 s)
server/src/features/activity/activity.controller.spec.ts: added: no file in base has its content (modulo specifiers)
server/src/features/activity/activity.controller.ts: added: no file in base has its content (modulo specifiers)
server/src/features/activity/activity.dto.ts: added: no file in base has its content (modulo specifiers)
server/src/features/activity/activity.repository.ts: added: a copy of server/src/repositories/activity.repository.ts, which still exists
server/src/features/activity/activity.service.spec.ts: added: no file in base has its content (modulo specifiers)
server/src/features/activity/activity.service.ts: added: no file in base has its content (modulo specifiers)
server/src/features/album/album.controller.spec.ts: added: no file in base has its content (modulo specifiers)
server/src/features/album/album.controller.ts: added: no file in base has its content (modulo specifiers)
… 203 more
PASS K2 Byte-span confinement: 0 specifier spans changed in 0 files; every other byte identical (0.0 s)
FAIL K3a Resolution identity under TypeScript: 211 violations (211 added source files) (1.3 s)
server/src/features/activity/activity.controller.spec.ts: added: its 3 reference sites have no counterpart in base
server/src/features/activity/activity.controller.ts: added: its 7 reference sites have no counterpart in base
server/src/features/activity/activity.dto.ts: added: its 4 reference sites have no counterpart in base
server/src/features/activity/activity.repository.ts: added: its 10 reference sites have no counterpart in base
server/src/features/activity/activity.service.spec.ts: added: its 6 reference sites have no counterpart in base
server/src/features/activity/activity.service.ts: added: its 3 reference sites have no counterpart in base
server/src/features/album/album.controller.spec.ts: added: its 3 reference sites have no counterpart in base
server/src/features/album/album.controller.ts: added: its 6 reference sites have no counterpart in base
… 203 more
PASS K3b Resolution identity under the test runner: vitest 4.1.11: 4837 sites in 672 files resolve to map(base) (6.6 s)
PASS K3c Resolution identity under the runtime: 6192 runtime sites resolve to map(base) under nest-cli/emit (3442 rewritten by the build) (7.6 s)
finding (added-file-unresolved) server/src/features/plugin/plugin.dto.ts: nest-cli/emit: import '@immich/plugin-sdk' doesn't resolve (ERR_MODULE_NOT_FOUND) in a file with no base counterpart
finding (added-file-unresolved) server/src/features/workflow/workflow.controller.spec.ts: nest-cli/emit: import '@immich/plugin-sdk' doesn't resolve (ERR_MODULE_NOT_FOUND) in a file with no base counterpart
finding (added-file-unresolved) server/src/features/workflow/workflow.service.ts: nest-cli/emit: import '@immich/plugin-sdk' doesn't resolve (ERR_MODULE_NOT_FOUND) in a file with no base counterpart
FAIL K4 Location scan: 0 path-exposing uses in moved files (and 3 in added files), 0 computed paths into changed directories, 0 old paths in code/config (0 in coverage settings) (0.9 s)
server/src/features/library/library.service.spec.ts: added with no base counterpart; line 888: process.cwd()
server/src/features/library/library.service.spec.ts: added with no base counterpart; line 1284: process.cwd()
server/src/features/library/library.service.spec.ts: added with no base counterpart; line 1298: process.cwd()
finding (stack-text) server/src/features/asset-media/asset-media.service.ts: added with no base counterpart; 1 stack-trace reads passed along as text (line 224); their frames now name the new path
finding (stack-text) server/src/features/auth/auth.service.ts: added with no base counterpart; 1 stack-trace reads passed along as text (line 403); their frames now name the new path
finding (stack-text) server/src/features/duplicate/duplicate.service.ts: added with no base counterpart; 1 stack-trace reads passed along as text (line 104); their frames now name the new path
… 2 more findings
FAIL K6 Test inventory: vitest 4.1.11: 66 violations (66 of 171 test files fail to load (base: 0), 66 new test files) (94.6 s)
server/src/features/activity/activity.controller.spec.ts: new in the vitest test list (added in head; fails to load: x Unexpected token `[`. Expected a string literal ,-[/tmp/ac-s4-certify/g3-immich-opencode-super.full/worktree-head/server/src/features/activity/activity.controller.spec.ts:2:1] 1 | import request fro)
server/src/features/activity/activity.service.spec.ts: new in the vitest test list (added in head; fails to load: x Unexpected token `[`. Expected a string literal ,-[/tmp/ac-s4-certify/g3-immich-opencode-super.full/worktree-head/server/src/features/activity/activity.service.spec.ts:2:1] 1 | import { BadRequestEx)
server/src/features/album/album.controller.spec.ts: new in the vitest test list (added in head; fails to load: x Unexpected token `[`. Expected a string literal ,-[/tmp/ac-s4-certify/g3-immich-opencode-super.full/worktree-head/server/src/features/album/album.controller.spec.ts:2:1] 1 | import request from 'sup)
server/src/features/album/album.service.spec.ts: new in the vitest test list (added in head; fails to load: x Unexpected token `[`. Expected a string literal ,-[/tmp/ac-s4-certify/g3-immich-opencode-super.full/worktree-head/server/src/features/album/album.service.spec.ts:2:1] 1 | import { BadRequestExceptio)
server/src/features/app/app.controller.spec.ts: new in the vitest test list (added in head; fails to load: x Unexpected token `[`. Expected a string literal ,-[/tmp/ac-s4-certify/g3-immich-opencode-super.full/worktree-head/server/src/features/app/app.controller.spec.ts:2:1] 1 | import request from 'superte)
server/src/features/asset/asset.controller.spec.ts: new in the vitest test list (added in head; fails to load: x Unexpected token `[`. Expected a string literal ,-[/tmp/ac-s4-certify/g3-immich-opencode-super.full/worktree-head/server/src/features/asset/asset.controller.spec.ts:2:1] 1 | import request from 'sup)
server/src/features/asset/asset.service.spec.ts: new in the vitest test list (added in head; fails to load: x Unexpected token `[`. Expected a string literal ,-[/tmp/ac-s4-certify/g3-immich-opencode-super.full/worktree-head/server/src/features/asset/asset.service.spec.ts:3:1] 1 | import { BadRequestExceptio)
server/src/features/asset-media/asset-media.controller.spec.ts: new in the vitest test list (added in head; fails to load: x Unexpected token `[`. Expected a string literal ,-[/tmp/ac-s4-certify/g3-immich-opencode-super.full/worktree-head/server/src/features/asset-media/asset-media.controller.spec.ts:2:1] 1 | import reque)
… 58 more
FAIL K8 Oracles on the commit: tsc exited 1 on head (1,680 diagnostics), 0 on base; unit 105/171 files and 2,337/2,337 cases equal to base (head: 105/171 files load, 2,337 passed, 0 failed, 0 skipped); openapi byte-identical to the base's open-api/immich-openapi-specs.json (947,932 bytes), but 1 step failed on head (118.9 s)
tsc: `node_modules/.bin/tsc --noEmit --incremental false --pretty false` exited 1 on head (1,680 diagnostics), exit 0 on base (log /tmp/ac-s4-certify/g3-immich-opencode-super.full/oracles/head/tsc/step-1.log)
server/src/features/activity/activity.controller.spec.ts: tsc: TS1005 ',' expected.
server/src/features/activity/activity.controller.spec.ts: tsc: TS1002 Unterminated string literal.
server/src/features/activity/activity.controller.spec.ts: tsc: TS1005 ',' expected.
server/src/features/activity/activity.controller.spec.ts: tsc: TS1005 ',' expected.
server/src/features/activity/activity.controller.spec.ts: tsc: TS1002 Unterminated string literal.
server/src/features/activity/activity.controller.spec.ts: tsc: TS1005 ',' expected.
server/src/features/activity/activity.controller.ts: tsc: TS1005 ',' expected.
… 72 more
verdict: FAIL (static checks and oracles)
digest: sha256:8cbe6c92987fbc9132d2af720c36a32a3e5f5598021c85169e7d39de6b6d2beb
Ac-Certificate: fail (full) K0=pass K1=fail K2=pass K3=fail K4=fail K6=fail K8=fail
Ac-Certificate-Base: 02063972e82b1bfd17b6fc2e3b3ff39936229ea5
Ac-Certificate-Digest: sha256:8cbe6c92987fbc9132d2af720c36a32a3e5f5598021c85169e7d39de6b6d2bebopencode + Nemotron 3 Super, persistent: FAIL sha256:90d2d44bbd64…
ac certify 02063972e8..1da2348b7c (package root server/)
pathMap: 365 moves, 0 edited in place, 3099 unchanged, 614 added, 0 deleted
PASS K0 Envelope: inside the envelope: 1242 TypeScript vs 3 JavaScript sources under server; no automock, nested package scope, symlink, same-stem pair or unreadable runner config around 365 moved files (23.1 s)
FAIL K1 Move-set integrity: 979 violations (614 added, 0 deleted, 291 copies) (1.2 s)
server/fix_app_files.py: added: no file in base has its content (modulo specifiers)
server/fix_features_only.py: added: no file in base has its content (modulo specifiers)
server/fix_indexes.py: added: no file in base has its content (modulo specifiers)
server/fix_quotes.py: added: no file in base has its content (modulo specifiers)
server/fix_quotes2.py: added: no file in base has its content (modulo specifiers)
server/fix_restructure.py: added: no file in base has its content (modulo specifiers)
server/rebuild_indexes.py: added: no file in base has its content (modulo specifiers)
server/regenerate_indexes.py: added: no file in base has its content (modulo specifiers)
… 971 more
finding (ambiguous-match) 30 groups of identical files were paired by where their directories' other files went, then by name and path similarity
PASS K2 Byte-span confinement: 0 specifier spans changed in 0 files; every other byte identical (4.2 s)
FAIL K3a Resolution identity under TypeScript: 3097 violations (2168 resolution mismatches, 365 program or format changes, 564 added source files) (2.6 s)
server/src/app.common.ts: line 9: import 'src/maintenance/maintenance-worker.service.js': expected file server/src.backup/maintenance/maintenance-worker.service.ts (typescript), got file server/src/maintenance/maintenance-worker.service.ts (typescript) under server/tsconfig.build.json, server/tsconfig.json
server/src/app.common.ts: line 10: import 'src/middleware/websocket.adapter.js': expected file server/src.backup/middleware/websocket.adapter.ts (typescript), got file server/src/middleware/websocket.adapter.ts (typescript) under server/tsconfig.build.json, server/tsconfig.json
server/src/app.common.ts: line 11: import 'src/repositories/config.repository.js': expected file server/src.backup/repositories/config.repository.ts (typescript), got unresolved under server/tsconfig.build.json, server/tsconfig.json
server/src/app.common.ts: line 12: import 'src/repositories/logging.repository.js': expected file server/src.backup/repositories/logging.repository.ts (typescript), got unresolved under server/tsconfig.build.json, server/tsconfig.json
server/src/app.common.ts: line 13: import 'src/repositories/telemetry.repository.js': expected file server/src.backup/repositories/telemetry.repository.ts (typescript), got unresolved under server/tsconfig.build.json, server/tsconfig.json
server/src/app.common.ts: line 14: import 'src/services/api.service.js': expected file server/src.backup/services/api.service.ts (typescript), got unresolved under server/tsconfig.build.json, server/tsconfig.json
server/src/app.common.ts: line 15: import 'src/utils/misc.js': expected file server/src.backup/utils/misc.ts (typescript), got file server/src/utils/misc.ts (typescript) under server/tsconfig.build.json, server/tsconfig.json
server/src/app.module.ts: line 11: import 'src/controllers/index.js': expected file server/src.backup/controllers/index.ts (typescript), got file server/src/controllers/index.ts (typescript) under server/tsconfig.build.json, server/tsconfig.json
… 3089 more
FAIL K3b Resolution identity under the test runner: vitest 4.1.11: 4548 violations (2802 dangling, 131 retargeted, 1615 dangling in added files) (7.5 s)
server/src/app.common.ts: site 8 'src/maintenance/maintenance-worker.service.js' (import): base server/src.backup/maintenance/maintenance-worker.service.ts, head server/src/maintenance/maintenance-worker.service.ts
server/src/app.common.ts: site 9 'src/middleware/websocket.adapter.js' (import): base server/src.backup/middleware/websocket.adapter.ts, head server/src/middleware/websocket.adapter.ts
server/src/app.common.ts: site 10 'src/repositories/config.repository.js' (import): base server/src.backup/repositories/config.repository.ts, head unresolved
server/src/app.common.ts: site 11 'src/repositories/logging.repository.js' (import): base server/src.backup/repositories/logging.repository.ts, head unresolved
server/src/app.common.ts: site 12 'src/repositories/telemetry.repository.js' (import): base server/src.backup/repositories/telemetry.repository.ts, head unresolved
server/src/app.common.ts: site 13 'src/services/api.service.js' (import): base server/src.backup/services/api.service.ts, head unresolved
server/src/app.common.ts: site 14 'src/utils/misc.js' (import): base server/src.backup/utils/misc.ts, head server/src/utils/misc.ts
server/src/app.module.ts: site 10 'src/controllers/index.js' (import): base server/src.backup/controllers/index.ts, head server/src/controllers/index.ts
… 4540 more
FAIL K3c Resolution identity under the runtime: 2287 violations under nest-cli/emit (10.0 s)
server/src/app.common.ts: nest-cli/emit: import 'src/maintenance/maintenance-worker.service.js' (emitted as './maintenance/maintenance-worker.service.js') resolves to server/src/maintenance/maintenance-worker.service.ts, expected server/src.backup/maintenance/maintenance-worker.service.ts; base server/src/app.common.ts 'src/maintenance/maintenance-worker.service.js'
server/src/app.common.ts: nest-cli/emit: import 'src/middleware/websocket.adapter.js' (emitted as './middleware/websocket.adapter.js') resolves to server/src/middleware/websocket.adapter.ts, expected server/src.backup/middleware/websocket.adapter.ts; base server/src/app.common.ts 'src/middleware/websocket.adapter.js'
server/src/app.common.ts: nest-cli/emit: import 'src/repositories/config.repository.js' resolves to unresolved (ERR_MODULE_NOT_FOUND), expected server/src.backup/repositories/config.repository.ts; base server/src/app.common.ts 'src/repositories/config.repository.js'
server/src/app.common.ts: nest-cli/emit: import 'src/repositories/logging.repository.js' resolves to unresolved (ERR_MODULE_NOT_FOUND), expected server/src.backup/repositories/logging.repository.ts; base server/src/app.common.ts 'src/repositories/logging.repository.js'
server/src/app.common.ts: nest-cli/emit: import 'src/repositories/telemetry.repository.js' resolves to unresolved (ERR_MODULE_NOT_FOUND), expected server/src.backup/repositories/telemetry.repository.ts; base server/src/app.common.ts 'src/repositories/telemetry.repository.js'
server/src/app.common.ts: nest-cli/emit: import 'src/services/api.service.js' resolves to unresolved (ERR_MODULE_NOT_FOUND), expected server/src.backup/services/api.service.ts; base server/src/app.common.ts 'src/services/api.service.js'
server/src/app.common.ts: nest-cli/emit: import 'src/utils/misc.js' (emitted as './utils/misc.js') resolves to server/src/utils/misc.ts, expected server/src.backup/utils/misc.ts; base server/src/app.common.ts 'src/utils/misc.js'
server/src/app.module.ts: nest-cli/emit: import 'src/controllers/index.js' (emitted as './controllers/index.js') resolves to server/src/controllers/index.ts, expected server/src.backup/controllers/index.ts; base server/src/app.module.ts 'src/controllers/index.js'
… 293 more
finding (added-file-unresolved) server/src.backup/app.common.ts: nest-cli/emit: import 'src/repositories/config.repository.js' doesn't resolve (ERR_MODULE_NOT_FOUND) in a file with no base counterpart
finding (added-file-unresolved) server/src.backup/app.common.ts: nest-cli/emit: import 'src/repositories/logging.repository.js' doesn't resolve (ERR_MODULE_NOT_FOUND) in a file with no base counterpart
finding (added-file-unresolved) server/src.backup/app.common.ts: nest-cli/emit: import 'src/repositories/telemetry.repository.js' doesn't resolve (ERR_MODULE_NOT_FOUND) in a file with no base counterpart
… 18 more findings
FAIL K4 Location scan: 12 path-exposing uses in moved files (and 15 in added files), 2 computed paths into changed directories, 52 old paths in code/config (0 in coverage settings) (7.5 s)
server/src/main.ts: moved to server/src.backup/main.ts; line 101: import.meta.filename: dirname(import.meta.filename) pointed at server/src (exists in base), now at server/src.backup (exists in head)
server/src/main.ts: moved to server/src.backup/main.ts; line 116: new Worker(workerFile) (worker_threads)
server/src/repositories/database.repository.ts: moved to server/src.backup/repositories/database.repository.ts; line 510: import(filePath) with a computed specifier (resolved relative to this file)
server/src/repositories/database.repository.ts: moved to server/src.backup/repositories/database.repository.ts; line 511: import.meta.dirname: join(import.meta.dirname, '..', 'schema/migrations') pointed at server/src/schema/migrations (exists in base), now at server/src.backup/schema/migrations (exists in head)
server/src/repositories/storage.repository.spec.ts: moved to server/src.backup/repositories/storage.repository.spec.ts; line 38: process.cwd()
server/src/services/cli.service.ts: moved to server/src.backup/services/cli.service.ts; line 25: import.meta.dirname: join(import.meta.dirname, '../schema/migrations') pointed at server/src/schema/migrations (exists in base), now at server/src.backup/schema/migrations (exists in head)
server/src/services/library.service.spec.ts: moved to server/src.backup/services/library.service.spec.ts; line 888: process.cwd()
server/src/services/library.service.spec.ts: moved to server/src.backup/services/library.service.spec.ts; line 1284: process.cwd()
… 73 more
finding (stack-text) server/src/main.ts: moved to server/src.backup/main.ts; 1 stack-trace reads passed along as text (line 129); their frames now name the new path
finding (stack-text) server/src/repositories/metadata.repository.ts: moved to server/src.backup/repositories/metadata.repository.ts; 1 stack-trace reads passed along as text (line 133); their frames now name the new path
finding (stack-text) server/src/repositories/websocket.repository.ts: moved to server/src.backup/repositories/websocket.repository.ts; 1 stack-trace reads passed along as text (line 95); their frames now name the new path
… 54 more findings
FAIL K6 Test inventory: vitest 4.1.11: 189 violations (100 of 105 test files fail to load (base: 0), 4 files that no longer load, 96 dropped test files, 89 new test files, 2285 lost tests) (53.7 s)
server/src/controllers/activity.controller.spec.ts: no longer in the vitest test list (now at server/src.backup/controllers/activity.controller.spec.ts)
server/src/controllers/album.controller.spec.ts: no longer in the vitest test list (now at server/src.backup/controllers/album.controller.spec.ts)
server/src/controllers/api-key.controller.spec.ts: no longer in the vitest test list (now at server/src.backup/controllers/api-key.controller.spec.ts)
server/src/controllers/app.controller.spec.ts: no longer in the vitest test list (now at server/src.backup/controllers/app.controller.spec.ts)
server/src/controllers/asset-media.controller.spec.ts: no longer in the vitest test list (now at server/src.backup/controllers/asset-media.controller.spec.ts)
server/src/controllers/asset.controller.spec.ts: no longer in the vitest test list (now at server/src.backup/controllers/asset.controller.spec.ts)
server/src/controllers/auth.controller.spec.ts: no longer in the vitest test list (now at server/src.backup/controllers/auth.controller.spec.ts)
server/src/controllers/config.controller.spec.ts: no longer in the vitest test list (now at server/src.backup/controllers/config.controller.spec.ts)
… 181 more
FAIL K8 Oracles on the commit: tsc exited 1 on head (768 diagnostics), 0 on base; unit 5/105 files and 52/2,337 cases equal to base (head: 5/105 files load, 52 passed, 0 failed, 0 skipped); openapi produced nothing (39.3 s)
tsc: `node_modules/.bin/tsc --noEmit --incremental false --pretty false` exited 1 on head (768 diagnostics), exit 0 on base (log /tmp/ac-s4-certify/g3-immich-opencode-super-persistent.full/oracles/head/tsc/step-1.log)
server/src/bin/sync-sql.ts: tsc: TS1002 Unterminated string literal.
server/src/bin/sync-sql.ts: tsc: TS1002 Unterminated string literal.
server/src/bin/sync-sql.ts: tsc: TS1002 Unterminated string literal.
server/src/bin/sync-sql.ts: tsc: TS1002 Unterminated string literal.
server/src/bin/sync-sql.ts: tsc: TS1002 Unterminated string literal.
server/src/bin/sync-sql.ts: tsc: TS1002 Unterminated string literal.
server/src/bin/sync-sql.ts: tsc: TS1002 Unterminated string literal.
… 206 more
verdict: FAIL (static checks and oracles)
digest: sha256:90d2d44bbd647b5f1b99d61590fbaa9f993572e244c7a8e91fd60c1b0161651e
Ac-Certificate: fail (full) K0=pass K1=fail K2=pass K3=fail K4=fail K6=fail K8=fail
Ac-Certificate-Base: 02063972e82b1bfd17b6fc2e3b3ff39936229ea5
Ac-Certificate-Digest: sha256:90d2d44bbd647b5f1b99d61590fbaa9f993572e244c7a8e91fd60c1b0161651eRendered by ac report from the run dir; the certificate files sit next to this page.