Machine state will be reset. To keep it, pass --keep-machine-state start all VLans (finished: start all VLans, in 0.00 seconds) Test will time out and terminate in 3600.0 seconds run the VM test script additionally exposed symbols: machine, vlan1, start_all, test_script, machines, machines_qemu, machines_nspawn, vlans, driver, log, os, create_machine, subtest, run_tests, join_all, retry, serial_stdout_off, serial_stdout_on, polling_condition, BaseMachine, QemuMachine, NspawnMachine, t, debug, dump_machine_ssh machine: waiting for unit postgresql.service machine: waiting for the VM to finish booting machine: starting vm machine # Disk image does not exist, creating the virtualisation disk image... machine: QEMU running (pid 45) machine # Formatting '/build/vm-state-machine/tmp.DVBW3tNnsY', fmt=raw size=1073741824 machine # mke2fs 1.47.4 (6-Mar-2025) machine # Discarding device blocks: 0/262144 done machine # Creating filesystem with 262144 4k blocks and 65536 inodes machine # Filesystem UUID: 858f7ad9-9b65-40fc-a826-cf1304c8a6f2 machine # Superblock backups stored on blocks: machine # 32768, 98304, 163840, 229376 machine # machine # Allocating group tables: 0/8 done machine # Writing inode tables: 0/8 done machine # Creating journal (8192 blocks): done machine # Writing superblocks and filesystem accounting information: 0/8 done machine # machine # Virtualisation disk image created. machine # Starting virtiofs daemons... machine # [2026-10-21T21:47:07Z WARN virtiofsd::passthrough] Failed to open file handle for the root node: Operation not permitted (os error 1) machine # [2026-10-21T21:47:07Z WARN virtiofsd::passthrough] File handles do not appear safe to use, disabling file handles altogether machine # [2026-10-21T21:47:07Z INFO virtiofsd] Waiting for vhost-user socket connection... machine # [2026-10-21T21:47:07Z WARN virtiofsd::passthrough] Failed to open file handle for the root node: Operation not permitted (os error 1) machine # [2026-10-21T21:47:07Z WARN virtiofsd::passthrough] File handles do not appear safe to use, disabling file handles altogether machine # [2026-10-21T21:47:07Z WARN virtiofsd::passthrough] Failed to open file handle for the root node: Operation not permitted (os error 1) machine # [2026-10-21T21:47:07Z INFO virtiofsd] Waiting for vhost-user socket connection... machine # [2026-10-21T21:47:07Z WARN virtiofsd::passthrough] File handles do not appear safe to use, disabling file handles altogether machine # [2026-10-21T21:47:07Z INFO virtiofsd] Waiting for vhost-user socket connection... machine # [2026-10-21T21:47:07Z INFO virtiofsd] Client connected, servicing requests machine # [2026-10-21T21:47:07Z INFO virtiofsd] Client connected, servicing requests machine # [2026-10-21T21:47:07Z INFO virtiofsd] Client connected, servicing requests machine # SeaBIOS (version rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org) machine # machine # machine # iPXE (http://ipxe.org) 00:02.0 CA00 PCI2.10 PnP PMM+3EFCC730+3EF2C730 CA00 machine # Press Ctrl-B to configure iPXE (PCI 00:02.0)... machine # machine # machine # machine # machine # iPXE (http://ipxe.org) 00:05.0 CB00 PCI2.10 PnP PMM 3EFCC730 3EF2C730 CB00 machine # Press Ctrl-B to configure iPXE (PCI 00:05.0)... machine # machine # machine # Booting from ROM... machine # Probing EDD (edd=off to disable)... ok machine # [ 0.000000] Linux version 6.18.56 (nixbld@localhost) (gcc (GCC) 16.2.0, GNU ld (GNU Binutils) 2.46) #1-NixOS SMP PREEMPT_DYNAMIC @1791725172 machine # [ 0.000000] Command line: console=ttyS0 console=tty0 panic=1 boot.panic_on_fail clocksource=acpi_pm root=fstab loglevel=7 net.ifnames=0 lsm=landlock,yama,bpf init=/nix/store/inm9dbmkpl9sj3v93dyqq18j9q2kdd6a-nixos-system-machine-test/init regInfo=/nix/.ro-store/9bkcbbn9gph6ri9pq3i1w9a2h1fs2ydz-closure-info/registration console=ttyS0,115200n8 console=tty0 machine # [ 0.000000] x86 CPU feature dependency check failure: CPU0 has '18*32+31' enabled but '18*32+26' disabled. Kernel might be fine, but no guarantees. machine # [ 0.000000] BIOS-provided physical RAM map: machine # [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable machine # [ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved machine # [ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved machine # [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003ffd7fff] usable machine # [ 0.000000] BIOS-e820: [mem 0x000000003ffd8000-0x000000003fffffff] reserved machine # [ 0.000000] BIOS-e820: [mem 0x00000000b0000000-0x00000000bfffffff] reserved machine # [ 0.000000] BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved machine # [ 0.000000] BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved machine # [ 0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved machine # [ 0.000000] BIOS-e820: [mem 0x000000fd00000000-0x000000ffffffffff] reserved machine # [ 0.000000] NX (Execute Disable) protection: active machine # [ 0.000000] APIC: Static calls initialized machine # [ 0.000000] SMBIOS 2.8 present. machine # [ 0.000000] DMI: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014 machine # [ 0.000000] DMI: Memory slots populated: 1/1 machine # [ 0.000000] Hypervisor detected: KVM machine # [ 0.000000] last_pfn = 0x3ffd8 max_arch_pfn = 0x400000000 machine # [ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00 machine # [ 0.000000] kvm-clock: using sched offset of 441746260 cycles machine # [ 0.000002] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns machine # [ 0.000004] tsc: Detected 3792.874 MHz processor machine # [ 0.000663] last_pfn = 0x3ffd8 max_arch_pfn = 0x400000000 machine # [ 0.000686] MTRR map: 4 entries (3 fixed + 1 variable; max 19), built from 8 variable MTRRs machine # [ 0.000688] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT machine # [ 0.002218] found SMP MP-table at [mem 0x000f5450-0x000f545f] machine # [ 0.002228] Using GB pages for direct mapping machine # [ 0.002267] RAMDISK: [mem 0x3e2e4000-0x3ffcffff] machine # [ 0.002272] ACPI: Early table checksum verification disabled machine # [ 0.002274] ACPI: RSDP 0x00000000000F5270 000014 (v00 BOCHS ) machine # [ 0.002277] ACPI: RSDT 0x000000003FFE2422 000038 (v01 BOCHS BXPC 00000001 BXPC 00000001) machine # [ 0.002279] ACPI: FACP 0x000000003FFE221A 0000F4 (v03 BOCHS BXPC 00000001 BXPC 00000001) machine # [ 0.002284] ACPI: DSDT 0x000000003FFE0040 0021DA (v01 BOCHS BXPC 00000001 BXPC 00000001) machine # [ 0.002286] ACPI: FACS 0x000000003FFE0000 000040 machine # [ 0.002287] ACPI: APIC 0x000000003FFE230E 000078 (v03 BOCHS BXPC 00000001 BXPC 00000001) machine # [ 0.002288] ACPI: HPET 0x000000003FFE2386 000038 (v01 BOCHS BXPC 00000001 BXPC 00000001) machine # [ 0.002290] ACPI: MCFG 0x000000003FFE23BE 00003C (v01 BOCHS BXPC 00000001 BXPC 00000001) machine # [ 0.002291] ACPI: WAET 0x000000003FFE23FA 000028 (v01 BOCHS BXPC 00000001 BXPC 00000001) machine # [ 0.002292] ACPI: Reserving FACP table memory at [mem 0x3ffe221a-0x3ffe230d] machine # [ 0.002293] ACPI: Reserving DSDT table memory at [mem 0x3ffe0040-0x3ffe2219] machine # [ 0.002293] ACPI: Reserving FACS table memory at [mem 0x3ffe0000-0x3ffe003f] machine # [ 0.002294] ACPI: Reserving APIC table memory at [mem 0x3ffe230e-0x3ffe2385] machine # [ 0.002294] ACPI: Reserving HPET table memory at [mem 0x3ffe2386-0x3ffe23bd] machine # [ 0.002295] ACPI: Reserving MCFG table memory at [mem 0x3ffe23be-0x3ffe23f9] machine # [ 0.002295] ACPI: Reserving WAET table memory at [mem 0x3ffe23fa-0x3ffe2421] machine # [ 0.002668] No NUMA configuration found machine # [ 0.002669] Faking a node at [mem 0x0000000000000000-0x000000003ffd7fff] machine # [ 0.002671] NODE_DATA(0) allocated [mem 0x3ffd2780-0x3ffd7cff] machine # [ 0.002741] Zone ranges: machine # [ 0.002741] DMA [mem 0x0000000000001000-0x0000000000ffffff] machine # [ 0.002743] DMA32 [mem 0x0000000001000000-0x000000003ffd7fff] machine # [ 0.002744] Normal empty machine # [ 0.002744] Device empty machine # [ 0.002745] Movable zone start for each node machine # [ 0.002745] Early memory node ranges machine # [ 0.002746] node 0: [mem 0x0000000000001000-0x000000000009efff] machine # [ 0.002746] node 0: [mem 0x0000000000100000-0x000000003ffd7fff] machine # [ 0.002747] Initmem setup node 0 [mem 0x0000000000001000-0x000000003ffd7fff] machine # [ 0.002763] On node 0, zone DMA: 1 pages in unavailable ranges machine # [ 0.002969] On node 0, zone DMA: 97 pages in unavailable ranges machine # [ 0.016726] On node 0, zone DMA32: 40 pages in unavailable ranges machine # [ 0.017584] ACPI: PM-Timer IO Port: 0x608 machine # [ 0.017592] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1]) machine # [ 0.017610] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23 machine # [ 0.017612] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) machine # [ 0.017613] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level) machine # [ 0.017614] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) machine # [ 0.017615] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level) machine # [ 0.017616] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level) machine # [ 0.017618] ACPI: Using ACPI (MADT) for SMP configuration information machine # [ 0.017618] ACPI: HPET id: 0x8086a201 base: 0xfed00000 machine # [ 0.017621] TSC deadline timer available machine # [ 0.017624] CPU topo: Max. logical packages: 1 machine # [ 0.017625] CPU topo: Max. logical dies: 1 machine # [ 0.017625] CPU topo: Max. dies per package: 1 machine # [ 0.017628] CPU topo: Max. threads per core: 1 machine # [ 0.017629] CPU topo: Num. cores per package: 1 machine # [ 0.017629] CPU topo: Num. threads per package: 1 machine # [ 0.017630] CPU topo: Allowing 1 present CPUs plus 0 hotplug CPUs machine # [ 0.017640] kvm-guest: APIC: eoi() replaced with kvm_guest_apic_eoi_write() machine # [ 0.017664] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff] machine # [ 0.017665] PM: hibernation: Registered nosave memory: [mem 0x0009f000-0x000fffff] machine # [ 0.017666] [mem 0x40000000-0xafffffff] available for PCI devices machine # [ 0.017667] Booting paravirtualized kernel on KVM machine # [ 0.017668] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1910969940391419 ns machine # [ 0.021475] setup_percpu: NR_CPUS:512 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1 machine # [ 0.023205] percpu: Embedded 98 pages/cpu s278528 r8192 d114688 u2097152 machine # [ 0.023238] kvm-guest: PV spinlocks disabled, single CPU machine # [ 0.023239] Kernel command line: console=ttyS0 console=tty0 panic=1 boot.panic_on_fail clocksource=acpi_pm root=fstab loglevel=7 net.ifnames=0 lsm=landlock,yama,bpf init=/nix/store/inm9dbmkpl9sj3v93dyqq18j9q2kdd6a-nixos-system-machine-test/init regInfo=/nix/.ro-store/9bkcbbn9gph6ri9pq3i1w9a2h1fs2ydz-closure-info/registration console=ttyS0,115200n8 console=tty0 machine # [ 0.023313] Unknown kernel command line parameters "regInfo=/nix/.ro-store/9bkcbbn9gph6ri9pq3i1w9a2h1fs2ydz-closure-info/registration", will be passed to user space. machine # [ 0.023329] random: crng init done machine # [ 0.023330] printk: log buffer data + meta data: 262144 + 917504 = 1179648 bytes machine # [ 0.023374] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear) machine # [ 0.023796] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear) machine # [ 0.023818] Fallback order for Node 0: 0 machine # [ 0.023821] Built 1 zonelists, mobility grouping on. Total pages: 262006 machine # [ 0.023821] Policy zone: DMA32 machine # [ 0.025900] mem auto-init: stack:all(zero), heap alloc:on, heap free:off machine # [ 0.028632] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 machine # [ 0.030390] allocated 2097152 bytes of page_ext machine # [ 0.038409] ftrace: allocating 48842 entries in 192 pages machine # [ 0.038410] ftrace: allocated 192 pages with 2 groups machine # [ 0.039022] Dynamic Preempt: lazy machine # [ 0.039146] rcu: Preemptible hierarchical RCU implementation. machine # [ 0.039147] rcu: RCU event tracing is enabled. machine # [ 0.039147] rcu: RCU restricting CPUs from NR_CPUS=512 to nr_cpu_ids=1. machine # [ 0.039149] Trampoline variant of Tasks RCU enabled. machine # [ 0.039149] Rude variant of Tasks RCU enabled. machine # [ 0.039149] Tracing variant of Tasks RCU enabled. machine # [ 0.039150] rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies. machine # [ 0.039150] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1 machine # [ 0.039163] RCU Tasks: Setting shift to 0 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=1. machine # [ 0.039164] RCU Tasks Rude: Setting shift to 0 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=1. machine # [ 0.039165] RCU Tasks Trace: Setting shift to 0 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=1. machine # [ 0.042872] NR_IRQS: 33024, nr_irqs: 256, preallocated irqs: 16 machine # [ 0.043119] rcu: srcu_init: Setting srcu_struct sizes based on contention. machine # [ 0.043123] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275000 ns machine # [ 0.043211] kfence: initialized - using 2097152 bytes for 255 objects at 0x(____ptrval____)-0x(____ptrval____) machine # [ 0.048764] Console: colour VGA+ 80x25 machine # [ 0.048766] printk: legacy console [tty0] enabled machine # [ 0.081533] printk: legacy console [ttyS0] enabled machine # [ 0.229269] ACPI: Core revision 20250807 machine # [ 0.230377] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604467 ns machine # [ 0.232468] APIC: Switch to symmetric I/O mode setup machine # [ 0.233733] x2apic enabled machine # [ 0.234614] APIC: Switched APIC routing to: physical x2apic machine # [ 0.236671] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 machine # [ 0.238012] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x6d5818a734c, max_idle_ns: 881590694765 ns machine # [ 0.240283] Calibrating delay loop (skipped) preset value.. 7585.74 BogoMIPS (lpj=3792874) machine # [ 0.242352] x86/cpu: User Mode Instruction Prevention (UMIP) activated machine # [ 0.243403] Last level iTLB entries: 4KB 512, 2MB 255, 4MB 127 machine # [ 0.244284] Last level dTLB entries: 4KB 512, 2MB 255, 4MB 127, 1GB 0 machine # [ 0.246285] mitigations: Enabled attack vectors: user_kernel, user_user, guest_host, guest_guest, SMT mitigations: auto machine # [ 0.247284] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl machine # [ 0.248283] Spectre V2 : Mitigation: Retpolines machine # [ 0.249283] Speculative Return Stack Overflow: Mitigation: Safe RET machine # [ 0.250283] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization machine # [ 0.252283] Spectre V2 : Spectre v2 / SpectreRSB: Filling RSB on context switch and VMEXIT machine # [ 0.253283] Spectre V2 : Enabling Restricted Speculation for firmware calls machine # [ 0.254284] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier machine # [ 0.256284] active return thunk: srso_alias_return_thunk machine # [ 0.257296] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' machine # [ 0.259283] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' machine # [ 0.260283] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers' machine # [ 0.262283] x86/fpu: Supporting XSAVE feature 0x200: 'Protection Keys User registers' machine # [ 0.263283] x86/fpu: Supporting XSAVE feature 0x800: 'Control-flow User registers' machine # [ 0.264283] x86/fpu: Supporting XSAVE feature 0x1000: 'Control-flow Kernel registers (KVM only)' machine # [ 0.266283] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 machine # [ 0.267283] x86/fpu: xstate_offset[9]: 832, xstate_sizes[9]: 8 machine # [ 0.269283] x86/fpu: xstate_offset[11]: 840, xstate_sizes[11]: 16 machine # [ 0.270283] x86/fpu: xstate_offset[12]: 856, xstate_sizes[12]: 24 machine # [ 0.271283] x86/fpu: Enabled xstate features 0x1a07, context size is 880 bytes, using 'compacted' format. machine # [ 0.296503] Freeing SMP alternatives memory: 48K machine # [ 0.297285] pid_max: default: 32768 minimum: 301 machine # [ 0.298334] LSM: initializing lsm=capability,landlock,yama,bpf,ima machine # [ 0.299376] landlock: Up and running. machine # [ 0.300929] Yama: becoming mindful. machine # [ 0.301491] LSM support for eBPF active machine # [ 0.302386] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear) machine # [ 0.304302] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear) machine # [ 0.306058] smpboot: CPU0: AMD Ryzen Threadripper PRO 5965WX 24-Cores (family: 0x19, model: 0x8, stepping: 0x2) machine # [ 0.306695] Performance Events: Fam17h+ core perfctr, AMD PMU driver. machine # [ 0.307286] ... version: 0 machine # [ 0.308273] ... bit width: 48 machine # [ 0.309058] ... generic counters: 6 machine # [ 0.310053] ... generic bitmap: 000000000000003f machine # [ 0.311285] ... fixed-purpose counters: 0 machine # [ 0.312272] ... fixed-purpose bitmap: 0000000000000000 machine # [ 0.313280] ... value mask: 0000ffffffffffff machine # [ 0.314285] ... max period: 00007fffffffffff machine # [ 0.315285] ... global_ctrl mask: 000000000000003f machine # [ 0.316383] signal: max sigframe size: 3376 machine # [ 0.317354] rcu: Hierarchical SRCU implementation. machine # [ 0.318288] rcu: Max phase no-delay instances is 400. machine # [ 0.322918] smp: Bringing up secondary CPUs ... machine # [ 0.323295] smp: Brought up 1 node, 1 CPU machine # [ 0.324239] smpboot: Total of 1 processors activated (7585.74 BogoMIPS) machine # [ 0.325432] Memory: 942716K/1048024K available (18132K kernel code, 2734K rwdata, 13652K rodata, 3660K init, 3620K bss, 98116K reserved, 0K cma-reserved) machine # [ 0.326463] devtmpfs: initialized machine # [ 0.327541] x86/mm: Memory block size: 128MB machine # [ 0.329097] posixtimers hash table entries: 512 (order: 1, 8192 bytes, linear) machine # [ 0.330311] futex hash table entries: 256 (16384 bytes on 1 NUMA nodes, total 16 KiB, linear). machine # [ 0.331344] pinctrl core: initialized pinctrl subsystem machine # [ 0.332512] PM: RTC time: 21:47:07, date: 2026-10-21 machine # [ 0.335598] NET: Registered PF_NETLINK/PF_ROUTE protocol family machine # [ 0.336593] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations machine # [ 0.337305] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations machine # [ 0.338403] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations machine # [ 0.339292] audit: initializing netlink subsys (disabled) machine # [ 0.340494] thermal_sys: Registered thermal governor 'fair_share' machine # [ 0.340496] thermal_sys: Registered thermal governor 'bang_bang' machine # [ 0.341285] thermal_sys: Registered thermal governor 'step_wise' machine # [ 0.342288] audit: type=2000 audit(1792619228.250:1): state=initialized audit_enabled=0 res=1 machine # [ 0.344287] thermal_sys: Registered thermal governor 'user_space' machine # [ 0.344288] thermal_sys: Registered thermal governor 'power_allocator' machine # [ 0.345308] cpuidle: using governor menu machine # [ 0.348091] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5 machine # [ 0.349509] PCI: ECAM [mem 0xb0000000-0xbfffffff] (base 0xb0000000) for domain 0000 [bus 00-ff] machine # [ 0.350286] PCI: ECAM [mem 0xb0000000-0xbfffffff] reserved as E820 entry machine # [ 0.351293] PCI: Using configuration type 1 for base access machine # [ 0.352438] kprobes: kprobe jump-optimization is enabled. All kprobes are optimized if possible. machine # [ 0.361429] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages machine # [ 0.362285] HugeTLB: 16380 KiB vmemmap can be freed for a 1.00 GiB page machine # [ 0.367284] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages machine # [ 0.368285] HugeTLB: 28 KiB vmemmap can be freed for a 2.00 MiB page machine # [ 0.374504] ACPI: Added _OSI(Module Device) machine # [ 0.375286] ACPI: Added _OSI(Processor Device) machine # [ 0.378284] ACPI: Added _OSI(Processor Aggregator Device) machine # [ 0.383684] ACPI: 1 ACPI AML tables successfully acquired and loaded machine # [ 0.389648] ACPI: Interpreter enabled machine # [ 0.390300] ACPI: PM: (supports S0 S3 S4 S5) machine # [ 0.391286] ACPI: Using IOAPIC for interrupt routing machine # [ 0.392348] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug machine # [ 0.394127] PCI: Using E820 reservations for host bridge windows machine # [ 0.395422] ACPI: Enabled 2 GPEs in block 00 to 3F machine # [ 0.400171] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) machine # [ 0.401289] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI HPX-Type3] machine # [ 0.402356] acpi PNP0A08:00: _OSC: platform does not support [PCIeHotplug LTR] machine # [ 0.403402] acpi PNP0A08:00: _OSC: OS now controls [PME AER PCIeCapability] machine # [ 0.404714] PCI host bridge to bus 0000:00 machine # [ 0.405290] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window] machine # [ 0.406286] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window] machine # [ 0.407286] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window] machine # [ 0.408286] pci_bus 0000:00: root bus resource [mem 0x40000000-0xafffffff window] machine # [ 0.409286] pci_bus 0000:00: root bus resource [mem 0xc0000000-0xfebfffff window] machine # [ 0.410286] pci_bus 0000:00: root bus resource [mem 0x100000000-0x8ffffffff window] machine # [ 0.411288] pci_bus 0000:00: root bus resource [bus 00-ff] machine # [ 0.412431] pci 0000:00:00.0: [8086:29c0] type 00 class 0x060000 conventional PCI endpoint machine # [ 0.413989] pci 0000:00:01.0: [1234:1111] type 00 class 0x030000 conventional PCI endpoint machine # [ 0.417313] pci 0000:00:01.0: BAR 0 [mem 0xfd000000-0xfdffffff pref] machine # [ 0.418307] pci 0000:00:01.0: BAR 2 [mem 0xfebd0000-0xfebd0fff] machine # [ 0.419327] pci 0000:00:01.0: ROM [mem 0xfebc0000-0xfebcffff pref] machine # [ 0.420450] pci 0000:00:01.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff] machine # [ 0.422158] pci 0000:00:02.0: [1af4:1000] type 00 class 0x020000 conventional PCI endpoint machine # [ 0.424304] pci 0000:00:02.0: BAR 0 [io 0xc100-0xc11f] machine # [ 0.425297] pci 0000:00:02.0: BAR 1 [mem 0xfebd1000-0xfebd1fff] machine # [ 0.426327] pci 0000:00:02.0: BAR 4 [mem 0xfe000000-0xfe003fff 64bit pref] machine # [ 0.427297] pci 0000:00:02.0: ROM [mem 0xfeb40000-0xfeb7ffff pref] machine # [ 0.429236] pci 0000:00:03.0: [1af4:1005] type 00 class 0x00ff00 conventional PCI endpoint machine # [ 0.431304] pci 0000:00:03.0: BAR 0 [io 0xc120-0xc13f] machine # [ 0.432297] pci 0000:00:03.0: BAR 1 [mem 0xfebd2000-0xfebd2fff] machine # [ 0.433327] pci 0000:00:03.0: BAR 4 [mem 0xfe004000-0xfe007fff 64bit pref] machine # [ 0.435241] pci 0000:00:04.0: [1af4:1001] type 00 class 0x010000 conventional PCI endpoint machine # [ 0.437826] pci 0000:00:04.0: BAR 0 [io 0xc000-0xc07f] machine # [ 0.438297] pci 0000:00:04.0: BAR 1 [mem 0xfebd3000-0xfebd3fff] machine # [ 0.439327] pci 0000:00:04.0: BAR 4 [mem 0xfe008000-0xfe00bfff 64bit pref] machine # [ 0.441258] pci 0000:00:05.0: [1af4:1000] type 00 class 0x020000 conventional PCI endpoint machine # [ 0.444377] pci 0000:00:05.0: BAR 0 [io 0xc140-0xc15f] machine # [ 0.445297] pci 0000:00:05.0: BAR 1 [mem 0xfebd4000-0xfebd4fff] machine # [ 0.446327] pci 0000:00:05.0: BAR 4 [mem 0xfe00c000-0xfe00ffff 64bit pref] machine # [ 0.447298] pci 0000:00:05.0: ROM [mem 0xfeb80000-0xfebbffff pref] machine # [ 0.449228] pci 0000:00:06.0: [1af4:1052] type 00 class 0x090000 conventional PCI endpoint machine # [ 0.451232] pci 0000:00:06.0: BAR 1 [mem 0xfebd5000-0xfebd5fff] machine # [ 0.452337] pci 0000:00:06.0: BAR 4 [mem 0xfe010000-0xfe013fff 64bit pref] machine # [ 0.454249] pci 0000:00:07.0: [1af4:105a] type 00 class 0x018000 conventional PCI endpoint machine # [ 0.456229] pci 0000:00:07.0: BAR 1 [mem 0xfebd6000-0xfebd6fff] machine # [ 0.457329] pci 0000:00:07.0: BAR 4 [mem 0xfe014000-0xfe017fff 64bit pref] machine # [ 0.459284] pci 0000:00:08.0: [1af4:105a] type 00 class 0x018000 conventional PCI endpoint machine # [ 0.461183] pci 0000:00:08.0: BAR 1 [mem 0xfebd7000-0xfebd7fff] machine # [ 0.462340] pci 0000:00:08.0: BAR 4 [mem 0xfe018000-0xfe01bfff 64bit pref] machine # [ 0.464245] pci 0000:00:09.0: [1af4:105a] type 00 class 0x018000 conventional PCI endpoint machine # [ 0.466306] pci 0000:00:09.0: BAR 1 [mem 0xfebd8000-0xfebd8fff] machine # [ 0.467329] pci 0000:00:09.0: BAR 4 [mem 0xfe01c000-0xfe01ffff 64bit pref] machine # [ 0.469225] pci 0000:00:0a.0: [1af4:1003] type 00 class 0x078000 conventional PCI endpoint machine # [ 0.471309] pci 0000:00:0a.0: BAR 0 [io 0xc080-0xc0bf] machine # [ 0.472297] pci 0000:00:0a.0: BAR 1 [mem 0xfebd9000-0xfebd9fff] machine # [ 0.473327] pci 0000:00:0a.0: BAR 4 [mem 0xfe020000-0xfe023fff 64bit pref] machine # [ 0.475411] pci 0000:00:0b.0: [1af4:1005] type 00 class 0x00ff00 conventional PCI endpoint machine # [ 0.477296] pci 0000:00:0b.0: BAR 0 [io 0xc160-0xc17f] machine # [ 0.478297] pci 0000:00:0b.0: BAR 1 [mem 0xfebda000-0xfebdafff] machine # [ 0.479327] pci 0000:00:0b.0: BAR 4 [mem 0xfe024000-0xfe027fff 64bit pref] machine # [ 0.481261] pci 0000:00:1d.0: [8086:2934] type 00 class 0x0c0300 conventional PCI endpoint machine # [ 0.482973] pci 0000:00:1d.0: BAR 4 [io 0xc180-0xc19f] machine # [ 0.483577] pci 0000:00:1d.1: [8086:2935] type 00 class 0x0c0300 conventional PCI endpoint machine # [ 0.484993] pci 0000:00:1d.1: BAR 4 [io 0xc1a0-0xc1bf] machine # [ 0.485557] pci 0000:00:1d.2: [8086:2936] type 00 class 0x0c0300 conventional PCI endpoint machine # [ 0.487974] pci 0000:00:1d.2: BAR 4 [io 0xc1c0-0xc1df] machine # [ 0.488603] pci 0000:00:1d.7: [8086:293a] type 00 class 0x0c0320 conventional PCI endpoint machine # [ 0.489923] pci 0000:00:1d.7: BAR 0 [mem 0xfebdb000-0xfebdbfff] machine # [ 0.490657] pci 0000:00:1f.0: [8086:2918] type 00 class 0x060100 conventional PCI endpoint machine # [ 0.491794] pci 0000:00:1f.0: quirk: [io 0x0600-0x067f] claimed by ICH6 ACPI/GPIO/TCO machine # [ 0.492649] pci 0000:00:1f.2: [8086:2922] type 00 class 0x010601 conventional PCI endpoint machine # [ 0.494225] pci 0000:00:1f.2: BAR 4 [io 0xc1e0-0xc1ff] machine # [ 0.495231] pci 0000:00:1f.2: BAR 5 [mem 0xfebdc000-0xfebdcfff] machine # [ 0.496805] pci 0000:00:1f.3: [8086:2930] type 00 class 0x0c0500 conventional PCI endpoint machine # [ 0.498034] pci 0000:00:1f.3: BAR 4 [io 0x0700-0x073f] machine # [ 0.503393] ACPI: PCI: Interrupt link LNKA configured for IRQ 10 machine # [ 0.504428] ACPI: PCI: Interrupt link LNKB configured for IRQ 10 machine # [ 0.505415] ACPI: PCI: Interrupt link LNKC configured for IRQ 11 machine # [ 0.506425] ACPI: PCI: Interrupt link LNKD configured for IRQ 11 machine # [ 0.507416] ACPI: PCI: Interrupt link LNKE configured for IRQ 10 machine # [ 0.508416] ACPI: PCI: Interrupt link LNKF configured for IRQ 10 machine # [ 0.509427] ACPI: PCI: Interrupt link LNKG configured for IRQ 11 machine # [ 0.510424] ACPI: PCI: Interrupt link LNKH configured for IRQ 11 machine # [ 0.511339] ACPI: PCI: Interrupt link GSIA configured for IRQ 16 machine # [ 0.512300] ACPI: PCI: Interrupt link GSIB configured for IRQ 17 machine # [ 0.513303] ACPI: PCI: Interrupt link GSIC configured for IRQ 18 machine # [ 0.514299] ACPI: PCI: Interrupt link GSID configured for IRQ 19 machine # [ 0.515345] ACPI: PCI: Interrupt link GSIE configured for IRQ 20 machine # [ 0.516433] ACPI: PCI: Interrupt link GSIF configured for IRQ 21 machine # [ 0.517303] ACPI: PCI: Interrupt link GSIG configured for IRQ 22 machine # [ 0.518303] ACPI: PCI: Interrupt link GSIH configured for IRQ 23 machine # [ 0.520019] iommu: Default domain type: Translated machine # [ 0.520292] iommu: DMA domain TLB invalidation policy: lazy mode machine # [ 0.521487] ACPI: bus type USB registered machine # [ 0.522339] usbcore: registered new interface driver usbfs machine # [ 0.523299] usbcore: registered new interface driver hub machine # [ 0.524293] usbcore: registered new device driver usb machine # [ 0.525984] NetLabel: Initializing machine # [ 0.526290] NetLabel: domain hash size = 128 machine # [ 0.527285] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO machine # [ 0.528340] NetLabel: unlabeled traffic allowed by default machine # [ 0.529298] PCI: Using ACPI for IRQ routing machine # [ 0.612570] pci 0000:00:01.0: vgaarb: setting as boot VGA device machine # [ 0.613281] pci 0000:00:01.0: vgaarb: bridge control possible machine # [ 0.613281] pci 0000:00:01.0: vgaarb: VGA device added: decodes=io+mem,owns=io+mem,locks=none machine # [ 0.613287] vgaarb: loaded machine # [ 0.614151] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 machine # [ 0.615165] hpet0: 3 comparators, 64-bit 100.000000 MHz counter machine # [ 0.619364] clocksource: Switched to clocksource kvm-clock machine # [ 0.622765] VFS: Disk quotas dquot_6.6.0 machine # [ 0.623721] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes) machine # [ 0.625371] pnp: PnP ACPI init machine # [ 0.626316] ACPI: IRQ 4 override to edge(!), high(!) machine # [ 0.627537] system 00:04: [mem 0xb0000000-0xbfffffff window] has been reserved machine # [ 0.629515] pnp: PnP ACPI: found 5 devices machine # [ 0.637078] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns machine # [ 0.639013] clocksource: Switched to clocksource acpi_pm machine # [ 0.640329] NET: Registered PF_INET protocol family machine # [ 0.641604] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear) machine # [ 0.656648] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear) machine # [ 0.658612] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear) machine # [ 0.660361] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear) machine # [ 0.662106] TCP bind hash table entries: 8192 (order: 6, 262144 bytes, linear) machine # [ 0.663770] TCP: Hash tables configured (established 8192 bind 8192) machine # [ 0.665234] MPTCP token hash table entries: 1024 (order: 3, 24576 bytes, linear) machine # [ 0.666916] UDP hash table entries: 512 (order: 3, 32768 bytes, linear) machine # [ 0.668429] UDP-Lite hash table entries: 512 (order: 3, 32768 bytes, linear) machine # [ 0.670019] NET: Registered PF_UNIX/PF_LOCAL protocol family machine # [ 0.671368] NET: Registered PF_XDP protocol family machine # [ 0.672503] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window] machine # [ 0.673883] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window] machine # [ 0.675278] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window] machine # [ 0.676779] pci_bus 0000:00: resource 7 [mem 0x40000000-0xafffffff window] machine # [ 0.678298] pci_bus 0000:00: resource 8 [mem 0xc0000000-0xfebfffff window] machine # [ 0.679795] pci_bus 0000:00: resource 9 [mem 0x100000000-0x8ffffffff window] machine # [ 0.681884] ACPI: \_SB_.GSIA: Enabled at IRQ 16 machine # [ 0.684063] ACPI: \_SB_.GSIB: Enabled at IRQ 17 machine # [ 0.686267] ACPI: \_SB_.GSIC: Enabled at IRQ 18 machine # [ 0.688412] ACPI: \_SB_.GSID: Enabled at IRQ 19 machine # [ 0.690274] PCI: CLS 0 bytes, default 64 machine # [ 0.691406] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x6d5818a734c, max_idle_ns: 881590694765 ns machine # [ 0.693646] Trying to unpack rootfs image as initramfs... machine # [ 0.735513] Initialise system trusted keyrings machine # [ 0.738248] workingset: timestamp_bits=40 max_order=18 bucket_order=0 machine # [ 0.757593] Key type asymmetric registered machine # [ 0.758592] Asymmetric key parser 'x509' registered machine # [ 0.762225] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 248) machine # [ 0.766230] io scheduler mq-deadline registered machine # [ 0.769201] io scheduler kyber registered machine # [ 0.770638] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled machine # [ 0.776371] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A machine # [ 0.778943] Linux agpgart interface v0.103 machine # [ 0.779998] ACPI: bus type drm_connector registered machine # [ 0.785542] usbcore: registered new interface driver usbserial_generic machine # [ 0.787005] usbserial: USB Serial support registered for generic machine # [ 0.791198] amd_pstate: the _CPC object is not present in SBIOS or ACPI disabled machine # [ 0.792980] drop_monitor: Initializing network drop monitor service machine # [ 0.797288] NET: Registered PF_INET6 protocol family machine # [ 0.798778] Segment Routing with IPv6 machine # [ 0.802216] In-situ OAM (IOAM) with IPv6 machine # [ 0.803461] IPI shorthand broadcast: enabled machine # [ 0.811547] sched_clock: Marking stable (619024172, 192158393)->(917407510, -106224945) machine # [ 0.817264] registered taskstats version 1 machine # [ 0.818421] Loading compiled-in X.509 certificates machine # [ 0.836190] Demotion targets for Node 0: null machine # [ 0.837329] Key type .fscrypt registered machine # [ 0.840192] Key type fscrypt-provisioning registered machine # [ 0.841452] ima: No TPM chip found, activating TPM-bypass! machine # [ 0.844196] ima: Allocated hash algorithm: sha1 machine # [ 0.845298] ima: No architecture policies found machine # [ 0.850339] PM: Magic number: 14:69:804 machine # [ 0.852034] RAS: Correctable Errors collector initialized. machine # [ 0.860583] clk: Disabling unused clocks machine # [ 0.865193] PM: genpd: Disabling unused power domains machine # [ 0.983864] Freeing initrd memory: 29616K machine # [ 0.987010] Freeing unused decrypted memory: 2028K machine # [ 0.989750] Freeing unused kernel image (initmem) memory: 3660K machine # [ 0.991199] Write protecting the kernel read-only data: 32768k machine # [ 0.992805] Freeing unused kernel image (text/rodata gap) memory: 296K machine # [ 0.994620] Freeing unused kernel image (rodata/data gap) memory: 684K machine # [ 1.036007] x86/mm: Checked W+X mappings: passed, no W+X pages found. machine # [ 1.037514] Run /init as init process machine # [ 1.046847] systemd[1]: Inserted module 'autofs4' machine # [ 1.065209] fuse: init (API version 7.45) machine # [ 1.072143] ACPI: \_SB_.GSIG: Enabled at IRQ 22 machine # [ 1.074916] ACPI: \_SB_.GSIH: Enabled at IRQ 23 machine # [ 1.078500] ACPI: \_SB_.GSIE: Enabled at IRQ 20 machine # [ 1.081022] ACPI: \_SB_.GSIF: Enabled at IRQ 21 machine # [ 1.086929] virtiofs virtio5: discovered new tag: nix-store machine # [ 1.089206] virtiofs virtio5: virtio_fs_setup_dax: No cache capability machine # [ 1.097038] virtiofs virtio6: discovered new tag: shared machine # [ 1.099315] virtiofs virtio6: virtio_fs_setup_dax: No cache capability machine # [ 1.103238] virtiofs virtio7: discovered new tag: xchg machine # [ 1.105522] virtiofs virtio7: virtio_fs_setup_dax: No cache capability machine # [ 1.125908] systemd[1]: Successfully made /usr/ read-only. machine # [ 1.462709] systemd[1]: systemd 261.3 running in system mode (+PAM +AUDIT -SELINUX +APPARMOR +IMA +IPE +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 +KMOD +LIBCRYPTSETUP +LIBCRYPTSETUP_PLUGINS +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +BPF_FRAMEWORK -BTF -XKBCOMMON +UTMP +LIBARCHIVE) machine # [ 1.471774] systemd[1]: Detected virtualization kvm. machine # [ 1.473137] systemd[1]: Detected architecture x86-64. machine # [ 1.474435] systemd[1]: Running in initrd. machine # [ 1.475632] systemd[1]: Initializing machine ID from random generator. machine # [ 1.477207] systemd[1]: Hostname set to . machine # [ 1.544194] systemd[1]: bpf-restrict-fs: LSM BPF program attached machine # [ 1.577666] systemd[1]: Queued start job for default target Initrd Default Target. machine # [ 1.582465] systemd[1]: Created slice Slice /system/modprobe. machine # [ 1.584019] systemd[1]: Started Dispatch Password Requests to Console Directory Watch. machine # [ 1.585889] systemd[1]: Expecting device /dev/disk/by-label/nixos... machine # [ 1.587421] systemd[1]: Reached target Path Units. machine # [ 1.588611] systemd[1]: Reached target Slice Units. machine # [ 1.589810] systemd[1]: Reached target Swaps. machine # [ 1.590924] systemd[1]: Reached target Timer Units. machine # [ 1.592257] systemd[1]: Listening on D-Bus System Message Bus Socket. machine # [ 1.593844] systemd[1]: Listening on Journal Socket (/dev/log). machine # [ 1.595389] systemd[1]: Listening on Journal Sockets. machine # [ 1.596727] systemd[1]: Listening on udev Control Socket. machine # [ 1.598098] systemd[1]: Listening on udev Kernel Socket. machine # [ 1.599423] systemd[1]: Reached target Socket Units. machine # [ 1.601365] systemd[1]: Starting Create List of Static Device Nodes... machine # [ 1.608374] systemd[1]: Starting Load Kernel Module configfs... machine # [ 1.619613] systemd[1]: Starting Journal Service... machine # [ 1.637241] systemd[1]: Starting Load Kernel Modules... machine # [ 1.643278] systemd[1]: Early TPM SRK Setup skipped, unmet condition check ConditionSecurity=measured-os machine # [ 1.651352] systemd[1]: Starting Coldplug All udev Devices... machine # [ 1.654136] systemd-journald[65]: Collecting audit messages is disabled. machine # [ 1.666576] systemd[1]: Finished Create List of Static Device Nodes. machine # [ 1.673755] systemd[1]: modprobe@configfs.service: Deactivated successfully. machine # [ 1.682695] systemd[1]: Finished Load Kernel Module configfs. machine # [ 1.689626] systemd[1]: Kernel Configuration File System skipped, unmet condition check ConditionPathExists=/sys/kernel/config machine # [ 1.693322] device-mapper: core: CONFIG_IMA_DISABLE_HTABLE is disabled. Duplicate IMA measurements will not be recorded in the IMA log. machine # [ 1.701880] systemd[1]: Starting Create Static Device Nodes in /dev gracefully... machine # [ 1.706291] device-mapper: ioctl: 4.50.0-ioctl (2025-04-28) initialised: dm-devel@lists.linux.dev machine # [ 1.736751] systemd[1]: Finished Create Static Device Nodes in /dev gracefully. machine # [ 1.745259] systemd[1]: Finished Load Kernel Modules. machine # [ 1.752249] systemd[1]: Starting Apply Kernel Variables... machine # [ 1.763765] systemd[1]: Starting Create Static Device Nodes in /dev... machine # [ 1.780236] systemd[1]: Finished Apply Kernel Variables. machine # [ 1.793863] systemd[1]: Finished Create Static Device Nodes in /dev. machine # [ 1.798457] systemd[1]: Reached target Preparation for Local File Systems. machine # [ 1.804263] systemd[1]: Reached target Local File Systems. machine # [ 1.811235] systemd[1]: Starting Rule-based Manager for Device Events and Files... machine # [ 1.617816] systemd-modules-load[66]: Inserted module 'dm_mod' machine # [ 1.623299] systemd-modules-load[66]: Inserted module 'virtio_balloon' machine # [ 1.624704] systemd-modules-load[66]: Inserted module 'virtio_gpu' machine # [ 1.823352] systemd[1]: Started Journal Service. machine # [ 1.647642] systemd[1]: Starting Create System Files and Directories... machine # [ 1.670204] systemd[1]: Finished Create System Files and Directories. machine # [ 1.674219] systemd-udevd[73]: Using default interface naming scheme 'v261'. machine # [ 1.701081] systemd[1]: Started Rule-based Manager for Device Events and Files. machine # [ 1.726274] systemd[1]: Finished Coldplug All udev Devices. machine # [ 1.727817] systemd[1]: Reached target System Initialization. machine # [ 1.730331] systemd[1]: Reached target Basic System. machine # [ 2.148820] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12 machine # [ 2.150452] virtio_blk virtio2: 1/0/0 default/read/poll queues machine # [ 2.157620] virtio_blk virtio2: [vda] 2097152 512-byte logical blocks (1.07 GB/1.00 GiB) machine # [ 2.162957] serio: i8042 KBD port at 0x60,0x64 irq 1 machine # [ 2.167219] serio: i8042 AUX port at 0x60,0x64 irq 12 machine # [ 2.173711] uhci_hcd 0000:00:1d.0: UHCI Host Controller machine # [ 2.184032] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 1 machine # [ 2.192532] uhci_hcd 0000:00:1d.0: detected 2 ports machine # [ 2.196043] uhci_hcd 0000:00:1d.0: irq 16, io port 0x0000c180 machine # [ 2.198234] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 6.18 machine # [ 2.199633] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 machine # [ 2.210028] usb usb1: Product: UHCI Host Controller machine # [ 2.212381] SCSI subsystem initialized machine # [ 2.214840] usb usb1: Manufacturer: Linux 6.18.56 uhci_hcd machine # [ 2.218283] usb usb1: SerialNumber: 0000:00:1d.0 machine # [ 2.222000] hub 1-0:1.0: USB hub found machine # [ 2.224734] hub 1-0:1.0: 2 ports detected machine # [ 2.228540] ehci-pci 0000:00:1d.7: EHCI Host Controller machine # [ 2.229490] ehci-pci 0000:00:1d.7: new USB bus registered, assigned bus number 2 machine # [ 2.231513] ehci-pci 0000:00:1d.7: irq 19, io mem 0xfebdb000 machine # [ 2.239211] ehci-pci 0000:00:1d.7: USB 2.0 started, EHCI 1.00 machine # [ 2.242210] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 6.18 machine # [ 2.243616] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1 machine # [ 2.248551] usb usb2: Product: EHCI Host Controller machine # [ 2.250190] usb usb2: Manufacturer: Linux 6.18.56 ehci_hcd machine # [ 2.251111] usb usb2: SerialNumber: 0000:00:1d.7 machine # [ 2.254459] hub 2-0:1.0: USB hub found machine # [ 2.063868] systemd[1]: Starting Virtual Console Setup... machine # [ 2.258180] hub 2-0:1.0: 6 ports detected machine # [ 2.086677] systemd-vconsole-setup[96]: Configuration of first virtual console was skipped, ignoring remaining ones. machine # [ 2.090261] systemd[1]: Finished Virtual Console Setup. machine # [ 2.283886] hub 1-0:1.0: USB hub found machine # [ 2.284882] hub 1-0:1.0: 2 ports detected machine # [ 2.286593] uhci_hcd 0000:00:1d.1: UHCI Host Controller machine # [ 2.287532] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 3 machine # [ 2.293122] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0 machine # [ 2.306457] uhci_hcd 0000:00:1d.1: detected 2 ports machine # [ 2.117560] (udev-worker)[87]: eth1: Config file /etc/systemd/network/40-eth1.link is applied to device based on potentially unpredictable interface name. machine # [ 2.120836] (udev-worker)[87]: Network interface NamePolicy= disabled on kernel command line. machine # [ 2.123418] (udev-worker)[93]: Network interface NamePolicy= disabled on kernel command line. machine # [ 2.323016] uhci_hcd 0000:00:1d.1: irq 17, io port 0x0000c1a0 machine # [ 2.328177] usb usb3: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 6.18 machine # [ 2.329608] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1 machine # [ 2.344610] usb usb3: Product: UHCI Host Controller machine # [ 2.159546] systemd[1]: Found device /dev/disk/by-label/nixos. machine # [ 2.160901] systemd[1]: Reached target Initrd Root Device. machine # [ 2.354847] usb usb3: Manufacturer: Linux 6.18.56 uhci_hcd machine # [ 2.164078] systemd[1]: Starting File System Check on /dev/disk/by-label/nixos... machine # [ 2.359235] usb usb3: SerialNumber: 0000:00:1d.1 machine # [ 2.362385] hub 3-0:1.0: USB hub found machine # [ 2.363547] hub 3-0:1.0: 2 ports detected machine # [ 2.374810] uhci_hcd 0000:00:1d.2: UHCI Host Controller machine # [ 2.377207] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 4 machine # [ 2.380401] uhci_hcd 0000:00:1d.2: detected 2 ports machine # [ 2.384328] uhci_hcd 0000:00:1d.2: irq 18, io port 0x0000c1c0 machine # [ 2.194291] systemd-fsck[104]: nixos: clean, 12/65536 files, 13019/262144 blocks machine # [ 2.389749] usb usb4: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 6.18 machine # [ 2.394827] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1 machine # [ 2.396431] usb usb4: Product: UHCI Host Controller machine # [ 2.399242] usb usb4: Manufacturer: Linux 6.18.56 uhci_hcd machine # [ 2.402162] usb usb4: SerialNumber: 0000:00:1d.2 machine # [ 2.403520] hub 4-0:1.0: USB hub found machine # [ 2.404415] hub 4-0:1.0: 2 ports detected machine # [ 2.407513] ahci 0000:00:1f.2: AHCI vers 0001.0000, 32 command slots, 1.5 Gbps, SATA mode machine # [ 2.218882] systemd[1]: Finished File System Check on /dev/disk/by-label/nixos. machine # [ 2.423378] ahci 0000:00:1f.2: 6/6 ports implemented (port mask 0x3f) machine # [ 2.428093] ahci 0000:00:1f.2: flags: 64bit ncq only machine # [ 2.437814] scsi host0: ahci machine # [ 2.439408] scsi host1: ahci machine # [ 2.442231] scsi host2: ahci machine # [ 2.445925] scsi host3: ahci machine # [ 2.448610] scsi host4: ahci machine # [ 2.452815] scsi host5: ahci machine # [ 2.456289] ata1: SATA max UDMA/133 abar m4096@0xfebdc000 port 0xfebdc100 irq 47 lpm-pol 1 machine # [ 2.461186] ata2: SATA max UDMA/133 abar m4096@0xfebdc000 port 0xfebdc180 irq 47 lpm-pol 1 machine # [ 2.465756] ata3: SATA max UDMA/133 abar m4096@0xfebdc000 port 0xfebdc200 irq 47 lpm-pol 1 machine # [ 2.467177] ata4: SATA max UDMA/133 abar m4096@0xfebdc000 port 0xfebdc280 irq 47 lpm-pol 1 machine # [ 2.470261] ata5: SATA max UDMA/133 abar m4096@0xfebdc000 port 0xfebdc300 irq 47 lpm-pol 1 machine # [ 2.472010] ata6: SATA max UDMA/133 abar m4096@0xfebdc000 port 0xfebdc380 irq 47 lpm-pol 1 machine # [ 2.500266] usb 2-1: new high-speed USB device number 2 using ehci-pci machine # [ 2.630614] usb 2-1: New USB device found, idVendor=0627, idProduct=0001, bcdDevice= 0.00 machine # [ 2.632650] usb 2-1: New USB device strings: Mfr=1, Product=3, SerialNumber=10 machine # [ 2.634854] usb 2-1: Product: QEMU USB Tablet machine # [ 2.636274] usb 2-1: Manufacturer: QEMU machine # [ 2.637512] usb 2-1: SerialNumber: 28754-0000:00:1d.7-1 machine # [ 2.651848] hid: raw HID events driver (C) Jiri Kosina machine # [ 2.471306] systemd[1]: Mounting /sysroot... machine # [ 2.781258] ata1: SATA link down (SStatus 0 SControl 300) machine # [ 2.788553] ata4: SATA link down (SStatus 0 SControl 300) machine # [ 2.790531] ata5: SATA link down (SStatus 0 SControl 300) machine # [ 2.792261] ata2: SATA link down (SStatus 0 SControl 300) machine # [ 2.793963] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 300) machine # [ 2.795660] ata3.00: ATAPI: QEMU DVD-ROM, 2.5+, max UDMA/100 machine # [ 2.797509] ata3.00: applying bridge limits machine # [ 2.798859] ata6: SATA link down (SStatus 0 SControl 300) machine # [ 2.800282] ata3.00: configured for UDMA/100 machine # [ 2.801546] scsi 2:0:0:0: CD-ROM QEMU QEMU DVD-ROM 2.5+ PQ: 0 ANSI: 5 machine # [ 2.853636] usbcore: registered new interface driver usbhid machine # [ 2.863152] usbhid: USB HID core driver machine # [ 2.884713] input: QEMU QEMU USB Tablet as /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0/0003:0627:0001.0001/input/input2 machine # [ 2.892217] hid-generic 0003:0627:0001.0001: input,hidraw0: USB HID v0.01 Mouse [QEMU QEMU USB Tablet] on usb-0000:00:1d.7-1/input0 machine # [ 2.897350] sr 2:0:0:0: [sr0] scsi3-mmc drive: 4x/4x cd/rw xa/form2 tray machine # [ 2.906086] EXT4-fs (vda): mounted filesystem 858f7ad9-9b65-40fc-a826-cf1304c8a6f2 r/w with ordered data mode. Quota mode: none. machine # [ 2.912165] cdrom: Uniform CD-ROM driver Revision: 3.20 machine # [ 2.722085] systemd[1]: Mounted /sysroot. machine # [ 2.723041] systemd[1]: Reached target Initrd Root File System. machine # [ 2.726136] systemd[1]: Starting Mountpoints Configured in the Real Root... machine # [ 2.743239] systemd-sysroot-fstab-check[136]: /sysroot should be mounted in the initrd, will request daemon-reload. machine # [ 2.746116] systemd[1]: Reload requested from client PID 136 ('systemd-sysroot') (unit initrd-parse-etc.service)... machine # [ 2.748127] systemd[1]: Reloading... machine # [ 2.819849] systemd[1]: Reloading finished in 73 ms. machine # [ 2.830332] systemd-sysroot-fstab-check[136]: Requesting initrd-fs.target/start/replace... machine # [ 2.835190] systemd-sysroot-fstab-check[136]: Requesting swap.target/start/replace... machine # [ 2.839918] systemd[1]: initrd-parse-etc.service: Deactivated successfully. machine # [ 2.841858] systemd[1]: Finished Mountpoints Configured in the Real Root. machine # [ 2.843590] systemd[1]: initrd-parse-etc.service: Triggering OnSuccess= dependencies. machine # [ 3.472290] systemd[1]: Mounting /sysroot/nix/.ro-store... machine # [ 3.476138] systemd[1]: Mounting /sysroot/nix/.rw-store... machine # [ 3.481166] systemd[1]: Mounting /sysroot/run... machine # [ 3.485928] systemd[1]: Mounting /sysroot/tmp/shared... machine # [ 3.491148] systemd[1]: Mounting /sysroot/tmp/xchg... machine # [ 3.508443] systemd[1]: Mounted /sysroot/nix/.rw-store. machine # [ 3.513162] systemd[1]: Starting rw-sysroot-nix-store.service... machine # [ 3.519785] systemd[1]: Mounted /sysroot/nix/.ro-store. machine # [ 3.522699] systemd[1]: Mounted /sysroot/run. machine # [ 3.526119] systemd[1]: Mounted /sysroot/tmp/shared. machine # [ 3.527272] systemd[1]: Mounted /sysroot/tmp/xchg. machine # [ 3.533671] systemd[1]: rw-sysroot-nix-store.service: Deactivated successfully. machine # [ 3.536134] systemd[1]: Finished rw-sysroot-nix-store.service. machine # [ 3.537621] systemd[1]: Mounting /sysroot/nix/store... machine # [ 3.557341] systemd[1]: Mounted /sysroot/nix/store. machine # [ 3.558657] systemd[1]: Reached target Initrd File Systems. machine # [ 3.560555] systemd[1]: Starting Find NixOS closure... machine # [ 3.563506] systemd[1]: Starting Create Volatile Files and Directories in the Real Root... machine # [ 3.577849] systemd[1]: Finished Create Volatile Files and Directories in the Real Root. machine # [ 3.585391] systemd[1]: Finished Find NixOS closure. machine # [ 3.587234] systemd[1]: Reached target Initrd Default Target. machine # [ 3.588815] systemd[1]: Starting Cleaning Up and Shutting Down Daemons... machine # [ 3.600337] systemd[1]: Stopped target Initrd Default Target. machine # [ 3.601765] systemd[1]: Stopped target Basic System. machine # [ 3.603196] systemd[1]: Stopped target Initrd Root Device. machine # [ 3.605148] systemd[1]: Stopped target Path Units. machine # [ 3.606158] systemd[1]: systemd-ask-password-console.path: Deactivated successfully. machine # [ 3.607677] systemd[1]: Stopped Dispatch Password Requests to Console Directory Watch. machine # [ 3.609174] systemd[1]: Stopped target Slice Units. machine # [ 3.610709] systemd[1]: Stopped target Socket Units. machine # [ 3.612279] systemd[1]: Stopped target System Initialization. machine # [ 3.613798] systemd[1]: Stopped target Swaps. machine # [ 3.615181] systemd[1]: Stopped target Timer Units. machine # [ 3.616255] systemd[1]: dbus.socket: Deactivated successfully. machine # [ 3.617745] systemd[1]: Closed D-Bus System Message Bus Socket. machine # [ 3.619171] systemd[1]: initrd-find-nixos-closure.service: Deactivated successfully. machine # [ 3.621162] systemd[1]: Stopped Find NixOS closure. machine # [ 3.622243] systemd[1]: Starting rw-sysroot-nix-store.service... machine # [ 3.624154] systemd[1]: systemd-sysctl.service: Deactivated successfully. machine # [ 3.625472] systemd[1]: Stopped Apply Kernel Variables. machine # [ 3.626555] systemd[1]: systemd-modules-load.service: Deactivated successfully. machine # [ 3.628241] systemd[1]: Stopped Load Kernel Modules. machine # [ 3.630165] systemd[1]: systemd-tmpfiles-setup-sysroot.service: Deactivated successfully. machine # [ 3.631637] systemd[1]: Stopped Create Volatile Files and Directories in the Real Root. machine # [ 3.633124] systemd[1]: systemd-tmpfiles-setup.service: Deactivated successfully. machine # [ 3.635137] systemd[1]: Stopped Create System Files and Directories. machine # [ 3.636461] systemd[1]: Stopped target Local File Systems. machine # [ 3.637592] systemd[1]: Stopped target Preparation for Local File Systems. machine # [ 3.639169] systemd[1]: systemd-udev-trigger.service: Deactivated successfully. machine # [ 3.641104] systemd[1]: Stopped Coldplug All udev Devices. machine # [ 3.643176] systemd[1]: Stopping Rule-based Manager for Device Events and Files... machine # [ 3.645095] systemd[1]: systemd-vconsole-setup.service: Deactivated successfully. machine # [ 3.647176] systemd[1]: Stopped Virtual Console Setup. machine # [ 3.655334] systemd[1]: initrd-cleanup.service: Deactivated successfully. machine # [ 3.659928] systemd[1]: Finished Cleaning Up and Shutting Down Daemons. machine # [ 3.662304] systemd[1]: systemd-udevd.service: Deactivated successfully. machine # [ 3.664242] systemd[1]: Stopped Rule-based Manager for Device Events and Files. machine # [ 3.666239] systemd[1]: rw-sysroot-nix-store.service: Deactivated successfully. machine # [ 3.668181] systemd[1]: Finished rw-sysroot-nix-store.service. machine # [ 3.671096] systemd[1]: systemd-udevd-control.socket: Deactivated successfully. machine # [ 3.672538] systemd[1]: Closed udev Control Socket. machine # [ 3.673955] systemd[1]: Starting Cleanup udev Database... machine # [ 3.675182] systemd[1]: systemd-tmpfiles-setup-dev.service: Deactivated successfully. machine # [ 3.677223] systemd[1]: Stopped Create Static Device Nodes in /dev. machine # [ 3.678560] systemd[1]: systemd-tmpfiles-setup-dev-early.service: Deactivated successfully. machine # [ 3.680655] systemd[1]: Stopped Create Static Device Nodes in /dev gracefully. machine # [ 3.682078] systemd[1]: kmod-static-nodes.service: Deactivated successfully. machine # [ 3.684144] systemd[1]: Stopped Create List of Static Device Nodes. machine # [ 3.695809] systemd[1]: initrd-udevadm-cleanup-db.service: Deactivated successfully. machine # [ 3.697878] systemd[1]: Finished Cleanup udev Database. machine # [ 3.700197] systemd[1]: Reached target Switch Root. machine # [ 3.701654] systemd[1]: Starting NixOS Activation... machine # [ 3.756081] initrd-nixos-activation-start[188]: booting system configuration /nix/store/inm9dbmkpl9sj3v93dyqq18j9q2kdd6a-nixos-system-machine-test machine # [ 3.780250] initrd-nixos-activation-start[188]: running activation script... machine # [ 3.946576] initrd-nixos-activation-start[211]: setting up /etc... machine # [ 4.043081] systemd[1]: initrd-nixos-activation.service: Deactivated successfully. machine # [ 4.046052] systemd[1]: Finished NixOS Activation. machine # [ 4.047394] systemd[1]: Starting Switch Root... machine # [ 4.058950] systemd[1]: Switching root. machine # [ 4.376376] systemd-journald[65]: Received SIGTERM from PID 1 (systemd). machine # [ 4.507391] NET: Registered PF_VSOCK protocol family machine # [ 4.861803] systemd[1]: systemd 261.3 running in system mode (+PAM +AUDIT -SELINUX +APPARMOR +IMA +IPE +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 +KMOD +LIBCRYPTSETUP +LIBCRYPTSETUP_PLUGINS +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +BPF_FRAMEWORK -BTF -XKBCOMMON +UTMP +LIBARCHIVE) machine # [ 4.868737] systemd[1]: Detected virtualization kvm. machine # [ 4.869945] systemd[1]: Detected architecture x86-64. machine # [ 4.871138] systemd[1]: Detected first boot. machine # [ 4.872818] systemd[1]: Initializing machine ID from random generator. machine # [ 4.963223] systemd[1]: bpf-restrict-fs: LSM BPF program attached machine # [ 5.032214] systemd[1]: Applying preset policy. machine # [ 5.188554] systemd[1]: Populated /etc with preset unit settings. machine # [ 5.373993] systemd[1]: initrd-switch-root.service: Deactivated successfully. machine # [ 5.376616] systemd[1]: Stopped initrd-switch-root.service. machine # [ 5.380508] systemd[1]: systemd-journald.service: Scheduled restart job, restart counter is at 1. machine # [ 5.383949] systemd[1]: Created slice Slice /system/getty. machine # [ 5.386293] systemd[1]: Created slice User and Session Slice. machine # [ 5.387947] systemd[1]: Started Dispatch Password Requests to Console Directory Watch. machine # [ 5.389896] systemd[1]: Started Forward Password Requests to Wall Directory Watch. machine # [ 5.391536] systemd[1]: Expecting device /dev/hvc0... machine # [ 5.392564] systemd[1]: Expecting device /dev/ttyS0... machine # [ 5.393605] systemd[1]: Reached target Local Encrypted Volumes. machine # [ 5.394687] systemd[1]: Stopped target initrd-fs.target. machine # [ 5.395685] systemd[1]: Stopped target initrd-root-fs.target. machine # [ 5.396750] systemd[1]: Stopped target initrd-switch-root.target. machine # [ 5.397895] systemd[1]: Reached target Virtual Machines and Containers. machine # [ 5.399136] systemd[1]: Reached target Path Units. machine # [ 5.409900] systemd[1]: Reached target Remote File Systems. machine # [ 5.410959] systemd[1]: Reached target Slice Units. machine # [ 5.411927] systemd[1]: Reached target Swaps. machine # [ 5.413846] systemd[1]: Listening on Query the User Interactively for a Password. machine # [ 5.416526] systemd[1]: Listening on Process Core Dump Socket. machine # [ 5.418601] systemd[1]: Listening on Credential Encryption/Decryption. machine # [ 5.420740] systemd[1]: Listening on Factory Reset Management. machine # [ 5.421956] systemd[1]: Listening on Hostname Service Socket. machine # [ 5.424676] systemd[1]: Starting Journal Log Access Socket... machine # [ 5.426215] systemd[1]: Listening on Journal Audit Socket. machine # [ 5.429023] systemd[1]: Listening on Console Output Muting Service Socket. machine # [ 5.430440] systemd[1]: Listening on Userspace Out-Of-Memory (OOM) Killer Socket. machine # [ 5.431834] systemd[1]: TPM PCR Measurements skipped, unmet condition check ConditionSecurity=measured-os machine # [ 5.433516] systemd[1]: Make TPM PCR Policy skipped, unmet condition check ConditionSecurity=measured-uki machine # [ 5.437680] systemd[1]: Listening on Disk Repartitioning Service Socket. machine # [ 5.439002] systemd[1]: Listening on udev Control Socket. machine # [ 5.440169] systemd[1]: Listening on udev Varlink Socket. machine # [ 5.442324] systemd[1]: Mounting Huge Pages File System... machine # [ 5.446244] systemd[1]: Mounting POSIX Message Queue File System... machine # [ 5.453249] systemd[1]: Mounting Kernel Debug File System... machine # [ 5.460329] systemd[1]: Mounting Kernel Trace File System... machine # [ 5.474766] systemd[1]: Starting Create List of Static Device Nodes... machine # [ 5.487747] systemd[1]: Starting Load Kernel Module configfs... machine # [ 5.496208] systemd[1]: Load Kernel Module drm skipped, unmet condition check ConditionKernelModuleLoaded=!drm machine # [ 5.504371] systemd[1]: Load Kernel Module efi_pstore skipped, unmet condition check ConditionKernelModuleLoaded=!efi_pstore machine # [ 5.509356] systemd[1]: Load Kernel Module fuse skipped, unmet condition check ConditionKernelModuleLoaded=!fuse machine # [ 5.518265] systemd[1]: Mounting FUSE Control File System... machine # [ 5.520185] systemd[1]: Clear Stale Hibernate Storage Info skipped, unmet condition check ConditionPathExists=/sys/firmware/efi/efivars/HibernateLocation-8cf2644b-4b0b-428f-9387-6d876050dc67 machine # [ 5.531941] systemd[1]: Starting Journal Service... machine # [ 5.537900] systemd[1]: Starting Load Kernel Modules... machine # [ 5.546799] systemd[1]: Starting Userspace Out-Of-Memory (OOM) Killer... machine # [ 5.553644] systemd[1]: Starting Remount Root and Kernel File Systems... machine # [ 5.556299] systemd[1]: Early TPM SRK Setup skipped, unmet condition check ConditionSecurity=measured-os machine # [ 5.567201] systemd[1]: Starting Coldplug All udev Devices... machine # [ 5.568930] systemd-journald[281]: Collecting audit messages is enabled. machine # [ 5.586998] systemd[1]: Listening on Journal Log Access Socket. machine # [ 5.595367] systemd[1]: Mounted Huge Pages File System. machine # [ 5.600440] systemd[1]: Mounted POSIX Message Queue File System. machine # [ 5.410239] systemd[1]: Queued start job for default target Multi-User System. machine # [ 5.413446] systemd[1]: systemd-journald.service: Deactivated successfully. machine # [ 5.609663] systemd[1]: Started Journal Service. machine # [ 5.423651] systemd[1]: Mounted Kernel Debug File System. machine # [ 5.425480] systemd[1]: Mounted Kernel Trace File System. machine # [ 5.619271] loop: module loaded machine # [ 5.430935] systemd-modules-load[282]: Inserted module 'loop' machine # [ 5.628140] EXT4-fs (vda): re-mounted 858f7ad9-9b65-40fc-a826-cf1304c8a6f2. machine # [ 5.435996] systemd[1]: Finished Create List of Static Device Nodes. machine # [ 5.439469] systemd[1]: modprobe@configfs.service: Deactivated successfully. machine # [ 5.444466] systemd[1]: Finished Load Kernel Module configfs. machine # [ 5.446431] systemd[1]: Mounted FUSE Control File System. machine # [ 5.454115] systemd[1]: Finished Load Kernel Modules. machine # [ 5.460971] systemd[1]: Finished Remount Root and Kernel File Systems. machine # [ 5.471091] systemd[1]: Listening on Disk Image Download Service Socket. machine # [ 5.477087] systemd[1]: Mounting Kernel Configuration File System... machine # [ 5.482081] systemd[1]: Starting Firewall... machine # [ 5.493046] systemd[1]: Starting Flush Journal to Persistent Storage... machine # [ 5.494374] systemd[1]: Platform Persistent Storage Archival skipped, unmet condition check ConditionDirectoryNotEmpty=/sys/fs/pstore machine # [ 5.507717] systemd[1]: Starting Load/Save OS Random Seed... machine # [ 5.516854] systemd[1]: Starting Apply Kernel Variables... machine # [ 5.521393] systemd-oomd[284]: No swap; memory pressure usage will be degraded machine # [ 5.534765] systemd[1]: Starting Create Static Device Nodes in /dev gracefully... machine # [ 5.536238] systemd[1]: TPM SRK Setup skipped, unmet condition check ConditionSecurity=measured-os machine # [ 5.537866] systemd[1]: Started Userspace Out-Of-Memory (OOM) Killer. machine # [ 5.745280] systemd-journald[281]: Received client request to flush runtime journal. machine # [ 5.724795] systemd[1]: Mounted Kernel Configuration File System. machine # [ 5.728856] systemd[1]: Finished Load/Save OS Random Seed. machine # [ 5.732170] systemd[1]: Reached target First Boot Complete. machine # [ 5.733457] systemd[1]: Finished Apply Kernel Variables. machine # [ 5.737240] systemd[1]: Finished Flush Journal to Persistent Storage. machine # [ 5.739177] systemd[1]: Finished Create Static Device Nodes in /dev gracefully. machine # [ 5.746718] systemd[1]: Starting Create Static Device Nodes in /dev... machine # [ 5.791601] systemd[1]: Finished Coldplug All udev Devices. machine # [ 5.801727] systemd[1]: Finished Create Static Device Nodes in /dev. machine # [ 5.803533] systemd[1]: Reached target Preparation for Local File Systems. machine # [ 5.806751] systemd[1]: Starting Rule-based Manager for Device Events and Files... machine # [ 5.844450] systemd-udevd[325]: Using default interface naming scheme 'v261'. machine # [ 5.892213] systemd[1]: Started Rule-based Manager for Device Events and Files. machine # [ 6.020961] systemd[1]: Load Kernel Module fuse skipped, unmet condition check ConditionKernelModuleLoaded=!fuse machine # [ 6.103149] systemd[1]: Condition check resulted in /dev/hvc0 being skipped. machine # [ 6.133996] systemd[1]: Condition check resulted in /dev/ttyS0 being skipped. machine # [ 6.157296] (udev-worker)[356]: eth1: Config file /etc/systemd/network/40-eth1.link is applied to device based on potentially unpredictable interface name. machine # [ 6.161140] (udev-worker)[356]: Network interface NamePolicy= disabled on kernel command line. machine # [ 6.165255] (udev-worker)[347]: Network interface NamePolicy= disabled on kernel command line. machine # [ 6.186452] systemd[1]: Mounting /run/wrappers... machine # [ 6.221421] systemd[1]: Mounted /run/wrappers. machine # [ 6.222403] systemd[1]: Reached target Local File Systems. machine # [ 6.225952] systemd[1]: Listening on Boot Loader Control Service Socket. machine # [ 6.231400] systemd[1]: Starting register-nix-paths.service... machine # [ 6.234890] systemd[1]: Starting Create SUID/SGID Wrappers... machine # [ 6.236065] systemd[1]: Update Boot Loader Random Seed skipped, no trigger condition checks were met. machine # [ 6.242840] systemd[1]: Starting Save Transient machine-id to Disk... machine # [ 6.258089] systemd[1]: Starting Create System Files and Directories... machine # [ 6.349184] systemd[1]: etc-machine\x2did.mount: Deactivated successfully. machine # [ 6.358298] systemd[1]: Finished Save Transient machine-id to Disk. machine # [ 6.377410] systemd[1]: Condition check resulted in Virtio network device being skipped. machine # [ 6.378932] systemd[1]: Load Kernel Module efi_pstore skipped, unmet condition check ConditionKernelModuleLoaded=!efi_pstore machine # [ 6.383897] systemd[1]: Update Boot Loader Random Seed skipped, no trigger condition checks were met. machine # [ 6.386935] systemd[1]: Clear Stale Hibernate Storage Info skipped, unmet condition check ConditionPathExists=/sys/firmware/efi/efivars/HibernateLocation-8cf2644b-4b0b-428f-9387-6d876050dc67 machine # [ 6.390281] systemd[1]: Platform Persistent Storage Archival skipped, unmet condition check ConditionDirectoryNotEmpty=/sys/fs/pstore machine # [ 6.393282] systemd[1]: Early TPM SRK Setup skipped, unmet condition check ConditionSecurity=measured-os machine # [ 6.395789] systemd[1]: TPM SRK Setup skipped, unmet condition check ConditionSecurity=measured-os machine # [ 6.398634] systemd[1]: Finished Create System Files and Directories. machine # [ 6.407381] systemd[1]: Starting Rebuild Journal Catalog... machine # [ 6.415986] systemd[1]: Starting Record System Boot/Shutdown in UTMP... machine # [ 6.509053] systemd[1]: Finished Record System Boot/Shutdown in UTMP. machine # [ 6.521986] systemd[1]: Finished Rebuild Journal Catalog. machine # [ 6.530119] systemd[1]: Starting Update is Completed... machine # [ 6.592207] systemd[1]: Finished Update is Completed. machine # [ 6.680122] systemd[1]: Finished Firewall. machine # [ 6.894300] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3 machine # [ 6.904483] bochs-drm 0000:00:01.0: vgaarb: deactivate vga console machine # [ 6.759404] systemd[1]: suid-sgid-wrappers.service: Deactivated successfully. machine # [ 6.761511] systemd[1]: Finished Create SUID/SGID Wrappers. machine # [ 6.929542] ACPI: button: Power Button [PWRF] machine # [ 6.932022] mousedev: PS/2 mouse device common for all mice machine # [ 6.986972] rtc_cmos PNP0B00:00: RTC can wake from S4 machine # [ 7.014160] rtc_cmos PNP0B00:00: registered as rtc0 machine # [ 7.014256] rtc_cmos PNP0B00:00: setting system clock to 2026-10-21T21:47:14 UTC (1792619234) machine # [ 7.014346] rtc_cmos PNP0B00:00: alarms up to one day, y3k, 242 bytes nvram, hpet irqs machine # [ 7.015283] systemd-journald[281]: Time jumped backwards, rotating. machine # [ 7.020651] parport_pc 00:02: reported by Plug and Play ACPI machine # [ 6.920943] systemd[1]: Finished register-nix-paths.service. machine # [ 6.922685] systemd[1]: Reached target System Initialization. machine # [ 6.925503] systemd[1]: Started Discard unused filesystem blocks once a week. machine # [ 6.927205] systemd[1]: Started Daily Cleanup of Temporary Directories. machine # [ 6.929184] systemd[1]: Reached target Timer Units. machine # [ 6.930905] systemd[1]: Listening on D-Bus System Message Bus Socket. machine # [ 6.934323] systemd[1]: Listening on Nix Daemon Socket. machine # [ 6.935430] systemd[1]: Listening on Virtual Machine and Container Registration Service Socket. machine # [ 6.937002] systemd[1]: Reached target Socket Units. machine # [ 6.940168] systemd[1]: Reached target Basic System. machine # [ 6.942079] systemd[1]: Started backdoor.service. machine # [ 6.946088] systemd[1]: Starting Import lastlog data into lastlog2 database... machine # [ 7.020740] parport0: PC-style at 0x378, irq 7 [PCSPP(,...)] machine # [ 7.039561] input: QEMU Virtio Keyboard as /devices/pci0000:00/0000:00:06.0/virtio4/input/input4 machine # [ 6.957907] systemd[1]: Starting Name Service Cache Daemon (nsncd)... machine # [ 6.965106] systemd[1]: Starting Post-Boot Actions... machine # [ 6.969086] systemd[1]: Started Reset console on configuration changes. machine # [ 6.978218] systemd[1]: Starting resolvconf update... machine # [ 7.017374] systemd[1]: Starting D-Bus System Message Bus... machine # [ 7.043119] Console: switching to colour dummy device 80x25 machine # [ 7.053451] lpc_ich 0000:00:1f.0: I/O space for GPIO uninitialized machine # [ 7.035587] nsncd[505]: Oct 21 21:47:14.711 INFO started, config: Config { ignored_request_types: {}, worker_count: 8, handoff_timeout: 10s }, path: "/var/run/nscd/socket" machine # [ 7.039760] systemd[1]: Started Name Service Cache Daemon (nsncd). machine # connecting to host... machine # [ 7.048473] systemd[1]: Finished Post-Boot Actions. machine # [ 7.062248] systemd[1]: Reached target Host and Network Name Lookups. machine: Guest shell says: b'Spawning backdoor root shell...\n' machine # [ 7.069093] systemd[1]: Reached target User and Group Name Lookups. machine: connected to guest root shell machine: (connecting took 7.82 seconds) machine: (finished: waiting for the VM to finish booting, in 7.97 seconds) machine # [ 7.086147] systemd[1]: Starting User Login Management... machine # [ 7.182976] i801_smbus 0000:00:1f.3: SMBus using PCI interrupt machine # [ 7.183125] i2c i2c-0: Memory type 0x07 not supported yet, not instantiating SPD machine # [ 7.108691] systemd[1]: Finished Import lastlog data into lastlog2 database. machine # [ 7.346614] [drm] Found bochs VGA, ID 0xb0c5. machine # [ 7.346616] [drm] Framebuffer size 16384 kB @ 0xfd000000, mmio @ 0xfebd0000. machine # [ 7.350188] bochs-drm 0000:00:01.0: [drm] Registered 1 planes with drm panic machine # [ 7.351117] [drm] Initialized bochs-drm 1.0.0 for 0000:00:01.0 on minor 0 machine # [ 7.171213] dbus-broker-launch[510]: Looking up NSS user entry for 'systemd-timesync'... machine # [ 7.369585] input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input6 machine # [ 7.374594] input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input5 machine # [ 7.210195] systemd-logind[531]: New seat seat0. machine # [ 7.262780] systemd[1]: Started User Login Management. machine # [ 7.266403] systemd-logind[531]: Watching system buttons on /dev/input/event0 (AT Translated Set 2 keyboard) machine # [ 7.276644] dbus-broker-launch[510]: NSS returned no entry for 'systemd-timesync' machine # [ 7.278445] dbus-broker-launch[510]: Invalid user-name in /nix/store/7669sxzc75gg3zmln96p028vvyvalymm-system-path/share/dbus-1/system.d/org.freedesktop.timesync1.conf +16: user="systemd-timesync" machine # [ 7.282368] systemd[1]: Stopped target Host and Network Name Lookups. machine # [ 7.287185] systemd[1]: Stopping Host and Network Name Lookups... machine # [ 7.288377] systemd[1]: Stopped target User and Group Name Lookups. machine # [ 7.289590] systemd[1]: Stopping User and Group Name Lookups... machine # [ 7.296082] systemd[1]: Starting linger-users.service... machine # [ 7.297940] systemd[1]: Stopping Name Service Cache Daemon (nsncd)... machine # [ 7.302130] systemd[1]: Starting Virtual Console Setup... machine # [ 7.307150] systemd[1]: nscd.service: Deactivated successfully. machine # [ 7.309547] systemd-logind[531]: Watching system buttons on /dev/input/event2 (Power Button) machine # [ 7.504472] Console: switching to colour frame buffer device 160x50 machine # [ 7.505877] bochs-drm 0000:00:01.0: [drm] fb0: bochs-drmdrmfb frame buffer device machine # [ 7.316967] systemd[1]: Stopped Name Service Cache Daemon (nsncd). machine # [ 7.325221] systemd[1]: Started D-Bus System Message Bus. machine # [ 7.350295] dbus-broker-launch[510]: Ready machine # [ 7.386100] systemd[1]: Starting Name Service Cache Daemon (nsncd)... machine # [ 7.388878] systemd[1]: linger-users.service: Deactivated successfully. machine # [ 7.392232] systemd[1]: Finished linger-users.service. machine # [ 7.422748] systemd[1]: systemd-vconsole-setup.service: Deactivated successfully. machine # [ 7.425611] systemd[1]: Stopped Virtual Console Setup. machine # [ 7.435153] systemd[1]: Starting Virtual Console Setup... machine # [ 7.448787] systemd[1]: Started Name Service Cache Daemon (nsncd). machine # [ 7.450584] nsncd[597]: Oct 21 21:47:15.126 INFO started, config: Config { ignored_request_types: {}, worker_count: 8, handoff_timeout: 10s }, path: "/var/run/nscd/socket" machine # [ 7.458738] systemd[1]: Finished resolvconf update. machine # [ 7.468634] systemd[1]: Reached target Preparation for Network. machine # [ 7.472321] systemd[1]: Reached target Host and Network Name Lookups. machine # [ 7.473549] systemd[1]: Reached target User and Group Name Lookups. machine # [ 7.480104] systemd[1]: Starting DHCP Client... machine # [ 7.673215] ppdev: user-space parallel port driver machine # [ 7.484511] systemd[1]: Starting Address configuration of eth1... machine # [ 7.493304] systemd[1]: Starting Extra networking commands.... machine # [ 7.590230] network-addresses-eth1-start[623]: adding address 192.168.1.1/24... done machine # [ 7.597699] systemd-logind[531]: Watching system buttons on /dev/input/event3 (QEMU Virtio Keyboard) machine # [ 7.606166] network-addresses-eth1-start[623]: adding address 2001:db8:1::1/64... done machine # [ 7.821886] iTCO_wdt iTCO_wdt.1.auto: Found a ICH9 TCO device (Version=2, TCOBASE=0x0660) machine # [ 7.638229] systemd[1]: Finished Address configuration of eth1. machine # [ 7.879842] iTCO_wdt iTCO_wdt.1.auto: initialized. heartbeat=30 sec (nowayout=0) machine # [ 7.690947] dhcpcd[630]: dhcpcd-10.3.2 starting machine # [ 7.698629] dhcpcd[688]: dev: loaded udev machine # [ 7.707808] systemd[1]: Finished Extra networking commands.. machine # [ 7.711077] systemd[1]: Reached target Network. machine # [ 7.721084] systemd[1]: Starting PostgreSQL Server... machine # [ 7.723161] systemd[1]: Starting Permit User Sessions... machine # [ 7.919140] 8021q: 802.1Q VLAN Support v1.8 machine # [ 7.919690] 8021q: adding VLAN 0 to HW filter on device eth1 machine # [ 7.755599] systemd[1]: systemd-vconsole-setup.service: Deactivated successfully. machine # [ 7.763232] systemd[1]: Stopped Virtual Console Setup. machine # [ 7.780296] systemd[1]: Starting Virtual Console Setup... machine # [ 7.814226] systemd[1]: Finished Permit User Sessions. machine # [ 7.817653] systemd[1]: Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch. machine # [ 7.828114] systemd[1]: Started Getty on tty1. machine # [ 7.829107] systemd[1]: Reached target Login Prompts. machine # [ 8.116332] cfg80211: Loading compiled-in X.509 certificates for regulatory database machine # [ 8.143346] Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7' machine # [ 8.144215] Loaded X.509 cert 'wens: 61c038651aabdcf94bd0ac7ff06c7248db18c600' machine # [ 8.146430] kvm_amd: TSC scaling supported machine # [ 8.146964] kvm_amd: Nested Virtualization enabled machine # [ 8.149424] faux_driver regulatory: Direct firmware load for regulatory.db failed with error -2 machine # [ 8.150561] cfg80211: failed to load regulatory.db machine # [ 8.153566] kvm_amd: Nested Paging enabled machine # [ 8.157673] kvm_amd: LBR virtualization supported machine # [ 8.158650] kvm_amd: Virtual VMLOAD VMSAVE supported machine # [ 8.161101] kvm_amd: Virtual GIF supported machine # [ 8.011343] postgresql-pre-start[704]: The files belonging to this database system will be owned by user "postgres". machine # [ 8.013242] postgresql-pre-start[704]: This user must also own the server process. machine # [ 8.207270] 8021q: adding VLAN 0 to HW filter on device eth0 machine # [ 8.019471] dhcpcd[688]: eth0: waiting for carrier machine # [ 8.020489] dhcpcd[688]: libudev: received NULL device machine # [ 8.021523] dhcpcd[688]: libudev: received NULL device machine # [ 8.023852] dhcpcd[688]: eth0: carrier acquired machine # [ 8.219941] EDAC MC: Ver: 3.0.0 machine # [ 8.028728] postgresql-pre-start[704]: The database cluster will be initialized with locale "en_US.UTF-8". machine # [ 8.030387] postgresql-pre-start[704]: The default database encoding has accordingly been set to "UTF8". machine # [ 8.032065] postgresql-pre-start[704]: The default text search configuration will be set to "english". machine # [ 8.033628] postgresql-pre-start[704]: Data page checksums are enabled. machine # [ 8.035600] postgresql-pre-start[704]: fixing permissions on existing directory /var/lib/postgresql/18 ... ok machine # [ 8.037256] postgresql-pre-start[704]: creating subdirectories ... ok machine # [ 8.038944] postgresql-pre-start[704]: selecting dynamic shared memory implementation ... posix machine # [ 8.042506] dhcpcd[688]: DUID 00:01:00:01:32:6b:ef:63:52:54:00:12:34:56 machine # [ 8.045381] dhcpcd[688]: eth0: IAID 00:12:34:56 machine # [ 8.046332] dhcpcd[688]: eth0: adding address fe80::5054:ff:fe12:3456 machine # [ 8.088422] postgresql-pre-start[704]: selecting default "max_connections" ... 100 machine # [ 8.127834] postgresql-pre-start[704]: selecting default "shared_buffers" ... 128MB machine # [ 8.153663] systemd-vconsole-setup[699]: Configuration of first virtual console was skipped, ignoring remaining ones. machine # [ 8.157576] systemd[1]: Finished Virtual Console Setup. machine # [ 8.681901] postgresql-pre-start[704]: selecting default time zone ... UTC machine # [ 8.684431] postgresql-pre-start[704]: creating configuration files ... ok machine # [ 8.832075] postgresql-pre-start[704]: running bootstrap script ... ok machine # [ 9.184951] postgresql-pre-start[704]: performing post-bootstrap initialization ... ok machine # [ 9.226610] dhcpcd[688]: eth0: soliciting an IPv6 router machine # [ 9.228727] dhcpcd[688]: eth0: Router Advertisement from fe80::2 machine # [ 9.230257] dhcpcd[688]: eth0: adding address fec0::5054:ff:fe12:3456/64 machine # [ 9.231871] dhcpcd[688]: eth0: adding route to fec0::/64 machine # [ 9.232910] dhcpcd[688]: eth0: adding default route via fe80::2 machine # [ 9.356113] postgresql-pre-start[704]: syncing data to disk ... ok machine # [ 9.357257] postgresql-pre-start[704]: initdb: warning: enabling "trust" authentication for local connections machine # [ 9.358907] postgresql-pre-start[704]: initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. machine # [ 9.361507] postgresql-pre-start[704]: Success. You can now start the database server using: machine # [ 9.362965] postgresql-pre-start[704]: pg_ctl -D /var/lib/postgresql/18 -l logfile start machine # [ 9.459967] postgres[734]: [734] LOG: starting PostgreSQL 18.6 on x86_64-pc-linux-gnu, compiled by clang version 21.1.8, 64-bit machine # [ 9.463910] postgres[734]: [734] LOG: listening on IPv6 address "::1", port 5432 machine # [ 9.465346] postgres[734]: [734] LOG: listening on IPv4 address "127.0.0.1", port 5432 machine # [ 9.476333] postgres[734]: [734] LOG: listening on Unix socket "/run/postgresql/.s.PGSQL.5432" machine # [ 9.509303] postgres[747]: [747] LOG: database system was shut down at 2026-10-21 21:47:16 GMT machine # [ 9.516536] dhcpcd[688]: eth0: soliciting a DHCP lease machine # [ 9.717232] NET: Registered PF_PACKET protocol family machine # [ 9.527675] postgres[734]: [734] LOG: database system is ready to accept connections machine # [ 9.532320] dhcpcd[688]: eth0: offered 10.0.2.15 from 10.0.2.2 machine # [ 9.533581] dhcpcd[688]: eth0: probing address 10.0.2.15/24 machine # [ 9.541850] systemd[1]: Started PostgreSQL Server. machine # [ 9.548671] systemd[1]: Starting PostgreSQL Setup Scripts... machine # [ 9.706949] postgresql-setup-start[760]: CREATE DATABASE machine # [ 9.733545] postgresql-setup-start[765]: CREATE ROLE machine # [ 9.745223] postgresql-setup-start[767]: ALTER DATABASE machine # [ 9.749835] systemd[1]: Finished PostgreSQL Setup Scripts. machine # [ 9.752125] systemd[1]: Reached target PostgreSQL. machine: (finished: waiting for unit postgresql.service, in 11.34 seconds) machine: waiting for unit rustfs.service machine # [ 14.841857] dhcpcd[688]: eth0: leased 10.0.2.15 for 86400 seconds machine # [ 14.843655] dhcpcd[688]: eth0: adding route to 10.0.2.0/24 machine # [ 14.845987] dhcpcd[688]: eth0: adding default route via 10.0.2.2 machine # [ 14.897364] systemd[1]: Started DHCP Client. machine # [ 14.900146] systemd[1]: Reached target Network is Online. machine # [ 14.903673] systemd[1]: Starting RustFS Object Storage Server... machine # [ 15.451651] systemd[1]: Started RustFS Object Storage Server. machine # [ 15.457203] systemd[1]: Starting Self-hosted Zotero sync server... machine # [ 15.497943] systemd[1]: Started Self-hosted Zotero sync server. machine # [ 15.501224] systemd[1]: Reached target Multi-User System. machine # [ 15.502495] systemd[1]: Startup finished in 848ms (kernel) + 3.451s (initrd) + 11.202s (userspace) = 15.502s. machine: (finished: waiting for unit rustfs.service, in 5.20 seconds) machine: waiting for TCP port 9000 on localhost machine # Connection to localhost (::1) 9000 port [tcp/cslistener] succeeded! machine: (finished: waiting for TCP port 9000 on localhost, in 0.03 seconds) machine: waiting for unit zhost.service machine: (finished: waiting for unit zhost.service, in 0.03 seconds) machine: waiting for TCP port 8189 on localhost machine # [ 15.720753] zhost[893]: 2026-10-21T21:47:23.398194Z INFO zhost: zhost listening bind=127.0.0.1:8189 machine # Connection to localhost (127.0.0.1) 8189 port [tcp/*] succeeded! machine: (finished: waiting for TCP port 8189 on localhost, in 0.03 seconds) machine: must succeed: mc alias set s3 http://localhost:9000 rustfsadmin rustfsadmin machine: (finished: must succeed: mc alias set s3 http://localhost:9000 rustfsadmin rustfsadmin, in 0.12 seconds) machine: must succeed: mc mb s3/zotero machine: (finished: must succeed: mc mb s3/zotero, in 0.21 seconds) subtest: the module deploys a working service backed by postgres machine: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/keys/current -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 16.086874] zhost[893]: 2026-10-21T21:47:23.764517Z INFO zhost: request method=GET uri=/keys/current api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/keys/current -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.03 seconds) (finished: subtest: the module deploys a working service backed by postgres, in 0.03 seconds) subtest: login session hands out the key only after authorization machine: must succeed: curl -sf -X POST http://localhost:8189/keys/sessions -d '{}' > /tmp/sess machine # [ 16.111702] zhost[893]: 2026-10-21T21:47:23.789415Z INFO zhost: request method=POST uri=/keys/sessions api_version=- if_unmod=- body={} machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/keys/sessions -d '{}' > /tmp/sess, in 0.02 seconds) machine: must succeed: jq -r .sessionToken /tmp/sess machine: (finished: must succeed: jq -r .sessionToken /tmp/sess, in 0.01 seconds) machine: must succeed: jq -r .loginURL /tmp/sess machine: (finished: must succeed: jq -r .loginURL /tmp/sess, in 0.01 seconds) machine: must succeed: curl -sf 'http://localhost:8189/login?session=a7f393340e78598fef535526beed086e' | grep -qi 'Authorize' machine # [ 16.160982] zhost[893]: 2026-10-21T21:47:23.838296Z INFO zhost: request method=GET uri=/login?session=a7f393340e78598fef535526beed086e api_version=- if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/login?session=a7f393340e78598fef535526beed086e' | grep -qi 'Authorize', in 0.03 seconds) machine: must succeed: curl -sf http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e | jq -e '.status == "pending"' machine # [ 16.187724] zhost[893]: 2026-10-21T21:47:23.865354Z INFO zhost: request method=GET uri=/keys/sessions/a7f393340e78598fef535526beed086e api_version=- if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e | jq -e '.status == "pending"', in 0.03 seconds) machine: must succeed: curl -sf http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e | jq -e '.apiKey == null' machine # [ 16.212573] zhost[893]: 2026-10-21T21:47:23.890229Z INFO zhost: request method=GET uri=/keys/sessions/a7f393340e78598fef535526beed086e api_version=- if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e | jq -e '.apiKey == null', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/login -H 'Origin: https://evil.example' -H 'X-Auth-Request-Email: owner@mulatta.io' -d 'session=a7f393340e78598fef535526beed086e' machine # [ 16.237238] zhost[893]: 2026-10-21T21:47:23.914405Z INFO zhost: request method=POST uri=/login api_version=- if_unmod=- body=session=a7f393340e78598fef535526beed086e machine # [ 16.241246] zhost[893]: 2026-10-21T21:47:23.914440Z WARN zhost: response error method=POST uri=/login status=403 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/login -H 'Origin: https://evil.example' -H 'X-Auth-Request-Email: owner@mulatta.io' -d 'session=a7f393340e78598fef535526beed086e', in 0.03 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/login -d 'session=a7f393340e78598fef535526beed086e' machine # [ 16.264552] zhost[893]: 2026-10-21T21:47:23.942171Z INFO zhost: request method=POST uri=/login api_version=- if_unmod=- body=session=a7f393340e78598fef535526beed086e machine # [ 16.268410] zhost[893]: 2026-10-21T21:47:23.942205Z WARN zhost: response error method=POST uri=/login status=403 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/login -d 'session=a7f393340e78598fef535526beed086e', in 0.03 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/login -H 'X-Auth-Request-Email: someone@else' -d 'session=a7f393340e78598fef535526beed086e' machine # [ 16.289928] zhost[893]: 2026-10-21T21:47:23.967556Z INFO zhost: request method=POST uri=/login api_version=- if_unmod=- body=session=a7f393340e78598fef535526beed086e machine # [ 16.293844] zhost[893]: 2026-10-21T21:47:23.967582Z WARN zhost: response error method=POST uri=/login status=403 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/login -H 'X-Auth-Request-Email: someone@else' -d 'session=a7f393340e78598fef535526beed086e', in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/login -H 'X-Auth-Request-Email: owner@mulatta.io' -d 'session=a7f393340e78598fef535526beed086e' machine # [ 16.317949] zhost[893]: 2026-10-21T21:47:23.995523Z INFO zhost: request method=POST uri=/login api_version=- if_unmod=- body=session=a7f393340e78598fef535526beed086e machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/login -H 'X-Auth-Request-Email: owner@mulatta.io' -d 'session=a7f393340e78598fef535526beed086e', in 0.03 seconds) machine: must succeed: curl -sf http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e | jq -e '.status == "completed"' machine # [ 16.342514] zhost[893]: 2026-10-21T21:47:24.019978Z INFO zhost: request method=GET uri=/keys/sessions/a7f393340e78598fef535526beed086e api_version=- if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e | jq -e '.status == "completed"', in 0.03 seconds) machine: must succeed: curl -sf http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e | jq -e '.apiKey == "testtoken"' machine # [ 16.369096] zhost[893]: 2026-10-21T21:47:24.045889Z INFO zhost: request method=GET uri=/keys/sessions/a7f393340e78598fef535526beed086e api_version=- if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e | jq -e '.apiKey == "testtoken"', in 0.03 seconds) machine: must succeed: curl -sf -X DELETE http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e machine # [ 16.390993] zhost[893]: 2026-10-21T21:47:24.068348Z INFO zhost: request method=DELETE uri=/keys/sessions/a7f393340e78598fef535526beed086e api_version=- if_unmod=- body= machine: (finished: must succeed: curl -sf -X DELETE http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e, in 0.02 seconds) machine: must succeed: curl -sf http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e | jq -e '.status == "pending"' machine # [ 16.413905] zhost[893]: 2026-10-21T21:47:24.091269Z INFO zhost: request method=GET uri=/keys/sessions/a7f393340e78598fef535526beed086e api_version=- if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/keys/sessions/a7f393340e78598fef535526beed086e | jq -e '.status == "pending"', in 0.02 seconds) (finished: subtest: login session hands out the key only after authorization, in 0.33 seconds) subtest: the login consent endpoint validates the session token machine: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/login machine # [ 16.436230] zhost[893]: 2026-10-21T21:47:24.113502Z INFO zhost: request method=GET uri=/login api_version=- if_unmod=- body= machine # [ 16.439507] zhost[893]: 2026-10-21T21:47:24.113524Z WARN zhost: response error method=GET uri=/login status=400 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/login, in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/login?session=nope machine # [ 16.459561] zhost[893]: 2026-10-21T21:47:24.137302Z INFO zhost: request method=GET uri=/login?session=nope api_version=- if_unmod=- body= machine # [ 16.463518] zhost[893]: 2026-10-21T21:47:24.140859Z WARN zhost: response error method=GET uri=/login?session=nope status=404 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/login?session=nope, in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/login -H 'X-Auth-Request-Email: owner@mulatta.io' -d 'session=nope' machine # [ 16.484076] zhost[893]: 2026-10-21T21:47:24.161636Z INFO zhost: request method=POST uri=/login api_version=- if_unmod=- body=session=nope machine # [ 16.488232] zhost[893]: 2026-10-21T21:47:24.161662Z WARN zhost: response error method=POST uri=/login status=404 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/login -H 'X-Auth-Request-Email: owner@mulatta.io' -d 'session=nope', in 0.02 seconds) (finished: subtest: the login consent endpoint validates the session token, in 0.07 seconds) subtest: groups endpoint returns an empty set (single personal library) machine: must succeed: curl -sf http://localhost:8189/users/1/groups -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}' machine # [ 16.509630] zhost[893]: 2026-10-21T21:47:24.187269Z INFO zhost: request method=GET uri=/users/1/groups api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/users/1/groups -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}', in 0.03 seconds) (finished: subtest: groups endpoint returns an empty set (single personal library), in 0.03 seconds) subtest: the api key is required off the bootstrap paths machine: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/keys/current -H 'Zotero-API-Version: 3' machine # [ 16.534567] zhost[893]: 2026-10-21T21:47:24.211885Z INFO zhost: request method=GET uri=/keys/current api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/keys/current -H 'Zotero-API-Version: 3', in 0.02 seconds) (finished: subtest: the api key is required off the bootstrap paths, in 0.02 seconds) subtest: a read-only key reads but cannot write machine: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3' machine # [ 16.555401] zhost[893]: 2026-10-21T21:47:24.233040Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3', in 0.03 seconds) machine: must succeed: curl -sf http://localhost:8189/keys/current -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3' | jq -e '.access.user.write == false' machine # [ 16.586421] zhost[893]: 2026-10-21T21:47:24.264068Z INFO zhost: request method=GET uri=/keys/current api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/keys/current -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3' | jq -e '.access.user.write == false', in 0.02 seconds) machine: must succeed: curl -sf http://localhost:8189/keys/current -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.access.user.write == true' machine # [ 16.610131] zhost[893]: 2026-10-21T21:47:24.287609Z INFO zhost: request method=GET uri=/keys/current api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/keys/current -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.access.user.write == true', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '[{"key":"RDNLY222","itemType":"book"}]' machine # [ 16.632182] zhost[893]: 2026-10-21T21:47:24.309831Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=0 body=[{"key":"RDNLY222","itemType":"book"}] machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '[{"key":"RDNLY222","itemType":"book"}]', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X DELETE 'http://localhost:8189/users/1/items?itemKey=ITEM2223' -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3' machine # [ 16.654404] zhost[893]: 2026-10-21T21:47:24.331710Z INFO zhost: request method=DELETE uri=/users/1/items?itemKey=ITEM2223 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X DELETE 'http://localhost:8189/users/1/items?itemKey=ITEM2223' -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) (finished: subtest: a read-only key reads but cannot write, in 0.12 seconds) subtest: an item round-trips through write and read machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '[{"key":"ITEM2223","itemType":"book","title":"t"}]' | jq -e '.successful."0".key == "ITEM2223"' machine # [ 16.676854] zhost[893]: 2026-10-21T21:47:24.354587Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=0 body=[{"key":"ITEM2223","itemType":"book","title":"t"}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '[{"key":"ITEM2223","itemType":"book","title":"t"}]' | jq -e '.successful."0".key == "ITEM2223"', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.ITEM2223' machine # [ 16.708736] zhost[893]: 2026-10-21T21:47:24.386473Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.ITEM2223', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=ITEM2223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.itemType == "book"' machine # [ 16.739960] zhost[893]: 2026-10-21T21:47:24.417389Z INFO zhost: request method=GET uri=/users/1/items?itemKey=ITEM2223&format=json api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=ITEM2223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.itemType == "book"', in 0.03 seconds) (finished: subtest: an item round-trips through write and read, in 0.09 seconds) subtest: a stale write is rejected with 412 machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '[{"key":"ITEMSTAL","itemType":"book"}]' machine # [ 16.763697] zhost[893]: 2026-10-21T21:47:24.441222Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=0 body=[{"key":"ITEMSTAL","itemType":"book"}] machine # [ 16.768078] zhost[893]: 2026-10-21T21:47:24.445783Z WARN zhost: response error method=POST uri=/users/1/items status=412 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '[{"key":"ITEMSTAL","itemType":"book"}]', in 0.03 seconds) (finished: subtest: a stale write is rejected with 412, in 0.03 seconds) subtest: a write without If-Unmodified-Since-Version is rejected with 428 machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -d '[{"key":"NPRECN22","itemType":"book"}]' machine # [ 16.789292] zhost[893]: 2026-10-21T21:47:24.466928Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=- body=[{"key":"NPRECN22","itemType":"book"}] machine # [ 16.793517] zhost[893]: 2026-10-21T21:47:24.466954Z WARN zhost: response error method=POST uri=/users/1/items status=428 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -d '[{"key":"NPRECN22","itemType":"book"}]', in 0.02 seconds) (finished: subtest: a write without If-Unmodified-Since-Version is rejected with 428, in 0.02 seconds) subtest: a malformed object key is rejected with 400 machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 16.819117] zhost[893]: 2026-10-21T21:47:24.496857Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"HASOABC2","itemType":"book"}]' machine # [ 16.842944] zhost[893]: 2026-10-21T21:47:24.520570Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=1 body=[{"key":"HASOABC2","itemType":"book"}] machine # [ 16.847181] zhost[893]: 2026-10-21T21:47:24.520604Z WARN zhost: response error method=POST uri=/users/1/items status=400 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"HASOABC2","itemType":"book"}]', in 0.02 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 16.873128] zhost[893]: 2026-10-21T21:47:24.550653Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"HAS0ABC2","itemType":"book"}]' machine # [ 16.898190] zhost[893]: 2026-10-21T21:47:24.575753Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=1 body=[{"key":"HAS0ABC2","itemType":"book"}] machine # [ 16.902689] zhost[893]: 2026-10-21T21:47:24.575837Z WARN zhost: response error method=POST uri=/users/1/items status=400 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"HAS0ABC2","itemType":"book"}]', in 0.03 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 16.929245] zhost[893]: 2026-10-21T21:47:24.606986Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"SHORTKY","itemType":"book"}]' machine # [ 16.954846] zhost[893]: 2026-10-21T21:47:24.632558Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=1 body=[{"key":"SHORTKY","itemType":"book"}] machine # [ 16.960181] zhost[893]: 2026-10-21T21:47:24.637497Z WARN zhost: response error method=POST uri=/users/1/items status=400 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"SHORTKY","itemType":"book"}]', in 0.03 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 16.986646] zhost[893]: 2026-10-21T21:47:24.664387Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"TOOLONGKY","itemType":"book"}]' machine # [ 17.010458] zhost[893]: 2026-10-21T21:47:24.688092Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=1 body=[{"key":"TOOLONGKY","itemType":"book"}] machine # [ 17.014704] zhost[893]: 2026-10-21T21:47:24.688120Z WARN zhost: response error method=POST uri=/users/1/items status=400 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"TOOLONGKY","itemType":"book"}]', in 0.02 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 17.039973] zhost[893]: 2026-10-21T21:47:24.717713Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"lowercs2","itemType":"book"}]' machine # [ 17.064089] zhost[893]: 2026-10-21T21:47:24.741677Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=1 body=[{"key":"lowercs2","itemType":"book"}] machine # [ 17.068690] zhost[893]: 2026-10-21T21:47:24.741710Z WARN zhost: response error method=POST uri=/users/1/items status=400 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"lowercs2","itemType":"book"}]', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=HASOABC2&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == []' machine # [ 17.090866] zhost[893]: 2026-10-21T21:47:24.767889Z INFO zhost: request method=GET uri=/users/1/items?itemKey=HASOABC2&format=json api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=HASOABC2&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == []', in 0.02 seconds) (finished: subtest: a malformed object key is rejected with 400, in 0.30 seconds) subtest: an empty batch does not bump the library version machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 17.118825] zhost[893]: 2026-10-21T21:47:24.796441Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[]' | jq -e .successful machine # [ 17.144365] zhost[893]: 2026-10-21T21:47:24.821747Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=1 body=[] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[]' | jq -e .successful, in 0.02 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 17.172113] zhost[893]: 2026-10-21T21:47:24.849639Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) (finished: subtest: an empty batch does not bump the library version, in 0.08 seconds) subtest: attachment data is emitted with linkMode first machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 17.201083] zhost[893]: 2026-10-21T21:47:24.878741Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"ATTACH22","itemType":"attachment","linkMode":"imported_file","filename":"t.pdf","contentType":"application/pdf"}]' | jq -e .successful machine # [ 17.226375] zhost[893]: 2026-10-21T21:47:24.904010Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=1 body=[{"key":"ATTACH22","itemType":"attachment","linkMode":"imported_file","filename":"t.pdf","contentType":"application/pdf"}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 1' -d '[{"key":"ATTACH22","itemType":"attachment","linkMode":"imported_file","filename":"t.pdf","contentType":"application/pdf"}]' | jq -e .successful, in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=ATTACH22&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '.[0].data | keys_unsorted[0]' machine # [ 17.260273] zhost[893]: 2026-10-21T21:47:24.937391Z INFO zhost: request method=GET uri=/users/1/items?itemKey=ATTACH22&format=json api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=ATTACH22&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '.[0].data | keys_unsorted[0]', in 0.02 seconds) (finished: subtest: attachment data is emitted with linkMode first, in 0.09 seconds) subtest: an attachment file uploads to S3 and downloads via a presigned URL machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'md5=5d41402abc4b2a76b9719d911017c592&filename=t.pdf&filesize=5&mtime=1700000000000' | jq -r .uploadKey machine # [ 17.284850] zhost[893]: 2026-10-21T21:47:24.962382Z INFO zhost: request method=POST uri=/users/1/items/ATTACH22/file api_version=3 if_unmod=- body=md5=5d41402abc4b2a76b9719d911017c592&filename=t.pdf&filesize=5&mtime=1700000000000 machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'md5=5d41402abc4b2a76b9719d911017c592&filename=t.pdf&filesize=5&mtime=1700000000000' | jq -r .uploadKey, in 0.03 seconds) machine: must succeed: printf hello | curl -sf -X POST http://localhost:8189/uploads/2bdedf61009c0b4f8f06b1c514585ee7 --data-binary @- machine # [ 17.308824] zhost[893]: 2026-10-21T21:47:24.986429Z INFO zhost: request method=POST uri=/uploads/2bdedf61009c0b4f8f06b1c514585ee7 api_version=- if_unmod=- body=hello machine: (finished: must succeed: printf hello | curl -sf -X POST http://localhost:8189/uploads/2bdedf61009c0b4f8f06b1c514585ee7 --data-binary @-, in 0.07 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'upload=2bdedf61009c0b4f8f06b1c514585ee7' machine # [ 17.382375] zhost[893]: 2026-10-21T21:47:25.059949Z INFO zhost: request method=POST uri=/users/1/items/ATTACH22/file api_version=3 if_unmod=- body=upload=2bdedf61009c0b4f8f06b1c514585ee7 machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'upload=2bdedf61009c0b4f8f06b1c514585ee7', in 0.04 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 17.420444] zhost[893]: 2026-10-21T21:47:25.098016Z INFO zhost: request method=GET uri=/users/1/items/ATTACH22/file api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -sf -D /tmp/dlhdr -o /dev/null http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' && grep -i '^location:' /tmp/dlhdr | tr -d '\r' | awk '{print $2}' machine # [ 17.445519] zhost[893]: 2026-10-21T21:47:25.123205Z INFO zhost: request method=GET uri=/users/1/items/ATTACH22/file api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D /tmp/dlhdr -o /dev/null http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' && grep -i '^location:' /tmp/dlhdr | tr -d '\r' | awk '{print $2}', in 0.04 seconds) machine: must succeed: grep -iq 'zotero-file-md5: 5d41402abc4b2a76b9719d911017c592' /tmp/dlhdr machine: (finished: must succeed: grep -iq 'zotero-file-md5: 5d41402abc4b2a76b9719d911017c592' /tmp/dlhdr, in 0.01 seconds) machine: must succeed: curl -sf 'http://127.0.0.1:9000/zotero/ATTACH22?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=rustfsadmin%2F20261021%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20261021T214725Z&X-Amz-Expires=120&X-Amz-SignedHeaders=host&X-Amz-Signature=b06fde98580c0c87ac8fd74ee2416fb1cadb3d0c79357336ecb65dadf7ce5c22' machine: (finished: must succeed: curl -sf 'http://127.0.0.1:9000/zotero/ATTACH22?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=rustfsadmin%2F20261021%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20261021T214725Z&X-Amz-Expires=120&X-Amz-SignedHeaders=host&X-Amz-Signature=b06fde98580c0c87ac8fd74ee2416fb1cadb3d0c79357336ecb65dadf7ce5c22', in 0.03 seconds) (finished: subtest: an attachment file uploads to S3 and downloads via a presigned URL, in 0.23 seconds) subtest: re-authorizing the same file returns exists:1 (dedup) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'md5=5d41402abc4b2a76b9719d911017c592&filename=t.pdf&filesize=5&mtime=1700000000000' | jq -e '.exists == 1' machine # [ 17.519179] zhost[893]: 2026-10-21T21:47:25.196777Z INFO zhost: request method=POST uri=/users/1/items/ATTACH22/file api_version=3 if_unmod=- body=md5=5d41402abc4b2a76b9719d911017c592&filename=t.pdf&filesize=5&mtime=1700000000000 machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'md5=5d41402abc4b2a76b9719d911017c592&filename=t.pdf&filesize=5&mtime=1700000000000' | jq -e '.exists == 1', in 0.03 seconds) (finished: subtest: re-authorizing the same file returns exists:1 (dedup), in 0.03 seconds) subtest: a file authorization without a precondition header is 428 machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -d 'md5=deadbeef&filename=t.pdf&filesize=5&mtime=1' machine # [ 17.546984] zhost[893]: 2026-10-21T21:47:25.224091Z INFO zhost: request method=POST uri=/users/1/items/ATTACH22/file api_version=3 if_unmod=- body=md5=deadbeef&filename=t.pdf&filesize=5&mtime=1 machine # [ 17.551227] zhost[893]: 2026-10-21T21:47:25.224121Z WARN zhost: response error method=POST uri=/users/1/items/ATTACH22/file status=428 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items/ATTACH22/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -d 'md5=deadbeef&filename=t.pdf&filesize=5&mtime=1', in 0.03 seconds) (finished: subtest: a file authorization without a precondition header is 428, in 0.03 seconds) subtest: uploading bytes that do not match the declared md5 is rejected machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items/BADHASH2/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'md5=00000000000000000000000000000000&filename=b&filesize=5&mtime=1' | jq -r .uploadKey machine # [ 17.595100] zhost[893]: 2026-10-21T21:47:25.272578Z INFO zhost: request method=POST uri=/users/1/items/BADHASH2/file api_version=3 if_unmod=- body=md5=00000000000000000000000000000000&filename=b&filesize=5&mtime=1 machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items/BADHASH2/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'md5=00000000000000000000000000000000&filename=b&filesize=5&mtime=1' | jq -r .uploadKey, in 0.05 seconds) machine: must succeed: printf hello | curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/uploads/70904b8d1b23540b5253bca40feba8a2 --data-binary @- machine # [ 17.628083] zhost[893]: 2026-10-21T21:47:25.305485Z INFO zhost: request method=POST uri=/uploads/70904b8d1b23540b5253bca40feba8a2 api_version=- if_unmod=- body=hello machine # [ 17.631940] zhost[893]: 2026-10-21T21:47:25.305514Z WARN zhost: uploaded bytes do not match authorization key="BADHASH2" want_md5="00000000000000000000000000000000" got_md5="5d41402abc4b2a76b9719d911017c592" machine # [ 17.635847] zhost[893]: 2026-10-21T21:47:25.305528Z WARN zhost: response error method=POST uri=/uploads/70904b8d1b23540b5253bca40feba8a2 status=400 machine: (finished: must succeed: printf hello | curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/uploads/70904b8d1b23540b5253bca40feba8a2 --data-binary @-, in 0.04 seconds) (finished: subtest: uploading bytes that do not match the declared md5 is rejected, in 0.08 seconds) subtest: registering without a prior upload is rejected machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items/NQUPLQAD/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'md5=5d41402abc4b2a76b9719d911017c592&filename=n&filesize=5&mtime=1' | jq -r .uploadKey machine # [ 17.660587] zhost[893]: 2026-10-21T21:47:25.338179Z INFO zhost: request method=POST uri=/users/1/items/NQUPLQAD/file api_version=3 if_unmod=- body=md5=5d41402abc4b2a76b9719d911017c592&filename=n&filesize=5&mtime=1 machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items/NQUPLQAD/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'md5=5d41402abc4b2a76b9719d911017c592&filename=n&filesize=5&mtime=1' | jq -r .uploadKey, in 0.03 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items/NQUPLQAD/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'upload=0d326308fc597eddfddc3394c416c11c' machine # [ 17.686131] zhost[893]: 2026-10-21T21:47:25.363620Z INFO zhost: request method=POST uri=/users/1/items/NQUPLQAD/file api_version=3 if_unmod=- body=upload=0d326308fc597eddfddc3394c416c11c machine # [ 17.690589] zhost[893]: 2026-10-21T21:47:25.363649Z WARN zhost: response error method=POST uri=/users/1/items/NQUPLQAD/file status=400 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items/NQUPLQAD/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'upload=0d326308fc597eddfddc3394c416c11c', in 0.03 seconds) (finished: subtest: registering without a prior upload is rejected, in 0.05 seconds) subtest: non-alphanumeric keys are rejected from the file endpoint machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items/bad..key/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'md5=x&filename=t&filesize=1&mtime=1' machine # [ 17.715076] zhost[893]: 2026-10-21T21:47:25.392428Z INFO zhost: request method=POST uri=/users/1/items/bad..key/file api_version=3 if_unmod=- body=md5=x&filename=t&filesize=1&mtime=1 machine # [ 17.719348] zhost[893]: 2026-10-21T21:47:25.392456Z WARN zhost: response error method=POST uri=/users/1/items/bad..key/file status=400 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/items/bad..key/file -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-None-Match: *' -d 'md5=x&filename=t&filesize=1&mtime=1', in 0.03 seconds) (finished: subtest: non-alphanumeric keys are rejected from the file endpoint, in 0.03 seconds) subtest: annotations round-trip as ordinary items machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 17.746156] zhost[893]: 2026-10-21T21:47:25.423648Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 3' -d '[{"key":"ANNQT223","itemType":"annotation","annotationType":"highlight","annotationText":"marked","parentItem":"ATTACH22"}]' | jq -e '.successful."0".data.annotationText == "marked"' machine # [ 17.771983] zhost[893]: 2026-10-21T21:47:25.449605Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=3 body=[{"key":"ANNQT223","itemType":"annotation","annotationType":"highlight","annotationText":"marked","parentItem":"ATTACH22"}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 3' -d '[{"key":"ANNQT223","itemType":"annotation","annotationType":"highlight","annotationText":"marked","parentItem":"ATTACH22"}]' | jq -e '.successful."0".data.annotationText == "marked"', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=ANNQT223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.annotationType == "highlight"' machine # [ 17.802324] zhost[893]: 2026-10-21T21:47:25.479904Z INFO zhost: request method=GET uri=/users/1/items?itemKey=ANNQT223&format=json api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=ANNQT223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.annotationType == "highlight"', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=ANNQT223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '.[0].data | keys_unsorted[0]' machine # [ 17.832991] zhost[893]: 2026-10-21T21:47:25.510530Z INFO zhost: request method=GET uri=/users/1/items?itemKey=ANNQT223&format=json api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=ANNQT223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '.[0].data | keys_unsorted[0]', in 0.03 seconds) (finished: subtest: annotations round-trip as ordinary items, in 0.12 seconds) subtest: full-text content uploads, lists versions, and downloads machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 17.861176] zhost[893]: 2026-10-21T21:47:25.538750Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/fulltext -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 4' -d '[{"key":"ATTACH22","content":"hello world","indexedChars":11,"totalChars":11,"indexedPages":1,"totalPages":1}]' | jq -e '.successful."0".key == "ATTACH22"' machine # [ 17.886600] zhost[893]: 2026-10-21T21:47:25.563999Z INFO zhost: request method=POST uri=/users/1/fulltext api_version=3 if_unmod=4 body=[{"key":"ATTACH22","content":"hello world","indexedChars":11,"totalChars":11,"indexedPages":1,"totalPages":1}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/fulltext -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 4' -d '[{"key":"ATTACH22","content":"hello world","indexedChars":11,"totalChars":11,"indexedPages":1,"totalPages":1}]' | jq -e '.successful."0".key == "ATTACH22"', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/fulltext?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.ATTACH22' machine # [ 17.918270] zhost[893]: 2026-10-21T21:47:25.595523Z INFO zhost: request method=GET uri=/users/1/fulltext?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/fulltext?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.ATTACH22', in 0.02 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items/ATTACH22/fulltext' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 17.947208] zhost[893]: 2026-10-21T21:47:25.624554Z INFO zhost: request method=GET uri=/users/1/items/ATTACH22/fulltext api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items/ATTACH22/fulltext' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/fulltext?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '.ATTACH22' machine # [ 17.972394] zhost[893]: 2026-10-21T21:47:25.649979Z INFO zhost: request method=GET uri=/users/1/fulltext?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/fulltext?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '.ATTACH22', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items/ATTACH22/fulltext' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.content == "hello world" and .totalPages == 1' machine # [ 17.997240] zhost[893]: 2026-10-21T21:47:25.674719Z INFO zhost: request method=GET uri=/users/1/items/ATTACH22/fulltext api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items/ATTACH22/fulltext' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.content == "hello world" and .totalPages == 1', in 0.02 seconds) (finished: subtest: full-text content uploads, lists versions, and downloads, in 0.16 seconds) subtest: a stale full-text write is rejected with 412 machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/fulltext -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '[{"key":"ATTACH22","content":"x"}]' machine # [ 18.020317] zhost[893]: 2026-10-21T21:47:25.697931Z INFO zhost: request method=POST uri=/users/1/fulltext api_version=3 if_unmod=0 body=[{"key":"ATTACH22","content":"x"}] machine # [ 18.024636] zhost[893]: 2026-10-21T21:47:25.702381Z WARN zhost: response error method=POST uri=/users/1/fulltext status=412 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/fulltext -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '[{"key":"ATTACH22","content":"x"}]', in 0.03 seconds) (finished: subtest: a stale full-text write is rejected with 412, in 0.03 seconds) subtest: the query API filters, searches, sorts and paginates items machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 18.051166] zhost[893]: 2026-10-21T21:47:25.728752Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 5' -d '[{"key":"QBQQK223","itemType":"book","title":"Borrow Checker","creators":[{"lastName":"Klabnik","firstName":"Steve"}],"tags":[{"tag":"rustlang"},{"tag":"systems"}]},{"key":"QART2223","itemType":"journalArticle","title":"Unrelated","tags":[{"tag":"rustlang"}]}]' | jq -e .successful machine # [ 18.076900] zhost[893]: 2026-10-21T21:47:25.754430Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=5 body=[{"key":"QBQQK223","itemType":"book","title":"Borrow Checker","creators":[{"lastName":"Klabnik","firstName":"Steve"}],"tags":[{"tag":"rustlang"},{"tag":"systems"}]},{"key":"QART2223","itemType":"journalArticle","title":"Unrelated","tags":[{"tag":"rustlang"}]}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 5' -d '[{"key":"QBQQK223","itemType":"book","title":"Borrow Checker","creators":[{"lastName":"Klabnik","firstName":"Steve"}],"tags":[{"tag":"rustlang"},{"tag":"systems"}]},{"key":"QART2223","itemType":"journalArticle","title":"Unrelated","tags":[{"tag":"rustlang"}]}]' | jq -e .successful, in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?q=borrow' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.109974] zhost[893]: 2026-10-21T21:47:25.787689Z INFO zhost: request method=GET uri=/users/1/items?q=borrow api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?q=borrow' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?q=klabnik' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.135667] zhost[893]: 2026-10-21T21:47:25.813314Z INFO zhost: request method=GET uri=/users/1/items?q=klabnik api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?q=klabnik' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemType=book' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.161165] zhost[893]: 2026-10-21T21:47:25.838747Z INFO zhost: request method=GET uri=/users/1/items?itemType=book api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemType=book' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemType=book' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.190614] zhost[893]: 2026-10-21T21:47:25.867962Z INFO zhost: request method=GET uri=/users/1/items?itemType=book api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemType=book' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemType=-book' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.215313] zhost[893]: 2026-10-21T21:47:25.892883Z INFO zhost: request method=GET uri=/users/1/items?itemType=-book api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemType=-book' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=rustlang&tag=systems' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.241823] zhost[893]: 2026-10-21T21:47:25.919506Z INFO zhost: request method=GET uri=/users/1/items?tag=rustlang&tag=systems api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=rustlang&tag=systems' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=rustlang' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.267960] zhost[893]: 2026-10-21T21:47:25.945494Z INFO zhost: request method=GET uri=/users/1/items?tag=rustlang api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=rustlang' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?q=world' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.293278] zhost[893]: 2026-10-21T21:47:25.970927Z INFO zhost: request method=GET uri=/users/1/items?q=world api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?q=world' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?q=world&qmode=everything' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.318283] zhost[893]: 2026-10-21T21:47:25.995931Z INFO zhost: request method=GET uri=/users/1/items?q=world&qmode=everything api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?q=world&qmode=everything' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) (finished: subtest: the query API filters, searches, sorts and paginates items, in 0.30 seconds) subtest: the query API reports Total-Results and a next-page Link machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?limit=1&sort=title&direction=asc' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 18.342483] zhost[893]: 2026-10-21T21:47:26.020056Z INFO zhost: request method=GET uri=/users/1/items?limit=1&sort=title&direction=asc api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?limit=1&sort=title&direction=asc' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) (finished: subtest: the query API reports Total-Results and a next-page Link, in 0.02 seconds) subtest: a read-only key can drive the query API machine: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?q=borrow' -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3' machine # [ 18.365490] zhost[893]: 2026-10-21T21:47:26.043138Z INFO zhost: request method=GET uri=/users/1/items?q=borrow api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?q=borrow' -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) (finished: subtest: a read-only key can drive the query API, in 0.02 seconds) subtest: convenience listings: top, trash, collection items and tags machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 18.396718] zhost[893]: 2026-10-21T21:47:26.074101Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 6' -d '[{"key":"TQPITEM3","itemType":"book","title":"Shelf Book","collections":["CQLLXXXX"],"tags":[{"tag":"shelf"}]},{"key":"CHILDNQ3","itemType":"note","note":"child","parentItem":"TQPITEM3"},{"key":"TRASHED3","itemType":"book","title":"Gone","deleted":1}]' | jq -e .successful machine # [ 18.421767] zhost[893]: 2026-10-21T21:47:26.099350Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=6 body=[{"key":"TQPITEM3","itemType":"book","title":"Shelf Book","collections":["CQLLXXXX"],"tags":[{"tag":"shelf"}]},{"key":"CHILDNQ3","itemType":"note","note":"child","parentItem":"TQPITEM3"},{"key":"TRASHED3","itemType":"book","title":"Gone","deleted":1}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 6' -d '[{"key":"TQPITEM3","itemType":"book","title":"Shelf Book","collections":["CQLLXXXX"],"tags":[{"tag":"shelf"}]},{"key":"CHILDNQ3","itemType":"note","note":"child","parentItem":"TQPITEM3"},{"key":"TRASHED3","itemType":"book","title":"Gone","deleted":1}]' | jq -e .successful, in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items/top' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.455562] zhost[893]: 2026-10-21T21:47:26.133129Z INFO zhost: request method=GET uri=/users/1/items/top api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items/top' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items/trash' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.480567] zhost[893]: 2026-10-21T21:47:26.158164Z INFO zhost: request method=GET uri=/users/1/items/trash api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items/trash' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/collections/CQLLXXXX/items' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 18.505190] zhost[893]: 2026-10-21T21:47:26.182904Z INFO zhost: request method=GET uri=/users/1/collections/CQLLXXXX/items api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/collections/CQLLXXXX/items' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) machine: must succeed: curl -sf http://localhost:8189/users/1/tags -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[] | select(.tag == "shelf") | .numItems == 1' machine # [ 18.530840] zhost[893]: 2026-10-21T21:47:26.208483Z INFO zhost: request method=GET uri=/users/1/tags api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/users/1/tags -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[] | select(.tag == "shelf") | .numItems == 1', in 0.02 seconds) (finished: subtest: convenience listings: top, trash, collection items and tags, in 0.16 seconds) subtest: top filtering covers parentItem:false and the versions view machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 18.559826] zhost[893]: 2026-10-21T21:47:26.237325Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 7' -d '[{"key":"TQPFALS3","itemType":"book","title":"pf","parentItem":false}]' | jq -e .successful machine # [ 18.585234] zhost[893]: 2026-10-21T21:47:26.262921Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=7 body=[{"key":"TQPFALS3","itemType":"book","title":"pf","parentItem":false}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 7' -d '[{"key":"TQPFALS3","itemType":"book","title":"pf","parentItem":false}]' | jq -e .successful, in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items/top' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|join("\n")' machine # [ 18.616066] zhost[893]: 2026-10-21T21:47:26.293144Z INFO zhost: request method=GET uri=/users/1/items/top api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items/top' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|join("\n")', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items/top?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e 'has("CHILDNQ3")|not' machine # [ 18.640558] zhost[893]: 2026-10-21T21:47:26.318133Z INFO zhost: request method=GET uri=/users/1/items/top?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items/top?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e 'has("CHILDNQ3")|not', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.CHILDNQ3' machine # [ 18.665346] zhost[893]: 2026-10-21T21:47:26.342841Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.CHILDNQ3', in 0.02 seconds) (finished: subtest: top filtering covers parentItem:false and the versions view, in 0.13 seconds) subtest: malformed (non-array) item data does not 500 the query API machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 18.693541] zhost[893]: 2026-10-21T21:47:26.371030Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 8' -d '[{"key":"MALFQRM3","itemType":"book","title":"weird","creators":"notarray","tags":"x","collections":"y"}]' | jq -e .successful machine # [ 18.718740] zhost[893]: 2026-10-21T21:47:26.396376Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=8 body=[{"key":"MALFQRM3","itemType":"book","title":"weird","creators":"notarray","tags":"x","collections":"y"}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 8' -d '[{"key":"MALFQRM3","itemType":"book","title":"weird","creators":"notarray","tags":"x","collections":"y"}]' | jq -e .successful, in 0.03 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/users/1/tags -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 18.750430] zhost[893]: 2026-10-21T21:47:26.427748Z INFO zhost: request method=GET uri=/users/1/tags api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/users/1/tags -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?q=zzz' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 18.772458] zhost[893]: 2026-10-21T21:47:26.450071Z INFO zhost: request method=GET uri=/users/1/items?q=zzz api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?q=zzz' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?q=zzz&qmode=everything' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 18.795308] zhost[893]: 2026-10-21T21:47:26.472692Z INFO zhost: request method=GET uri=/users/1/items?q=zzz&qmode=everything api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?q=zzz&qmode=everything' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?tag=zzz' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 18.817906] zhost[893]: 2026-10-21T21:47:26.495424Z INFO zhost: request method=GET uri=/users/1/items?tag=zzz api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?tag=zzz' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/users/1/collections/y/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 18.840649] zhost[893]: 2026-10-21T21:47:26.518184Z INFO zhost: request method=GET uri=/users/1/collections/y/items api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/users/1/collections/y/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 18.869535] zhost[893]: 2026-10-21T21:47:26.547076Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 9' -d '[{"key":"BADTAGS3","itemType":"book","title":"bt","tags":[{"tag":"good"},123,"junk"]}]' | jq -e .successful machine # [ 18.895078] zhost[893]: 2026-10-21T21:47:26.572617Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=9 body=[{"key":"BADTAGS3","itemType":"book","title":"bt","tags":[{"tag":"good"},123,"junk"]}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 9' -d '[{"key":"BADTAGS3","itemType":"book","title":"bt","tags":[{"tag":"good"},123,"junk"]}]' | jq -e .successful, in 0.03 seconds) machine: must succeed: curl -sf http://localhost:8189/users/1/tags -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[] | select(.tag == "good") | .numItems == 1' machine # [ 18.925490] zhost[893]: 2026-10-21T21:47:26.603063Z INFO zhost: request method=GET uri=/users/1/tags api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/users/1/tags -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[] | select(.tag == "good") | .numItems == 1', in 0.02 seconds) (finished: subtest: malformed (non-array) item data does not 500 the query API, in 0.26 seconds) subtest: Total-Results stays correct past the last page machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?limit=1' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i total-results | tr -d '\r' | cut -d' ' -f2 machine # [ 18.953511] zhost[893]: 2026-10-21T21:47:26.631068Z INFO zhost: request method=GET uri=/users/1/items?limit=1 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?limit=1' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i total-results | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?limit=1&start=100000' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i total-results | tr -d '\r' | cut -d' ' -f2 machine # [ 18.983114] zhost[893]: 2026-10-21T21:47:26.660696Z INFO zhost: request method=GET uri=/users/1/items?limit=1&start=100000 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?limit=1&start=100000' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i total-results | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) (finished: subtest: Total-Results stays correct past the last page, in 0.06 seconds) subtest: query API: OR filters, descending sort and includeTrashed machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 19.012523] zhost[893]: 2026-10-21T21:47:26.690034Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 10' -d '[{"key":"CQVRA223","itemType":"book","title":"Aaa","tags":[{"tag":"aa"}]},{"key":"CQVRB223","itemType":"journalArticle","title":"Bbb","tags":[{"tag":"bb"}]},{"key":"CQVRT223","itemType":"book","title":"Ccc","deleted":1,"tags":[{"tag":"aa"}]}]' | jq -e .successful machine # [ 19.037853] zhost[893]: 2026-10-21T21:47:26.715526Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=10 body=[{"key":"CQVRA223","itemType":"book","title":"Aaa","tags":[{"tag":"aa"}]},{"key":"CQVRB223","itemType":"journalArticle","title":"Bbb","tags":[{"tag":"bb"}]},{"key":"CQVRT223","itemType":"book","title":"Ccc","deleted":1,"tags":[{"tag":"aa"}]}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 10' -d '[{"key":"CQVRA223","itemType":"book","title":"Aaa","tags":[{"tag":"aa"}]},{"key":"CQVRB223","itemType":"journalArticle","title":"Bbb","tags":[{"tag":"bb"}]},{"key":"CQVRT223","itemType":"book","title":"Ccc","deleted":1,"tags":[{"tag":"aa"}]}]' | jq -e .successful, in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=aa||bb&itemType=book||journalArticle' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 19.072734] zhost[893]: 2026-10-21T21:47:26.750297Z INFO zhost: request method=GET uri=/users/1/items?tag=aa||bb&itemType=book||journalArticle api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=aa||bb&itemType=book||journalArticle' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=aa||bb&sort=title&direction=desc' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '.[0].key' machine # [ 19.098336] zhost[893]: 2026-10-21T21:47:26.775787Z INFO zhost: request method=GET uri=/users/1/items?tag=aa||bb&sort=title&direction=desc api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=aa||bb&sort=title&direction=desc' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '.[0].key', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=aa&sort=title&direction=desc&includeTrashed=1' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '.[0].key' machine # [ 19.123629] zhost[893]: 2026-10-21T21:47:26.801255Z INFO zhost: request method=GET uri=/users/1/items?tag=aa&sort=title&direction=desc&includeTrashed=1 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=aa&sort=title&direction=desc&includeTrashed=1' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '.[0].key', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=aa' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")' machine # [ 19.149530] zhost[893]: 2026-10-21T21:47:26.826667Z INFO zhost: request method=GET uri=/users/1/items?tag=aa api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=aa' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|sort|join(",")', in 0.02 seconds) (finished: subtest: query API: OR filters, descending sort and includeTrashed, in 0.17 seconds) subtest: sort=date orders by extracted year, not raw freeform text machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 19.177903] zhost[893]: 2026-10-21T21:47:26.855545Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 11' -d '[{"key":"DATE2QLD","itemType":"book","title":"old","date":"circa 1850","tags":[{"tag":"era"}]},{"key":"DATE2MID","itemType":"book","title":"mid","date":"January 1960","tags":[{"tag":"era"}]},{"key":"DATE2NEW","itemType":"book","title":"new","date":"2020-05-01","tags":[{"tag":"era"}]}]' | jq -e .successful machine # [ 19.203820] zhost[893]: 2026-10-21T21:47:26.881104Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=11 body=[{"key":"DATE2QLD","itemType":"book","title":"old","date":"circa 1850","tags":[{"tag":"era"}]},{"key":"DATE2MID","itemType":"book","title":"mid","date":"January 1960","tags":[{"tag":"era"}]},{"key":"DATE2NEW","itemType":"book","title":"new","date":"2020-05-01","tags":[{"tag":"era"}]}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 11' -d '[{"key":"DATE2QLD","itemType":"book","title":"old","date":"circa 1850","tags":[{"tag":"era"}]},{"key":"DATE2MID","itemType":"book","title":"mid","date":"January 1960","tags":[{"tag":"era"}]},{"key":"DATE2NEW","itemType":"book","title":"new","date":"2020-05-01","tags":[{"tag":"era"}]}]' | jq -e .successful, in 0.04 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=era&sort=date&direction=asc' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|join(",")' machine # [ 19.239751] zhost[893]: 2026-10-21T21:47:26.917488Z INFO zhost: request method=GET uri=/users/1/items?tag=era&sort=date&direction=asc api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?tag=era&sort=date&direction=asc' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -r '[.[].key]|join(",")', in 0.03 seconds) (finished: subtest: sort=date orders by extracted year, not raw freeform text, in 0.09 seconds) subtest: collection top items are served as a plain-text key list machine: must succeed: curl -sf 'http://localhost:8189/users/1/collections/CQLLXXXX/items/top?format=keys' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 19.264063] zhost[893]: 2026-10-21T21:47:26.941506Z INFO zhost: request method=GET uri=/users/1/collections/CQLLXXXX/items/top?format=keys api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/collections/CQLLXXXX/items/top?format=keys' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/collections/CQLLXXXX/items/top?format=keys' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 19.287074] zhost[893]: 2026-10-21T21:47:26.964719Z INFO zhost: request method=GET uri=/users/1/collections/CQLLXXXX/items/top?format=keys api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/collections/CQLLXXXX/items/top?format=keys' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) (finished: subtest: collection top items are served as a plain-text key list, in 0.05 seconds) subtest: a versions read with nothing newer returns 200 + empty map, not 304 machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 19.316071] zhost[893]: 2026-10-21T21:47:26.993395Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 19.339644] zhost[893]: 2026-10-21T21:47:27.017219Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=12 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}' machine # [ 19.363391] zhost[893]: 2026-10-21T21:47:27.040968Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=12 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items/top?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 19.386770] zhost[893]: 2026-10-21T21:47:27.064399Z INFO zhost: request method=GET uri=/users/1/items/top?format=versions&since=12 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/items/top?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items/top?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}' machine # [ 19.410904] zhost[893]: 2026-10-21T21:47:27.088590Z INFO zhost: request method=GET uri=/users/1/items/top?format=versions&since=12 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items/top?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/collections?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 19.434379] zhost[893]: 2026-10-21T21:47:27.111829Z INFO zhost: request method=GET uri=/users/1/collections?format=versions&since=12 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/collections?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/collections?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}' machine # [ 19.458403] zhost[893]: 2026-10-21T21:47:27.136030Z INFO zhost: request method=GET uri=/users/1/collections?format=versions&since=12 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/collections?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/searches?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 19.481721] zhost[893]: 2026-10-21T21:47:27.159349Z INFO zhost: request method=GET uri=/users/1/searches?format=versions&since=12 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/searches?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/searches?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}' machine # [ 19.506035] zhost[893]: 2026-10-21T21:47:27.183577Z INFO zhost: request method=GET uri=/users/1/searches?format=versions&since=12 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/searches?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/fulltext?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 19.529228] zhost[893]: 2026-10-21T21:47:27.206718Z INFO zhost: request method=GET uri=/users/1/fulltext?format=versions&since=12 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' 'http://localhost:8189/users/1/fulltext?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/fulltext?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}' machine # [ 19.552931] zhost[893]: 2026-10-21T21:47:27.230475Z INFO zhost: request method=GET uri=/users/1/fulltext?format=versions&since=12 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/fulltext?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '. == {}', in 0.02 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -iq 'last-modified-version: 12' machine # [ 19.577771] zhost[893]: 2026-10-21T21:47:27.255386Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=12 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -iq 'last-modified-version: 12', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/users/1/settings -H 'If-Modified-Since-Version: 12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' machine # [ 19.600596] zhost[893]: 2026-10-21T21:47:27.278225Z INFO zhost: request method=GET uri=/users/1/settings api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' http://localhost:8189/users/1/settings -H 'If-Modified-Since-Version: 12' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3', in 0.02 seconds) (finished: subtest: a versions read with nothing newer returns 200 + empty map, not 304, in 0.31 seconds) subtest: collections round-trip through write, read, versions and delete machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 19.628214] zhost[893]: 2026-10-21T21:47:27.305609Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/collections -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 12' -d '[{"key":"CQLL2223","name":"Papers"}]' | jq -e '.successful."0".key == "CQLL2223"' machine # [ 19.653104] zhost[893]: 2026-10-21T21:47:27.330715Z INFO zhost: request method=POST uri=/users/1/collections api_version=3 if_unmod=12 body=[{"key":"CQLL2223","name":"Papers"}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/collections -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 12' -d '[{"key":"CQLL2223","name":"Papers"}]' | jq -e '.successful."0".key == "CQLL2223"', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/collections?collectionKey=CQLL2223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.name == "Papers"' machine # [ 19.682792] zhost[893]: 2026-10-21T21:47:27.360229Z INFO zhost: request method=GET uri=/users/1/collections?collectionKey=CQLL2223&format=json api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/collections?collectionKey=CQLL2223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.name == "Papers"', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/collections?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.CQLL2223' machine # [ 19.708304] zhost[893]: 2026-10-21T21:47:27.385741Z INFO zhost: request method=GET uri=/users/1/collections?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/collections?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.CQLL2223', in 0.02 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 19.736511] zhost[893]: 2026-10-21T21:47:27.414045Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X DELETE 'http://localhost:8189/users/1/collections?collectionKey=CQLL2223' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 13' machine # [ 19.760361] zhost[893]: 2026-10-21T21:47:27.437766Z INFO zhost: request method=DELETE uri=/users/1/collections?collectionKey=CQLL2223 api_version=3 if_unmod=13 body= machine: (finished: must succeed: curl -sf -X DELETE 'http://localhost:8189/users/1/collections?collectionKey=CQLL2223' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 13', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/deleted?since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.collections | index("CQLL2223")' machine # [ 19.788821] zhost[893]: 2026-10-21T21:47:27.466309Z INFO zhost: request method=GET uri=/users/1/deleted?since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/deleted?since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.collections | index("CQLL2223")', in 0.02 seconds) (finished: subtest: collections round-trip through write, read, versions and delete, in 0.19 seconds) subtest: saved searches round-trip through write, read and delete machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 19.817281] zhost[893]: 2026-10-21T21:47:27.494886Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/searches -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 14' -d '[{"key":"SRCH2223","name":"Recent","conditions":[]}]' | jq -e '.successful."0".key == "SRCH2223"' machine # [ 19.842193] zhost[893]: 2026-10-21T21:47:27.519687Z INFO zhost: request method=POST uri=/users/1/searches api_version=3 if_unmod=14 body=[{"key":"SRCH2223","name":"Recent","conditions":[]}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/searches -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 14' -d '[{"key":"SRCH2223","name":"Recent","conditions":[]}]' | jq -e '.successful."0".key == "SRCH2223"', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/searches?searchKey=SRCH2223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.name == "Recent"' machine # [ 19.871050] zhost[893]: 2026-10-21T21:47:27.548139Z INFO zhost: request method=GET uri=/users/1/searches?searchKey=SRCH2223&format=json api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/searches?searchKey=SRCH2223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.name == "Recent"', in 0.03 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 19.899296] zhost[893]: 2026-10-21T21:47:27.576880Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X DELETE 'http://localhost:8189/users/1/searches?searchKey=SRCH2223' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 15' machine # [ 19.922985] zhost[893]: 2026-10-21T21:47:27.600386Z INFO zhost: request method=DELETE uri=/users/1/searches?searchKey=SRCH2223 api_version=3 if_unmod=15 body= machine: (finished: must succeed: curl -sf -X DELETE 'http://localhost:8189/users/1/searches?searchKey=SRCH2223' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 15', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/deleted?since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.searches | index("SRCH2223")' machine # [ 19.951584] zhost[893]: 2026-10-21T21:47:27.629133Z INFO zhost: request method=GET uri=/users/1/deleted?since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/deleted?since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.searches | index("SRCH2223")', in 0.02 seconds) (finished: subtest: saved searches round-trip through write, read and delete, in 0.16 seconds) subtest: settings round-trip through write, read and delete machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 19.980103] zhost[893]: 2026-10-21T21:47:27.657737Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/settings -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 16' -d '{"tagColors":{"value":[{"name":"x","color":"#fff"}]}}' machine # [ 20.003721] zhost[893]: 2026-10-21T21:47:27.681337Z INFO zhost: request method=POST uri=/users/1/settings api_version=3 if_unmod=16 body={"tagColors":{"value":[{"name":"x","color":"#fff"}]}} machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/settings -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 16' -d '{"tagColors":{"value":[{"name":"x","color":"#fff"}]}}' , in 0.03 seconds) machine: must succeed: curl -sf http://localhost:8189/users/1/settings -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.tagColors.value[0].name == "x" and (.tagColors.version | type == "number")' machine # [ 20.032080] zhost[893]: 2026-10-21T21:47:27.709648Z INFO zhost: request method=GET uri=/users/1/settings api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/users/1/settings -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.tagColors.value[0].name == "x" and (.tagColors.version | type == "number")', in 0.02 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/settings -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '{"k":{"value":1}}' machine # [ 20.055384] zhost[893]: 2026-10-21T21:47:27.732967Z INFO zhost: request method=POST uri=/users/1/settings api_version=3 if_unmod=0 body={"k":{"value":1}} machine # [ 20.059495] zhost[893]: 2026-10-21T21:47:27.737079Z WARN zhost: response error method=POST uri=/users/1/settings status=412 machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X POST http://localhost:8189/users/1/settings -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '{"k":{"value":1}}', in 0.03 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 20.085891] zhost[893]: 2026-10-21T21:47:27.763575Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X DELETE 'http://localhost:8189/users/1/settings?settingKey=tagColors' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 17' machine # [ 20.109535] zhost[893]: 2026-10-21T21:47:27.787251Z INFO zhost: request method=DELETE uri=/users/1/settings?settingKey=tagColors api_version=3 if_unmod=17 body= machine: (finished: must succeed: curl -sf -X DELETE 'http://localhost:8189/users/1/settings?settingKey=tagColors' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 17', in 0.03 seconds) machine: must succeed: curl -sf http://localhost:8189/users/1/settings -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.tagColors == null' machine # [ 20.137289] zhost[893]: 2026-10-21T21:47:27.815029Z INFO zhost: request method=GET uri=/users/1/settings api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf http://localhost:8189/users/1/settings -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.tagColors == null', in 0.02 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/deleted?since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.settings | index("tagColors")' machine # [ 20.162216] zhost[893]: 2026-10-21T21:47:27.839736Z INFO zhost: request method=GET uri=/users/1/deleted?since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/deleted?since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.settings | index("tagColors")', in 0.03 seconds) (finished: subtest: settings round-trip through write, read and delete, in 0.21 seconds) subtest: a gzip-compressed write body is decoded machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 20.190699] zhost[893]: 2026-10-21T21:47:27.868209Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: printf '%s' '[{"key":"GZIP2223","itemType":"book","title":"zipped"}]' | gzip | curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 18' -H 'Content-Encoding: gzip' --data-binary @- | jq -e .successful machine # [ 20.217309] zhost[893]: 2026-10-21T21:47:27.894944Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=18 body=[{"key":"GZIP2223","itemType":"book","title":"zipped"}] machine: (finished: must succeed: printf '%s' '[{"key":"GZIP2223","itemType":"book","title":"zipped"}]' | gzip | curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 18' -H 'Content-Encoding: gzip' --data-binary @- | jq -e .successful, in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=GZIP2223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.title == "zipped"' machine # [ 20.246433] zhost[893]: 2026-10-21T21:47:27.924044Z INFO zhost: request method=GET uri=/users/1/items?itemKey=GZIP2223&format=json api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=GZIP2223&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.title == "zipped"', in 0.02 seconds) (finished: subtest: a gzip-compressed write body is decoded, in 0.08 seconds) subtest: PATCH updates items and is gated by the read-only key machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 20.275530] zhost[893]: 2026-10-21T21:47:27.953157Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X PATCH http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 19' -d '[{"key":"GZIP2223","itemType":"book","title":"patched"}]' | jq -e '.successful."0".data.title == "patched"' machine # [ 20.301193] zhost[893]: 2026-10-21T21:47:27.978882Z INFO zhost: request method=PATCH uri=/users/1/items api_version=3 if_unmod=19 body=[{"key":"GZIP2223","itemType":"book","title":"patched"}] machine: (finished: must succeed: curl -sf -X PATCH http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 19' -d '[{"key":"GZIP2223","itemType":"book","title":"patched"}]' | jq -e '.successful."0".data.title == "patched"', in 0.03 seconds) machine: must succeed: curl -s -o /dev/null -w '%{http_code}' -X PATCH http://localhost:8189/users/1/items -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '[{"key":"X","itemType":"book"}]' machine # [ 20.329782] zhost[893]: 2026-10-21T21:47:28.007384Z INFO zhost: request method=PATCH uri=/users/1/items api_version=3 if_unmod=0 body=[{"key":"X","itemType":"book"}] machine: (finished: must succeed: curl -s -o /dev/null -w '%{http_code}' -X PATCH http://localhost:8189/users/1/items -H 'Zotero-API-Key: readonlytoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 0' -d '[{"key":"X","itemType":"book"}]', in 0.02 seconds) (finished: subtest: PATCH updates items and is gated by the read-only key, in 0.08 seconds) subtest: PATCH merges: a partial update keeps unspecified fields machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 20.357038] zhost[893]: 2026-10-21T21:47:28.034648Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 20' -d '[{"key":"MERGEIT2","itemType":"book","title":"orig","tags":[{"tag":"keep"}]}]' | jq -e .successful machine # [ 20.383084] zhost[893]: 2026-10-21T21:47:28.060634Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=20 body=[{"key":"MERGEIT2","itemType":"book","title":"orig","tags":[{"tag":"keep"}]}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 20' -d '[{"key":"MERGEIT2","itemType":"book","title":"orig","tags":[{"tag":"keep"}]}]' | jq -e .successful, in 0.03 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 20.414935] zhost[893]: 2026-10-21T21:47:28.092470Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X PATCH http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 21' -d '[{"key":"MERGEIT2","title":"new"}]' machine # [ 20.438770] zhost[893]: 2026-10-21T21:47:28.116298Z INFO zhost: request method=PATCH uri=/users/1/items api_version=3 if_unmod=21 body=[{"key":"MERGEIT2","title":"new"}] machine: (finished: must succeed: curl -sf -X PATCH http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 21' -d '[{"key":"MERGEIT2","title":"new"}]', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=MERGEIT2&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.title=="new" and .[0].data.itemType=="book" and .[0].data.tags[0].tag=="keep"' machine # [ 20.466464] zhost[893]: 2026-10-21T21:47:28.144037Z INFO zhost: request method=GET uri=/users/1/items?itemKey=MERGEIT2&format=json api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=MERGEIT2&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.title=="new" and .[0].data.itemType=="book" and .[0].data.tags[0].tag=="keep"', in 0.03 seconds) (finished: subtest: PATCH merges: a partial update keeps unspecified fields, in 0.14 seconds) subtest: POST also merges: a partial upload keeps unspecified fields machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 20.496583] zhost[893]: 2026-10-21T21:47:28.174067Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 22' -d '[{"key":"PMERGEAT","itemType":"attachment","linkMode":"imported_file","filename":"f.pdf","contentType":"application/pdf"}]' | jq -e .successful machine # [ 20.522078] zhost[893]: 2026-10-21T21:47:28.199676Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=22 body=[{"key":"PMERGEAT","itemType":"attachment","linkMode":"imported_file","filename":"f.pdf","contentType":"application/pdf"}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 22' -d '[{"key":"PMERGEAT","itemType":"attachment","linkMode":"imported_file","filename":"f.pdf","contentType":"application/pdf"}]' | jq -e .successful, in 0.03 seconds) machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 20.555618] zhost[893]: 2026-10-21T21:47:28.233119Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 23' -d '[{"key":"PMERGEAT","lastRead":1700000000,"tags":[]}]' machine # [ 20.579533] zhost[893]: 2026-10-21T21:47:28.257067Z INFO zhost: request method=POST uri=/users/1/items api_version=3 if_unmod=23 body=[{"key":"PMERGEAT","lastRead":1700000000,"tags":[]}] machine: (finished: must succeed: curl -sf -X POST http://localhost:8189/users/1/items -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 23' -d '[{"key":"PMERGEAT","lastRead":1700000000,"tags":[]}]', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=PMERGEAT&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.itemType=="attachment" and .[0].data.linkMode=="imported_file" and .[0].data.filename=="f.pdf" and .[0].data.lastRead==1700000000' machine # [ 20.607993] zhost[893]: 2026-10-21T21:47:28.285352Z INFO zhost: request method=GET uri=/users/1/items?itemKey=PMERGEAT&format=json api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/items?itemKey=PMERGEAT&format=json' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.[0].data.itemType=="attachment" and .[0].data.linkMode=="imported_file" and .[0].data.filename=="f.pdf" and .[0].data.lastRead==1700000000', in 0.02 seconds) (finished: subtest: POST also merges: a partial upload keeps unspecified fields, in 0.14 seconds) subtest: deletes are recorded in the deletion log machine: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2 machine # [ 20.636393] zhost[893]: 2026-10-21T21:47:28.313894Z INFO zhost: request method=GET uri=/users/1/items?format=versions&since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf -D - -o /dev/null 'http://localhost:8189/users/1/items?format=versions&since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | grep -i last-modified-version | tr -d '\r' | cut -d' ' -f2, in 0.03 seconds) machine: must succeed: curl -sf -X DELETE 'http://localhost:8189/users/1/items?itemKey=ITEM2223' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 24' machine # [ 20.659938] zhost[893]: 2026-10-21T21:47:28.337479Z INFO zhost: request method=DELETE uri=/users/1/items?itemKey=ITEM2223 api_version=3 if_unmod=24 body= machine: (finished: must succeed: curl -sf -X DELETE 'http://localhost:8189/users/1/items?itemKey=ITEM2223' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' -H 'If-Unmodified-Since-Version: 24', in 0.03 seconds) machine: must succeed: curl -sf 'http://localhost:8189/users/1/deleted?since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.items | index("ITEM2223")' machine # [ 20.687365] zhost[893]: 2026-10-21T21:47:28.364891Z INFO zhost: request method=GET uri=/users/1/deleted?since=0 api_version=3 if_unmod=- body= machine: (finished: must succeed: curl -sf 'http://localhost:8189/users/1/deleted?since=0' -H 'Zotero-API-Key: testtoken' -H 'Zotero-API-Version: 3' | jq -e '.items | index("ITEM2223")', in 0.02 seconds) (finished: subtest: deletes are recorded in the deletion log, in 0.08 seconds) (finished: run the VM test script, in 21.59 seconds) test script finished in 21.64s cleanup kill QemuMachine (pid 45) machine # qemu-system-x86_64: terminating on signal 15 from pid 39 (/nix/store/lb41b0anx1f98y9y5s9mdv97gjgsq740-python3-3.14.7/bin/python3.14) machine # [2026-10-21T21:47:29Z INFO virtiofsd] Client disconnected, shutting down machine # [2026-10-21T21:47:29Z INFO virtiofsd] Client disconnected, shutting down machine # [2026-10-21T21:47:29Z INFO virtiofsd] Client disconnected, shutting down (finished: cleanup, in 0.17 seconds)