1f53f6e2f5
* refactor(slides): assert dry-run parent_type instead of deriving it from a placeholder A wiki --presentation cannot be resolved during a dry-run: the real presentation token only exists after a get_node call a preview must not make, so parent_node shows a "<resolved_slides_token>" placeholder. appendSlidesUploadDryRun derived parent_type from parent_node, which sent that placeholder through the office-token check. The value it produced was correct. A placeholder matches no office token shape, so it fell through to slide_file, and slide_file is right here: a wiki ref that reaches an upload is native by construction, because resolvePresentationID rejects any wiki node whose obj_type is not "slides" and an imported office deck sits in drive as a "file" node. It was correct by accident, though, which left the preview hostage to the placeholder's spelling and to every rule later added to isOfficePresentation. Pass parent_type in explicitly instead, so slidesDryRunParentType states the wiki case as a decision with its reason recorded, and the placeholder is never classified. No behaviour change: dry-run output is byte-identical for native tokens, imported office tokens, legacy office prefixes, slides URLs, wiki URLs, and +create, across +media-upload / +add-slide / +update-slide. Tests pin the contract the refactor protects, including a wiki ref whose node token is itself office-shaped -- a wiki node token and the deck token it points at are different tokens in different namespaces, so classifying ref.Token would be wrong for a wiki ref even though it is right for every other kind. That is the regression this makes impossible. * test(slides): use the fixture hostname for the wiki dry-run probes domaincontract rejects "bytedance.larkoffice.com": it is in neither allowlist, and a real tenant host does not belong in a fixture. Use example.feishu.cn, already in fixture-domains.txt and the hostname the rest of the slides wiki tests use. The URL is only a parse fixture -- nothing resolves it -- so only the hostname changes.