|
| 1 | +# Attribute case-policy repair verification |
| 2 | + |
| 3 | +**Status: locally verified; exact-candidate locked CI and independent review/owner |
| 4 | +acceptance remain pending.** This is residual F4-C1 within the existing packaging |
| 5 | +plan, not a new implementation sequence. |
| 6 | + |
| 7 | +## Baseline, owner and change |
| 8 | + |
| 9 | +The connected repository reports main at |
| 10 | +`143c8de1706ccf4b82b5c78aeed644c071ed999a`, tree |
| 11 | +`bb2876f0251243b1d7d38b7ee1026c080394a08e`. Its mounted Actions source artifact |
| 12 | +`11003765805` was verified against archive SHA-256 |
| 13 | +`509e9b6b38904ae388c121326acf4e2040d4e88b91fe50730f55518584f5b6ba` and checked out |
| 14 | +on a task-owned repair branch. The user authorized this remaining repair from the |
| 15 | +follow-up source review. No later or unrelated user working-tree content was used. |
| 16 | + |
| 17 | +Production change is confined to `GitRepository.revision_patch`: add the command- |
| 18 | +local setting `core.ignoreCase=false` and document its meaning. The existing Git |
| 19 | +owner now matches candidate-committed attribute patterns case-sensitively over |
| 20 | +exact Git paths. Neither the repository's filesystem-compatibility setting nor |
| 21 | +ordinary reads, worktree operations, capture or publication defaults are changed. |
| 22 | + |
| 23 | +The complete patch still supports binary data, exact modes and committed attribute |
| 24 | +choices. Case-sensitive matching does not mean disabling attributes: `*.TXT -diff` |
| 25 | +continues to select a binary patch for `MATCH.TXT`, but not for `data.txt`. |
| 26 | +Existing local-only execution, custom-driver rejection, info-attribute admission, |
| 27 | +output bounds and command lifetime remain intact. The prior directory-handle, |
| 28 | +common-Git-root and portable-component repairs were not modified. |
| 29 | + |
| 30 | +No Engine interface, packet format, public signature, schema, metadata key, CLI |
| 31 | +flag, migration or additional abstraction is introduced. Engine interface 45 and |
| 32 | +packet format 1 remain unchanged. There is no source/evidence/provider network |
| 33 | +operation added to the builder. |
| 34 | + |
| 35 | +## Deciding evidence |
| 36 | + |
| 37 | +Two regression methods were added at the existing owners: |
| 38 | + |
| 39 | +- `test_exact_patch.ExactPatchTests.test_attribute_case_policy_is_fixed_without_reconfiguring_repository` |
| 40 | + invokes the original public Git adapter using real commits under repository |
| 41 | + settings false and true. It compares the lowercase path's hunk to a literal |
| 42 | + expectation built from independently observed blob IDs and exact file bytes, |
| 43 | + and requires the exact-case file's binary patch marker. It checks unchanged |
| 44 | + source, Git index, refs, HEAD and configuration after each operation. |
| 45 | +- `test_repair_boundaries.ReviewRepairTests.test_cli_packet_case_policy_preserves_material_and_repository_configuration` |
| 46 | + invokes the actual CLI in replacement processes with the same request and |
| 47 | + selected commits under both settings. It checks successful outcomes, exact |
| 48 | + baseline/candidate source members, literal text and positive binary-policy |
| 49 | + oracles, identical complete ZIP and manifest bytes, no leftover staging files, |
| 50 | + and unchanged request/source/index/refs/configuration. |
| 51 | + |
| 52 | +Both final regression definitions first failed on the unmodified production code |
| 53 | +at the intended text-versus-binary assertion (two failures, no errors), then passed |
| 54 | +with the one-setting correction. An earlier test draft also emitted secondary list- |
| 55 | +index errors after a failed subtest; the draft was corrected before the final |
| 56 | +baseline rerun. Both original logs remain in the delivery evidence and are not |
| 57 | +counted as successful verification. The existing command-environment test also |
| 58 | +asserts that the case policy is passed only on the owned patch invocation. |
| 59 | + |
| 60 | +An initial task-routing probe supplied an undeclared `console` profile and was |
| 61 | +correctly rejected; it was corrected to the registered `library` profile before |
| 62 | +implementation. The executed Router then selected 21 standards with no unanswered |
| 63 | +facts. This was task setup, not a production failure or acceptance test. |
| 64 | + |
| 65 | +## Executed checks |
| 66 | + |
| 67 | +| Selection | Observed result | |
| 68 | +| --- | --- | |
| 69 | +| Complete review-evidence package | 49 passed | |
| 70 | +| Complete Repository Git package | 40 passed; one permission-dependent skip (41 run) | |
| 71 | +| Complete metadata package | 43 passed | |
| 72 | +| Engine capture-handoff, replacement-stdio and generated-contract selections | 29 passed | |
| 73 | +| Total selected executions | 161 passed, one skipped, no failures (162 run) | |
| 74 | +| New regression methods | Two; included in the totals above | |
| 75 | +| Complete structural checkpoint | 73 suites / 121 checks passed | |
| 76 | +| Generated projection freshness | Passed | |
| 77 | +| Separate offline recipient comparison | All members byte-identical to the previously inspected example | |
| 78 | + |
| 79 | +The full Engine and other supporting-package suites were not rerun. The production |
| 80 | +change is an opt-in patch setting with one builder consumer; the complete affected |
| 81 | +Git/builder packages and existing shared capture/contract cases are the selected |
| 82 | +regression scope. New tests are not added to totals a second time when rerun. |
| 83 | +After final documentation and manifest regeneration, the new regressions, command- |
| 84 | +environment check, freshness and structural checks are repeated; exact final |
| 85 | +outcomes are preserved in `DELIVERY/evidence/final-checks.json`. |
| 86 | + |
| 87 | +## Actual review packet |
| 88 | + |
| 89 | +The committed routing example was rebuilt through the CLI. A separate standard- |
| 90 | +library-only recipient process inspected the ZIP without importing the builder, |
| 91 | +reading the source checkout or extracting files. It checked all inventory member |
| 92 | +names, regular inert modes, lengths, hashes and index targets, and compared every |
| 93 | +member byte with the prior inspected packet. |
| 94 | + |
| 95 | +The result has 98 members, 96 resolving index links, 49 primary changed paths, |
| 96 | +54 selected paths, 5,704,505 payload bytes and the complete 1,083,975-byte primary |
| 97 | +patch. Its manifest is unchanged: |
| 98 | +`sha256:30c2834feb20fa7c3d4efa16b12dae823a4341de4b41aff40fe6a672fef11ff3`. |
| 99 | +The CLI returns `built-with-gaps` and exit 1 as intended: raw CI log missing, CI URL |
| 100 | +referenced. Those gaps were not filled with fabricated results. This compares a |
| 101 | +real packet; it does not reopen routing-fact acceptance or assert CI execution. |
| 102 | + |
| 103 | +The unchanged packet manifest's implementation digest remains explicitly a digest |
| 104 | +of `packet.py`, not of its Git dependency or the whole builder. No stronger origin |
| 105 | +or implementation-authentication claim is made by this comparison. |
| 106 | + |
| 107 | +## Scope, limitations and integration |
| 108 | + |
| 109 | +Only `repository.py` changes production code. The two direct test files, two |
| 110 | +READMEs, plan/ledger/issues, this report and generated suite-input manifest form |
| 111 | +the coordinated delivery. All Engine contracts/runtime, packet schema/source, |
| 112 | +existing normative guidance, dependency locks and CI configuration remain unchanged. |
| 113 | +Fresh-baseline reconstruction checks the entire resulting tracked tree, individual |
| 114 | +file hashes and modes; ZIP integrity and reconstruction results are in DELIVERY. |
| 115 | + |
| 116 | +Handoff execution used Linux x86-64, CPython 3.13.5, Git 2.47.3, jsonschema 4.26.0 |
| 117 | +and rpds-py 2026.5.1. No supported Python 3.12 hash-locked environment was installed there. |
| 118 | +The skipped case requires unprivileged POSIX permissions; no case-insensitive |
| 119 | +filesystem or additional operating system was exercised. The fixed policy concerns |
| 120 | +committed-path interpretation, not reconfiguration of filesystem compatibility. |
| 121 | +The tests establish these configured cases, not harmlessness of every Git setting. |
| 122 | +The existing requirement that configuration remain stable during observation and |
| 123 | +the documented local-directory threat limits are unchanged. |
| 124 | + |
| 125 | +Apply the scoped patch after its read-only baseline check, preserving unrelated |
| 126 | +work. No registration or repository Git configuration changes are needed. Fresh |
| 127 | +builder invocations load the corrected code. Keep historical packets and reports |
| 128 | +unchanged. The plan remains Verifying: obtain supported locked-runtime CI for the |
| 129 | +actual integrated candidate, narrow independent repair review and acceptance-owner |
| 130 | +disposition. No remote push, production commit, standards publication, host update, |
| 131 | +provider request or independent external review was performed during handoff preparation. |
| 132 | + |
| 133 | +After integration on the named base, the repository's Python 3.12.3 environment |
| 134 | +passed 49 Review Evidence tests, 41 Repository Git tests, 43 Standards Metadata |
| 135 | +tests and the 29 selected Engine tests. Ruff lint on changed Python, the complete |
| 136 | +structural check and authoring-purpose repository verification (121 checks across |
| 137 | +73 suites) also passed. A separate ZIP inspection found 98 members, 96 resolving |
| 138 | +links, the complete 1,083,975-byte patch, and the same two declared evidence gaps; |
| 139 | +the manifest digest remained `sha256:30c2834feb20fa7c3d4efa16b12dae823a4341de4b41aff40fe6a672fef11ff3`. |
| 140 | +These local results do not replace hosted CI or acceptance-owner disposition. |
| 141 | + |
| 142 | +## Corroborating dependency contract |
| 143 | + |
| 144 | +Git documents command-local configuration precedence and identifies `core.ignoreCase` |
| 145 | +as a filesystem-compatibility setting. The operation-local override intentionally |
| 146 | +does not edit that stored value. Official reference: |
| 147 | +https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreignoreCase |
0 commit comments