{"actions":{"bootstrapAndRun":{"effect":"installs rote if missing, inspects, prepares, and asks before running","href":"https://play.modiqo.ai/install?play=chinmoy/os-portability@0.3.0","method":"GET","rel":"https://rote.dev/rels/bootstrap-and-run","requiresConsent":true,"responseMediaType":"text/x-shellscript"},"inspect":{"command":"rote play inspect https://play.modiqo.ai/chinmoy/os-portability@0.3.0","effect":"read-only"},"installCliOnly":{"effect":"installs the rote CLI, nothing else","href":"https://play.modiqo.ai/install","method":"GET","rel":"https://rote.dev/rels/install-cli","requiresConsent":true,"responseMediaType":"text/x-shellscript"},"run":{"command":"rote play run https://play.modiqo.ai/chinmoy/os-portability@0.3.0","effect":"executes the play locally after consent","headless":{"approvalAssertion":"--yes","approvalRequiredBeforeInvocation":true,"commandTemplate":"rote play run https://play.modiqo.ai/chinmoy/os-portability@0.3.0 <name=value...> --yes","stdinPolicy":"never pipe input to automate the interactive Ready selector"},"requiresConsent":true}},"description":"Reads a repository's tracked files out of the git index and reports what breaks when a teammate checks it out on a different operating system. 7 independent probes cover paths that differ only by case or by unicode normalisation, Windows reserved names and illegal characters, CRLF and mixed line endings, a UTF-8 BOM in front of a shebang or a .json file, shebang scripts missing the executable bit - git hooks git silently skips included - tracked symlinks, absolute host paths such as /Users/you or C:\\ left in source, non-NFC and zero-width filenames, and whether .gitattributes covers the extensions in use or mandates CRLF repository-wide. Every finding is classed breaks-checkout, breaks-run or cosmetic for linux, macos and windows separately. It reports UNKNOWN rather than a pass when the target is not a git work tree, has no commits and nothing staged, when a probe cannot report, and when no file was examined - a pass over zero coverage is never printed. It never flags .bat files, binaries, emoji joiners or P","distribution":{"digest":"sha256:baf103c494789877004ad25da33d790c1dce9acaad13ae48c9627aaa2b53b163","mediaType":"application/vnd.modiqo.rote-flow","size":87646,"verifiedBy":"rote verifies the downloaded archive against this digest before it runs"},"effects":{"credentialsProvidedBy":"runner","credentialsRemainLocal":true,"declaredWrites":[],"publisherReceivesCredentials":false},"id":"https://play.modiqo.ai/chinmoy/os-portability@0.3.0","inputPolicy":{"optionalWithDefault":"show_default_and_accept_override","optionalWithoutDefault":"omit_unless_supplied","required":"ask","secrets":"collect_locally_outside_conversation"},"links":{"docs":"https://rote.dev","page":"https://play.modiqo.ai/chinmoy/os-portability@0.3.0","protocol":"https://play.modiqo.ai/.well-known/rote","self":"https://play.modiqo.ai/chinmoy/os-portability@0.3.0.json"},"name":"os-portability","owner":{"kind":"user","slug":"chinmoy"},"parameters":[{"default":".","description":"Work tree to inspect. The default '.' resolves to the directory the run started in, so a zero-argument run checks the repository you are standing in; pass an absolute path to check a checkout somewhere else. Only the git index is read, never the working tree, because a Windows checkout with core.autocrlf=true shows CRLF on disk for files that are pure LF in the index.","input":{"allowCustom":true,"choices":[],"label":"Path"},"name":"path","required":false,"type":"string"},{"default":"all","description":"Which operating systems the findings are judged against: all, or any comma-separated subset of linux, macos and windows. The default all is what makes a zero-argument run useful, since the whole point is the OS you do not have; narrow it to linux when only CI has to survive the repository and a Windows reserved name is nobody's problem.","input":{"allowCustom":true,"choices":[],"label":"Target os"},"name":"target_os","required":false,"type":"string"},{"default":"all","description":"Which findings reach the report: all, or critical. The default all keeps the warnings, because a tracked symlink or a long path is exactly the kind of thing that wastes an afternoon without ever producing an error message; use critical for the list that hard-stops a checkout or a run.","input":{"allowCustom":true,"choices":[],"label":"Severity"},"name":"severity","required":false,"type":"string"},{"default":260,"description":"Length above which a tracked path is reported as too long for Windows. The default 260 is the classic Win32 limit, and it is measured against the repository-relative path only, so the checkout directory in front of it makes the real number larger and this direction cannot produce a false positive. Lower it to about 180 to leave room for a deep checkout directory.","input":{"allowCustom":true,"choices":[],"label":"Max path len"},"name":"max_path_len","required":false,"type":"integer"},{"default":6000,"description":"Upper bound on how many blobs are read for content. The default 6000 covers most repositories in a few seconds, and when the bound is hit the report says the scan was truncated instead of quietly under-reporting. Path-only checks - case, reserved names, length, unicode - always cover every tracked path regardless of this number.","input":{"allowCustom":true,"choices":[],"label":"Max files"},"name":"max_files","required":false,"type":"integer"},{"default":true,"description":"Whether relative import and include targets are compared against the case of the file they name. The default true catches the defect that only Linux sees: an import that resolves on macOS and Windows and fails on CI. A target that resolves to nothing at all is never reported, because it is far more often a package name or a build alias; set false to skip reading source entirely.","input":{"allowCustom":true,"choices":[],"label":"Check imports"},"name":"check_imports","required":false,"type":"boolean"},{"default":"node_modules,dist,build,vendor,.venv,deps,third_party,thirdparty,3rdparty,external,extern,subprojects,Godeps,.yarn,.pnp","description":"Comma-separated directory names skipped at any depth. The default names the trees people vendor or generate and nobody hand-edits, so a bundled dependency's CRLF never becomes your finding - redis returned 108 criticals from deps/jemalloc and deps/hiredis, code redis does not author; lockfiles, minified bundles and generated protobuf output are always skipped on top of this. Pass an empty value to audit everything the index holds, which is honoured literally: the default list is not silently restored.","input":{"allowCustom":true,"choices":[],"label":"Ignore"},"name":"ignore","required":false,"type":"string"},{"default":"png,jpg,jpeg,gif,ico,webp,bmp,tiff,pdf,zip,gz,tar,tgz,bz2,xz,7z,jar,class,so,dylib,dll,exe,bin,wasm,woff,woff2,ttf,otf,mp3,mp4,mov,wav,webm,psd,sqlite,db,pyc,o,a,lib,p12,pfx,parquet,npy,h5,onnx,xlsx,docx,pptx","description":"Extensions skipped before any content is read. The default is a fast pre-filter, not the safety net: every remaining blob is still classified by looking for a NUL byte in its first 8 KiB, so an unlisted binary format is caught anyway and never reported for line endings. Extend it when a large text-like format in your repository is not worth reading.","input":{"allowCustom":true,"choices":[],"label":"Binary extensions"},"name":"binary_extensions","required":false,"type":"string"},{"default":true,"description":"Whether .gitattributes suppresses line-ending findings it already accounts for. The default true drops every file the repository declares as eol=crlf, binary or -text, which is the difference between a report you can trust and one that flags the .bat files you deliberately keep as CRLF; set false to see the raw byte-level picture. One exception survives either way - a declaration cannot make a carriage return harmless in a shell script or a Makefile, so those are reported even when eol=crlf covers them.","input":{"allowCustom":true,"choices":[],"label":"Respect gitattributes"},"name":"respect_gitattributes","required":false,"type":"boolean"},{"default":true,"description":"Whether tracked build definitions and CI files are read for an explicit interpreter invocation of a script that is missing its exec bit. The default true is what stops the report calling pandoc's tools/validate-docx.sh a break: its Makefile runs it as \u0060sh ./tools/validate-docx.sh\u0060, and that form ignores the mode bit entirely, so CI passes today on a fresh 644 clone. Only Makefiles, .mk, .sh and CI YAML are read, only for this one pattern, and never for host paths; a match re-tiers the finding to a note and cites the caller, it never hides it. Set false to judge every shebang on its location alone.","input":{"allowCustom":true,"choices":[],"label":"Check invocations"},"name":"check_invocations","required":false,"type":"boolean"},{"default":true,"description":"Whether a UTF-8 byte order mark is reported. The default true covers exactly two shapes, because those are the two that actually break: a BOM in front of a shebang, which the kernel will not read past, and a BOM in a .json file, which neither python's json nor node's JSON.parse will accept. Every other BOM is silent by construction - .ps1, .cs, .csproj and .props need one for PowerShell 5.1 and MSBuild, and YAML, make and markdown all read one without complaint. Set false when a repository deliberately ships BOMs everywhere.","input":{"allowCustom":true,"choices":[],"label":"Report bom"},"name":"report_bom","required":false,"type":"boolean"}],"preparation":[{"action":{"command":"rote play inspect https://play.modiqo.ai/chinmoy/os-portability@0.3.0 --json","effect":"read-only"},"step":1,"type":"inspect_local_readiness"},{"references":["/parameters"],"step":2,"type":"collect_parameters"},{"references":["/parameters","/requirements","/effects"],"step":3,"type":"review"},{"consentBoundary":"the user approves the exact play and parameter values","references":["/parameters","/requirements","/effects"],"step":4,"type":"obtain_run_consent"},{"action":{"command":"rote play run https://play.modiqo.ai/chinmoy/os-portability@0.3.0","headlessCommandTemplate":"rote play run https://play.modiqo.ai/chinmoy/os-portability@0.3.0 <name=value...> --yes"},"preservesAcquisitionBoundaries":["adapter_selection","oauth_dcr","google_discovery","static_token_setup","runtime_security_checks"],"requiresConsent":true,"step":5,"type":"run"}],"producedBy":{"roteVersion":"0.78.0"},"publishedAt":"2026-09-04T11:59:27.227537+00:00","reference":"chinmoy/os-portability@0.3.0","requirements":{"adapters":[],"browser":{"dependencies":[],"runtime":false,"signIn":false},"localTools":["git","python3"],"roteCli":{"minimumVersion":"0.62.0"},"sessions":false},"resolution":"pinned","schema":"rote.play.v1","stats":{"downloads":3,"installs":0},"steps":{"count":8,"names":["attributes_coverage","case_collisions","exec_and_links","host_paths","line_endings","unicode_paths","verdict","windows_hostile"]},"title":"os-portability","type":"play","version":"0.3.0","visibility":"public"}