playrote.play.v1

cchinmoy/os-portabilityv0.3.0Public

Os portability

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.

Read the full description

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

  • Published 4 Sep 2026
  • Downloads 3
  • Needs rote 0.62.0+
  • Digest sha256:baf103c49478…
  • Reference chinmoy/os-portability@0.3.0

Before you run it2 local tools

Everything here is checked on your machine when rote inspects the play. This page never learns what you have installed or which credentials you hold.

  • ○
    gitlocal tool

    Requires >=2.20.0. Run rote play inspect to check your host; unverified versions remain unknown.

  • ○
    python3local tool

    Requires >=3.8.0. Run rote play inspect to check your host; unverified versions remain unknown.

Inputs11, all optional

rote asks for these before running and shows the defaults it will use.

  • Pathpath

    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.

    optionalstringdefault .custom value allowed
  • Target ostarget_os

    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.

    optionalstringdefault allcustom value allowed
  • Severityseverity

    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.

    optionalstringdefault allcustom value allowed
  • Max path lenmax_path_len

    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.

    optionalintegerdefault 260custom value allowed
  • Max filesmax_files

    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.

    optionalintegerdefault 6000custom value allowed
  • Check importscheck_imports

    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.

    optionalbooleandefault truecustom value allowed
  • Ignoreignore

    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.

    optionalstringdefault node_modules,dist,build,vendor,.venv,deps,third_party,thirdparty,3rdparty,external,extern,subprojects,Godeps,.yarn,.pnpcustom value allowed
  • Binary extensionsbinary_extensions

    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.

    optionalstringdefault 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,pptxcustom value allowed
  • Respect gitattributesrespect_gitattributes

    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.

    optionalbooleandefault truecustom value allowed
  • Check invocationscheck_invocations

    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 `sh ./tools/validate-docx.sh`, 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.

    optionalbooleandefault truecustom value allowed
  • Report bomreport_bom

    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.

    optionalbooleandefault truecustom value allowed

What it changes

No write operations are declared in this version's manifest.

Credentials remain in the recipient's local rote vault; this page and the publisher never receive them.

Runtime details
  • rote CLIversion 0.62.0 or newer
  • Servicesnone declared
  • Digestsha256:baf103c494789877004ad25da33d790c1dce9acaad13ae48c9627aaa2b53b163
  • Archive size87646 bytes
  • Published2026-09-04T11:59:27.227537+00:00
  • Published withrote 0.78.0

Credential values and current readiness remain local. Opening this page never prompts for a credential, opens an authorization browser, or calls a service this play uses.

A play is a published, versioned automation package that runs on your own machine through rote, a free command-line tool. Opening this page installs nothing and runs nothing.