On an AutoDL server every model in the models folder is a link into the platform's shared, read-only model disk, named like 6b4679... without an extension. Scans wrote the .info beside the link, but get_metadata resolved the path and read beside the disk's file: a scanned model showed as not scanned, under the disk's file name. Delete, edit, open folder, MCP and saved-workflow lookups resolved the file too, so they refused it as outside the models folder (or, for a link inside it, would have acted on the file behind it). path_utils.model_file_within joins a resolved folder with a bare name (require_filename, which now refuses "." and ".." too); model_reference_within resolves the subfolders of a relative path inside the root, through links as before, and takes the file as named. get_metadata reads beside the path it is given (abspath). Edits, renames and deletes act on the link; nothing writes into a model file. Checked with a link stood in by patching realpath (this computer cannot make links): the info beside the link is read and the name is the link's; "..", ".", "a/b" and a relative path leaving the root are refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Architecture Topic Guide
Start with the repository-root ARCHITECTURE.md, then
open only the topic needed for the current task.
backend.md: Python routes, filesystem safety, persistence, scan state, model sidecars, and backend performance.frontend.md: extension bootstrap, UI ownership, localization, media lifecycle, panel state, and graph mutations.recipes.md: Workflow Recipes, packages, galleries, Parameter Notebooks, prompt roles, and recipe-to-model transitions.material-library.md: saved prompts and node values (material files), keeping an output image, and dragging prompts onto the canvas.recipe-model-lifecycle.md: authoritative model fields, Hash synchronization, local matching, partial append, and note privacy.model-resolution.md: model provenance, Model Check, hash injection, model scanning, and recovery policy.../decisions/README.md: concise records of product and architectural decisions that still explain current behavior.
These documents describe current contracts rather than implementation history.
For exact changes, use Git history. For user-visible releases, use
CHANGELOG.md. For recurring implementation traps, use
lessons.md.