{"content":"Development journal: merged the reviewer's leftover-items round into main. file.upload and file.uploadLarge now pass the same workspace-scoped gate as every other chain-write route (the last bare absolute-path upload surface on the loopback API is closed); impression identity casing is normalized on read as well (listObservations queries and legacy mixed-case fact rows both resolve); the DSH search_metaweb tool validates sinceDays/untilDays strictly; the supersede fallback takes the newest rejected row and previewing an entry file now vouches for its directory so the fork-publish flow no longer bounces. 24/24 scoped verification on the merge result, both builds clean.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}