/** * Standalone workspace validator. * * Usage: * qfg-verify Validate a workspace directory on disk * qfg-verify --git-hook Run as git pre-receive hook (reads stdin for refs, * uses git commands to read files from the pushed commit) * * Exit codes: * 0 All checks pass * 1 Validation errors found */ /** * Read all JSON config files from a git commit using `git show`. * Works in bare repos (no working tree needed). * * qfg-6na9.6: uses execFileSync (never a shell) and `ls-tree -z` (NUL-delimited, * disables git's C-quoting of "unusual" paths). The old string-interpolated * execSync + default ls-tree output silently SKIPPED any filename containing a * space or non-ASCII char — exactly the Policy-A-violating keys the hook * exists to catch (verified live on staging: a `configs/bad charset key.json` * push was accepted unvalidated). A listed-but-unreadable file is now a hard * failure (fail closed), not a silent skip. * * qfg-hbuy.4: enumerates RECURSIVELY (`-r`) and with NO name filtering. The * old non-recursive listing plus `endsWith('.json') && !includes('/.')` filter * meant dotfiles, nested paths (configs/sub/x.json), and case-variant * extensions (FOO.JSON) never reached validation at all — ghost files that * push fine but no loader reads. The hook must see EVERYTHING under the * validated dirs; validateFileMap is the layer that decides what is an error. */ export declare function readFilesFromCommit(commitOid: string, cwd?: string): Map;