feat(pre-push-safety-net): resolve immutable push comparisons

This commit is contained in:
Marius Ciepluch
2026-09-12 20:43:51 +02:00
parent 14a2a60e52
commit 05da202d67
8 changed files with 421 additions and 11 deletions
@@ -142,3 +142,18 @@ The content review checked boundary ownership, failure handling, vendor exclusio
and independent finding/coverage/push status. Draft defaults remain clearly labeled. Runtime
integration, performance and capability admission remain unverified work; no code tests were
needed for these documentation-only amendments.
### Group 2 implementation: immutable Git reads
The local Git runtime is 2.43.0. Snapshot reads must suppress replacement objects
and implicit promisor fetching, including on Git versions that predate newer
lazy-fetch controls. The protocol allow-list is the stronger boundary: an empty
`GIT_ALLOW_PROTOCOL` forbids transports even when repository configuration permits
an individual protocol. Git documents this precedence in its
[environment-variable reference](https://git-scm.com/docs/git#Documentation/git.txt-GITALLOWPROTOCOL).
Regression fixtures must prove supplied-object identity and lack of helper execution;
setting environment variables alone is not evidence of either property.
The snapshot adapter provides change evidence, not a second region selector. Source
materialization, changed spans, and correspondence must remain language agnostic;
unknown parser or correspondence boundaries cannot become a successful negative.
+9 -3
View File
@@ -1,7 +1,7 @@
{
"feature_name": "pre-push-safety-net",
"created_at": "2026-09-12T15:35:00Z",
"updated_at": "2026-09-12T17:21:05.783007Z",
"updated_at": "2026-09-12T18:32:19.033933Z",
"language": "en",
"phase": "implementation",
"approvals": {
@@ -19,7 +19,7 @@
}
},
"ready_for_implementation": true,
"implementation_approval_note": "2026-09-12: maintainer explicitly said 'approve.' in response to approval of the generated task plan and starting implementation with group 1. All tasks are approved; this implementation run starts with tasks 1.1\u20131.4. No task is complete until its fresh-evidence and reviewer gates pass.",
"implementation_approval_note": "Groups 1 and 2 explicitly authorized by the maintainer. Group 1 verified complete; this run implements group 2 (2.1\u20132.3). Remaining task plan retains approval, with execution sequenced by the spec.",
"depends_on": [
"contributor-scan"
],
@@ -40,6 +40,11 @@
"at": "2026-09-12T16:20:40.814596Z",
"source": "approve.",
"action": "Accepted the generated task plan and authorized starting group 1 (1.1\u20131.4). Implementation started; tasks require independent review and fresh verification before completion."
},
{
"at": "2026-09-12T18:32:19.033933Z",
"source": "ok, next kiro phase, approved; correct. we can continue with the spec",
"action": "Authorized group 2 (2.1\u20132.3), resumed after local Claude Mem repair. Independent review and fresh verification remain required."
}
],
"task_review": {
@@ -60,6 +65,7 @@
],
"remaining_tasks": 23,
"verification_record": "implementation-group-1.md",
"next_group": 2
"next_group": 2,
"active_group": 2
}
}
+2 -1
View File
@@ -56,12 +56,13 @@ the hook and capability admission are not yet implemented. See `implementation-g
- _Verified 2026-09-12:_ independent review APPROVED; 965 tests passed, 9 skipped; touched-source Ruff/mypy passed. Parent rebuilt the local image and verified non-root, network-disabled CLI startup, all contract imports, an 83-byte configuration round trip and invalid-budget rejection. Comparison-owned completion preserves different bases for a shared head. Contracts are structural; runtime snapshot/cache/runner/admission implementations remain in later tasks.
- [ ] 2. Resolve immutable pushed content
- [ ] 2.1 Resolve every supplied ref update and comparison
- [x] 2.1 Resolve every supplied ref update and comparison
- Parse Git's complete update input using object-format-aware validation; resolve existing tips, new-branch configured bases, force-pushes, merges, peeled tags, deleted refs and unsupported objects.
- Deduplicate equal targets without merging different base comparisons; retain every ref association. Do not silently substitute HEAD or fetch missing objects.
- Done when multi-ref and missing-base fixtures produce exact comparison identities and explicit dispositions, including deletion-only no-analysis results.
- _Boundary: Snapshot Adapter_
- _Requirements: 1.1, 1.3, 1.4, 7.1_
- _Verified 2026-09-12:_ independent review APPROVED after Unicode-ref repair; 997 tests passed, 9 skipped; focused 76 passed and touched Ruff/mypy passed. Real SHA-1/SHA-256 fixtures cover exact comparisons, tags, deletion, missing/ambiguous bases, replacement/graft suppression and blocked promisor fetch. Parent read 2,547 pinned source bytes and verified real-repository comparison/ref identity with dirty state and index preserved. ASCII protocol framing retains valid Unicode ref names.
- [ ] 2.2 Materialize isolated object snapshots
- Read immutable tracked blobs into bounded scratch storage using machine-readable paths; do not checkout into the live tree or run filters, project scripts or network requests.
- Preserve path identity and report symlinks, gitlinks, unavailable LFS blobs and unsupported content; never follow source outside the snapshot.