| 1 | {
|
| 2 | "schema_version": 2,
|
| 3 | "subject": "oak",
|
| 4 | "measured_with": "oak 0.105.0 on darwin-ci-ni (macOS APFS: case-insensitive, normalization-insensitive)",
|
| 5 | "policy": "Strict xfail: a listed behaviour must fail at exactly these legs with details fully matching these patterns (re.fullmatch); anything else is a regression. A listed behaviour that passes where the entry applies is FIXED (remove it). outcome=refused marks typed policy refusals (product decision) vs bugs; outcome=intermittent marks a timing-dependent bug (pass is a pass, never FIXED). Tickets are fb-N; pending:<slug> only until filed. fs_profiles scopes an entry to filesystem classes (default: all). coverage.<profile>.expected_skips: any other skip on that profile is a coverage loss (UNMEASURED).",
|
| 6 | "entries": [
|
| 7 | {
|
| 8 | "behaviour": "path_roundtrip_v1",
|
| 9 | "ticket": "fb-531",
|
| 10 | "outcome": "refused",
|
| 11 | "failed_legs": {
|
| 12 | "behaviour": "command\\ \\('commit',\\ '\\-\\-no\\-verify'\\)\\ failed\\ \\(2\\):\\ b'error:\\ cannot\\ track\\ \"tab\\\\\\\\tname\":\\ tab\\ in\\ filename\\\\n'"
|
| 13 | },
|
| 14 | "reason": "legacy v1 scenario: oak commit refuses the tab-containing fixture name (policy; fb-531)"
|
| 15 | },
|
| 16 | {
|
| 17 | "behaviour": "path_tab_v1",
|
| 18 | "ticket": "fb-531",
|
| 19 | "outcome": "refused",
|
| 20 | "failed_legs": {
|
| 21 | "commit_push": "oak commit --no-verify exited 2: error: cannot track \"tab\\\\tname\": tab in filename"
|
| 22 | },
|
| 23 | "reason": "oak commit refuses a tab in a file name (policy, needs product decision)"
|
| 24 | },
|
| 25 | {
|
| 26 | "behaviour": "path_newline_v1",
|
| 27 | "ticket": "fb-531",
|
| 28 | "outcome": "refused",
|
| 29 | "failed_legs": {
|
| 30 | "commit_push": "oak commit --no-verify exited 2: error: cannot track \"(line\\\\nbreak|carriage\\\\rreturn)\": (newline|control character) in filename"
|
| 31 | },
|
| 32 | "reason": "oak commit refuses newline/CR in file names (same validate_entry_name policy as fb-531)"
|
| 33 | },
|
| 34 | {
|
| 35 | "behaviour": "path_control_chars_v1",
|
| 36 | "ticket": "fb-531",
|
| 37 | "outcome": "refused",
|
| 38 | "failed_legs": {
|
| 39 | "commit_push": "oak commit --no-verify exited 2: error: cannot track \"(bell\\\\u\\{7\\}name|escape\\\\u\\{1b\\}\\[0m|delete\\\\u\\{7f\\}name|unit\\\\u\\{1f\\}sep)\": control character in filename"
|
| 40 | },
|
| 41 | "reason": "oak commit refuses C0/DEL control characters in file names (policy)"
|
| 42 | },
|
| 43 | {
|
| 44 | "behaviour": "path_backslash_v1",
|
| 45 | "ticket": "fb-543",
|
| 46 | "outcome": "bug",
|
| 47 | "failed_legs": {
|
| 48 | "commit_push": "oak push --repo exited 2: error: push admission phase rejected outgoing commit [0-9a-f]{64}: file-change closure new-side path \"trailing/\" is absent from current; no remote state was mutated"
|
| 49 | },
|
| 50 | "reason": "a literal backslash is committed as a directory separator (back\\slash -> back/slash, source status clean); with a trailing backslash oak push rejects the commit oak just created"
|
| 51 | },
|
| 52 | {
|
| 53 | "behaviour": "path_long_component_v1",
|
| 54 | "ticket": "fb-544",
|
| 55 | "outcome": "bug",
|
| 56 | "failed_legs": {
|
| 57 | "clone_fs": "oak clone conformance/r\\d+-\\d+ exited 1: error: IO error: File name too long \\(os error 63\\)"
|
| 58 | },
|
| 59 | "reason": "oak clone fails ENAMETOOLONG on a 255-byte component Oak committed and pushed",
|
| 60 | "fs_profiles": [
|
| 61 | "darwin-ci-ni"
|
| 62 | ]
|
| 63 | },
|
| 64 | {
|
| 65 | "behaviour": "path_case_only_rename_v1",
|
| 66 | "ticket": "fb-545",
|
| 67 | "outcome": "bug",
|
| 68 | "failed_legs": {
|
| 69 | "pull_fs": "missing=\\['file\\.txt'\\]",
|
| 70 | "pull_status_clean": "oak status reports changes: \\[\\{\"path\": \"file\\.txt\", \"status\": \"deleted\"\\}(, \\{\"path\": \"file\\.txt\", \"status\": \"deleted\"\\})*\\]"
|
| 71 | },
|
| 72 | "reason": "case-insensitive FS: pulling a committed File.txt -> file.txt rename deletes the file from the worktree",
|
| 73 | "fs_profiles": [
|
| 74 | "darwin-ci-ni"
|
| 75 | ]
|
| 76 | },
|
| 77 | {
|
| 78 | "behaviour": "symlink_to_dir_real_v1",
|
| 79 | "ticket": "fb-542",
|
| 80 | "outcome": "bug",
|
| 81 | "failed_legs": {
|
| 82 | "pull_fs": "missing=\\['p/inner\\.txt'\\]; extra=\\['elsewhere/inner\\.txt'\\]",
|
| 83 | "pull_status_clean": "oak status reports changes: \\[\\{\"path\": \"elsewhere/inner\\.txt\", \"status\": \"renamed\", \"old_path\": \"p/inner\\.txt\"\\}(, \\{\"path\": \"elsewhere/inner\\.txt\", \"status\": \"renamed\", \"old_path\": \"p/inner\\.txt\"\\})*\\]"
|
| 84 | },
|
| 85 | "reason": "SECURITY: pull replacing symlink p with directory p/ writes p/inner.txt through the old link (outside the checkout for absolute targets) and drops p"
|
| 86 | },
|
| 87 | {
|
| 88 | "behaviour": "file_to_dir_v1",
|
| 89 | "ticket": "fb-546",
|
| 90 | "outcome": "bug",
|
| 91 | "failed_legs": {
|
| 92 | "pull_fs": "oak pull exited 1: error: IO error: File exists \\(os error 17\\)"
|
| 93 | },
|
| 94 | "reason": "oak pull fails EEXIST on a committed file -> directory transition"
|
| 95 | },
|
| 96 | {
|
| 97 | "behaviour": "file_to_deep_dir_v1",
|
| 98 | "ticket": "fb-546",
|
| 99 | "outcome": "bug",
|
| 100 | "failed_legs": {
|
| 101 | "pull_fs": "oak pull exited 1: error: IO error: Not a directory \\(os error 20\\)"
|
| 102 | },
|
| 103 | "reason": "oak pull fails ENOTDIR on a committed file -> deeper directory transition"
|
| 104 | },
|
| 105 | {
|
| 106 | "behaviour": "large_file_chunked_v1",
|
| 107 | "ticket": "pending:oak-serve-chunk-upload-database-locked",
|
| 108 | "outcome": "intermittent",
|
| 109 | "failed_legs": {
|
| 110 | "commit_push": "oak push --repo exited 6: error: Server error: Failed to upload chunk: HTTP 500 Internal Server Error: Database error: database is locked"
|
| 111 | },
|
| 112 | "reason": "intermittent: loopback oak serve returns HTTP 500 'database is locked' on a concurrent chunk upload and the client does not retry (2 of 7 matrix runs; repro r7 3/3 with three copies in parallel)"
|
| 113 | }
|
| 114 | ],
|
| 115 | "coverage": {
|
| 116 | "darwin-ci-ni": {
|
| 117 | "expected_skips": [
|
| 118 | "path_unicode_nfc_nfd_pair_v1",
|
| 119 | "path_non_utf8_v1",
|
| 120 | "path_case_distinct_v1",
|
| 121 | "huge_file_sparse_v1"
|
| 122 | ],
|
| 123 | "note": "APFS default: case-insensitive and normalization-insensitive, no non-UTF-8 names; huge_file_sparse_v1 is gated (and a gated skip even when run: reader legs over bound)"
|
| 124 | }
|
| 125 | }
|
| 126 | }
|