Repository navigation
fix: read shared provenance in trusted SkillEval planning - #360
Conversation
Extract the backward-compatible raw-Git reader and tests before any projection format migration. Keep existing policy and workflow execution boundaries unchanged. Agent-assisted-by: dot (projection planner) / unknown [effort=unknown] (author) Agent-assisted-by: dot (index implementation) / unknown [effort=unknown] (author) Signed-off-by: Codex <codex@openai.com>
Skill evaluationPLANNED: not executed; there are no task outcomes yet.
Author verification steps (nonpaid; not yet run)
Evidence and logs · Retention: 30 days. Plan bindings, budget, frozen exam and advisory detailsAdvisory: obtain missing evidenceRetained evidence availability: planned / unexecuted. No approval or merge authorization is issued.
Model/settings:
Automatic execution / cumulative PR budget: {"reason":"Trusted configuration or pricing missing, invalid or expired","remaining_usd":"unknown","reserved_or_unresolved_usd":"unknown","spent_or_legacy_usd":"unknown","state":"blocked"}Provider/settings: Uncovered / unsupported paths (2)
|
Review (independent; COMMENT only — not an approval)Reviewed range: What I checked
I found no code defect in the reader itself. I'm not approving yet because of the scope questions below. Open questions (blocking Approve for now)
Optional (non-blocking)
No approval implied. |
Dong1017
left a comment
There was a problem hiding this comment.
Head / conclusion: c9b1608d0cf59f53d459fccb99acb3292abdc536, base 01c73521ced6ca760cdfa42c9b937fe985a20d64. No blocking code finding in the two-file reader-compatibility slice. This is a COMMENT-only technical review through Dong1017, the PR author's account, not an eligible independent approval.
Verification
- Confirmed the complete two-file diff and identical Git blobs in the published head, reviewed local checkout and #359
d1d64da1. No generator, catalog, canonical knowledge, projection, mapping, workflow or policy change is included. - Traced manifest presence, exact schema/type/duplicate-key validation, bounded regular-blob reads, fixed registry path/hash, commit ancestry and complete canonical-library equality. Invalid manifests remain unavailable without falling back to README; absent manifests retain the legacy reader. Planning adds a proposed check, not candidate execution.
- Independently reran all 51 guidance tests on the exact head with Python 3.12.14, plus focused Ruff and whitespace checks; the checkout remained clean. Tests cover malformed metadata, unsafe modes, missing/nonancestor commits, mismatched source bytes and legacy behavior.
- Hosted Ready CI completed successfully for both Python 3.10/3.11 full-check and installed-package jobs, plus PR references. Lint/smoke passed; the Draft KV job was skipped. Knowledge-policy logs evaluate this exact head under
01c73521as Not applicable, with no errors.
Limits
No full-suite or installed-wheel rerun was performed locally in this review, and no model/device evaluation ran. The hosted SkillEval plan has zero comparisons/calls; it does not test this candidate reader against #359 because it uses trusted main. A fresh plan after any authorized merge remains the rollout check. This result does not accept #359's representation/squash trade-off, resolve its unknown-authorship admission, or complete #355. The PR remains Draft; no approval or merge is implied.
|
@zengchuang-hw @amy-why-3459, this PR is now ready for review at
This PR does not complete #355. The #359 migration follows separately after this lands. |
zengchuang-hw
left a comment
There was a problem hiding this comment.
Review range c9b1608d → c9b1608d (same-head follow-up to Amy’s earlier review). I reviewed the two-file diff from 01c73521 through current head c9b1608d0cf59f53d459fccb99acb3292abdc536 for main. Conclusion The manifest reader is within scope. A newly added guidance test fails under Git checkout line-ending conversion, so this is a non-voting review on the Ready request.
本轮已解决 · Resolved
- The owner decision accepts the shared source-snapshot manifest and the reader-first rollout. The PR is Ready and the two changed paths have no overlap with main’s intervening changes through
c38bb4e. Issue #355 decision - The reader verifies the raw registry blob at the declared revision, checks ancestry and canonical-library equality, rejects invalid authoritative manifests, and preserves the legacy README path when the manifest is absent. Reader diff
批准前必做 · Before I can approve
- Dong1017, derive the synthetic manifest checksum from the committed registry blob at the pinned revision. The fixture currently hashes
canonical.read_bytes(). Withcore.autocrlf=true, Windows writes CRLF to the fixture, Git stores LF, and the valid-manifest test returnsunavailable. Use raw bytes fromgit cat-file blob <pin>:<registry-path>in the fixture. The same mismatch can mask the executable manifest and registry cases. Stage mode100755explicitly withgit update-index --chmod=+xafter adding the paths. The item closes when the valid case passes withcore.autocrlf=true, both executable cases reject confirmed100755blobs with a matching registry checksum, and Ready CI andknowledge-model-policysucceed on the updated head.
非阻塞问题或建议 · Non-blocking
- The Windows run also hit the older README fixture’s
chmodcase. That case predates this PR. Baseline test
Verification Ruff and whitespace checks passed. The exact-head guidance file on Windows yielded 49 passed and the two failures described above. Disabling checkout conversion for the targeted run made the valid-manifest case pass and exposed the two executable-mode fixture failures. A separate synthetic probe with core.autocrlf=true verified that the raw committed checksum lets the reader accept the manifest despite an uncommitted replacement. GitHub’s Ready workflow and knowledge-model-policy passed for this head, with policy reporting not applicable. The hosted SkillEval plan used trusted main and ran zero comparisons or model calls. The #359 rollout remains separate.
Codex performed this review under direct delegation from zengchuang-hw, using that connected account. The authorization covers inspection of the exact head, reporting findings and approving eligible verified heads.
Derive fixture checksums from the stored Git blob instead of working-tree bytes, which checkout conversion such as core.autocrlf can change. Stage executable modes explicitly, since chmod is ignored where core.fileMode is false, and assert the committed mode so each negative case fails for its intended reason. Agent-assisted-by: Claude Code / claude-opus-5-5 [effort=xhigh] (author) Signed-off-by: Dong1017 <55723162+Dong1017@users.noreply.github.com>
There was a problem hiding this comment.
LGTM
PR review verdict — PASS
Reviewed base 01c7352 and head 69ce133.
Full diff against main. Prior reviewed head: c9b1608.
Earlier finding — resolved
- Checkout line-ending conversion. On c9b1608, zengchuang-hw reported a new guidance test failed when Git checkout conversion (core.autocrlf) changed working-tree bytes. The current tests hash
git cat-file blob <rev>:<path>and stage executable bits withgit update-index --chmod=+x, then assert recorded tree modes100755and120000. The reader uses the same rawls-tree/cat-filebytes, so the declared registry sha256 is the stored blob digest.
Verified
tools/skill_eval_pr.pyprojection_check: a present_provenance.jsonis authoritative. The schema is exactlyschema_version,repository,source_revision, andregistry;schema_versionmust be the integer 1; duplicate keys fail closed; the repository and registry path are fixed; sha256 is 64 lowercase hex digits. The pin must be a full SHA and an ancestor commit.LIBRARY_PATHmust be an unchanged tree. Both revisions'skill-index.jsonobjects must be mode100644blobs whose sha256 matches the manifest (manifest cap 64KiB, registry cap 16MiB). Symlinks, executables, directories, and oversized inputs stay unavailable. The legacy README pin is used when the manifest path is absent. The result is a proposed check only.tests/test_skill_eval_planned_guidance.py: authoritative committed pin with a dirty worktree, the invalid-manifest matrix (unsafe modes forced throughupdate-index), and unsafe registry modes at the pinned revision and HEAD.
Verification limit
- This session did not re-run the guidance tests, Ruff, or CI. The prior comment text available here ends in the zengchuang-hw “Before I can approve” section; the visible open item was the checkout line-ending failure above.
amy-why-3459
left a comment
There was a problem hiding this comment.
LGTM
PR review verdict — PASS
Reviewed base 01c73521ced6ca760cdfa42c9b937fe985a20d64 and head 69ce133f1396ede0ddab7b9e2834709b406f17ad; incremental range since my last review c9b1608d0cf59f53d459fccb99acb3292abdc536...69ce133f1396ede0ddab7b9e2834709b406f17ad (one test-only commit).
Earlier items resolved:
- Design acceptance: the #355 owner decision accepts the shared source-snapshot manifest and puts this reader first in the rollout, which answers my scope question.
- Draft: the PR is now ready for review.
- zengchuang-hw's line-ending finding:
tests/test_skill_eval_planned_guidance.pynow hashes the stored blob viacommitted_blob()(git cat-file blob <rev>:<path>) instead of working-tree bytes, stages executable modes withgit update-index --chmod=+x, and asserts the committed tree mode (100755/120000) so each negative case fails for its intended reason. In the unsafe-registry cases the checksum matches the committed blob andsource_revisionis the commit carrying that mode, so the mode is the only reason to reject.
Verified:
tools/skill_eval_pr.pyis unchanged since my previous reader review atc9b1608d; this commit touches only the test file.- Hosted checks on this head are green:
full-check (3.10/3.11),installed-package (3.10/3.11),lint-and-smoke,declarations,pr-references, skill-evalplan; GitHub reports the PR mergeable (clean).
Not verified by me: a local run with core.autocrlf=true / core.fileMode=false (hosted CI is Linux), and any executed SkillEval comparison (zero selected).
|
@zengchuang-hw, the fix for your Windows checkout finding is at
|
zengchuang-hw
left a comment
There was a problem hiding this comment.
LGTM
PR review verdict — PASS
Incremental review c9b1608 → 69ce133, current head 69ce133f1396ede0ddab7b9e2834709b406f17ad targeting main. The previous review finding is resolved. This addresses the re-review request.
本轮已解决 · Resolved
- The fixture hashes committed registry bytes with
git cat-file blob, so checkout line-ending conversion cannot invalidate the manifest. Both executable cases now stage mode100755explicitly and verify the committed mode. The unsafe-registry fixture hashes the actual blob at the pinned revision. Test-only delta - The reader is byte-identical to the prior reviewed head. The reader-first change remains in the accepted #355 scope. The current main changes neither touched file relative to the PR base.
批准前必做 · Before I can approve
No outstanding items.
非阻塞问题或建议 · Non-blocking
The author reported missing symlink privileges on their Windows host. The manifest selection on my Windows environment passed both symlink cases. The older README test compatibility remains separate from this test-only fix.
I ran the 29 manifest cases with core.autocrlf=true and core.filemode=false, and ran Ruff and the diff whitespace check. All passed. The exact-head Ready workflow and knowledge-model-policy passed. The policy reports not applicable. I did not rerun the entire suite locally or execute any model comparisons.
Codex performed this review under direct delegation from zengchuang-hw, using that connected GitHub account. The delegation covers independent inspection and feedback on this PR and a formal approval bound to the verified head when the applicable checks pass.
Refs #355
Reader-only migration prerequisite
This separates the backward-compatible SkillEval reader and its tests from prototype #359, so the trusted implementation can understand the shared manifest before any format migration. The design decision on #355 accepts the shared source-snapshot manifest and puts this reader first in the rollout.
Only two files change:
tools/skill_eval_pr.pyandtests/test_skill_eval_planned_guidance.py(197 additions, 18 deletions). The base is01c73521ced6ca760cdfa42c9b937fe985a20d64; the current head is69ce133f1396ede0ddab7b9e2834709b406f17ad. Main has not modified either file since the base.This PR adds the reader only. It does not migrate stored projections or complete #355; the #359 migration and its protected-path authorship follow separately.
Behavior and boundaries
Fixture fix at
69ce133fThis addresses the Windows checkout finding. Only the test file changes (28 additions, 8 deletions);
tools/skill_eval_pr.pyis unchanged fromc9b1608d.git cat-file blob <pin>:<path>) instead of working-tree bytes, whichcore.autocrlf=trueconverts to CRLF.modemutation and the executable-registry case stage100755withgit update-index --chmod=+x, since chmod is ignored wherecore.fileModeis false. Both tests assert the committed mode (100755, or120000for the symlink case), and the unsafe-registry case uses a checksum that matches the committed blob, so each negative case is rejected only for its unsafe mode.On Windows with Python 3.13 and imports bound to the checkout:
c9b1608dcore.autocrlf=truemodeand executable cases accept a manifest they should rejectcore.autocrlf=trueThe two symlink failures are
WinError 1314: this host lacks the privilege to create symlinks. The remaining whole-file failures are in the older README-pin tests, which use neither changed helper. The same README-pin failures reproduce on the original headc9b1608dand predate this PR, including the READMEchmodcase noted as non-blocking in the review. Ruff andgit diff --checkpass. Hosted Linux CI is the authoritative run for this head.Earlier verification (
c9b1608d)The original author reported the complete pytest suite, full Ruff and 51 focused guidance tests passing on an isolated Python 3.12 tree, and a read-only comparison against the #359 head in which the old main planner returns
unavailablewhile this reader returnsreadywith 0 comparisons / 0 calls. Hosted Ready CI andknowledge-model-policypassed for that head.Authorship and admission
The original reader and tests were authored by dot (projection planner) and dot (index implementation), with actual model/effort unknown; their commit keeps those trailers. The fixture fix commit was authored by Claude Code / claude-opus-5-5 at effort xhigh.
Both paths are outside
protected_pathsandpolicy_paths, soknowledge-model-policyreports this PR as Not applicable. This classification does not exempt any protected content or cure #359's authorship admission. No policy change or exception is requested.Staged rollout
workflow_dispatchwithaction=planfor prototype: reduce knowledge projection and declaration churn #359. An old-run retry stays tied to its previous trusted workflow revision.No Issue closure is requested.