Repository navigation
Conversation
#2487 replaced requireConfiguration(GitHubRepoDriver, ...) for native Git with a call to GitHubNativeRepositorySender.validateConfiguration whose result was discarded, and the native branch skipped the schema. A non-canonical publicCaPath, a fractional sessionDurationSeconds or an unknown option was accepted. Run requireConfiguration with the native sender's contract in both places, as the protected path already does with the repository policy.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
…lone refuses Review follow-up: the fractional duration and unknown option cases were already refused through the repository policy schema, so they duplicated existing coverage.
|
Codex review: needs changes before merge. What this changesThis PR enforces the existing native repository sender configuration contract during loading and composition. Example: An Installation sets repository.nativeSender.publicCaPath to /etc/openclaw/repository-ca/./ca.crt.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Regression provenancePossible regression — suspected (reviewed change). No predecessor PR is attributed. Merge readiness⛔ Needs changes before merge - 1 item remains Keep this PR open: it repairs a current-main validation regression, with one actionable diagnostic defect and overlapping work to coordinate. Priority: P2 Before merge
Findings
Tests
Agent review detailsHow this fits togetherInstallation loading combines repository policy and native transport settings, validates them, and constructs repository policy and optional credential delivery clients. flowchart TD
A[Installation configuration] --> B[Repository selection]
B --> C[Shared configuration validation]
C --> D[Startup refusal]
C --> E[Registry and CA loading]
E --> F[Repository policy and native sender]
Technical reviewBest possible solution: Land one coordinated repair that uses shared configuration admission and reports the exact invalid native sender field with its required correction. Do we have a high-confidence way to reproduce the issue? Current-main source shows discarded path-validation diagnostics followed by CA loading, and the added loader case uses an existing CA file with /./ in its path; the author reports base failure and head success, which this read-only review did not execute. Is this the best way to solve the issue? Using requireConfiguration at the existing owners is a small, contract-preserving repair; the resulting startup refusal also needs an actionable field-specific diagnostic. Full review comments:
Overall correctness: patch is correct AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against beb627dd5152. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
Likely related people:
LabelsLabel changes:
Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 22, 2026, 8:04 PM ET / October 23, 2026, 00:04 UTC. |
…al boundary The repository credential source boundary allows no new runtime contracts import in the GitHub installation parser. Drop its discarded validateConfiguration call; composition already validates the same merged native configuration with requireConfiguration.
Problem
Before the Credential Proxy change, native repository Git ran
requireConfiguration(GitHubRepoDriver, ...): the JSON schema (sessionDurationSecondsinteger bounds, no unknown options) and the path checks (absolute, canonicalcontrolSocketandpublicCaPath). Since then,composeRepositoryAccessandgithubRepositoryConfigurationcallGitHubNativeRepositorySender.validateConfiguration(...)and discard the returned errors, and the native branch never runs the schema. Arepository.nativeSender.publicCaPathsuch as/etc/openclaw/repository-ca/./ca.crtloads without a refusal. (Other schema checks still ran through the repository policy, and the control socket client checks its own path.)Change
composition/repository-credentials/platform.ts: runrequireConfigurationwith the native sender's contract for native Git, as the protected path already does withGitHubRepositoryPolicy.drivers/repo/github/installation.ts: drop the discardedvalidateConfigurationcall. Composition validates the same merged object, and the GitHub installation parser stays inside the repository credential import boundary (scripts/verify-repository-credentials-boundary.mjs, unchanged).Verification
tests/integration/configuration-startup.test.mjs("repository startup rejects ... CA inputs"): a new case (existing CA file under a non-canonical path) expectsConfigurationValidationErrorwith the exact detail path and code. It fails on main ("Missing expected rejection") and passes here. The whole file passes (35/35); the repository startup tests pinned 20/20 at 2 CPUs.repository.nativeSender.repository-credentials-admission(34/34),repository-native-cutover(7/7),profile-public-github-read(2/2),repository-credentials-package(11/11) and therepository-credentials-contractsconformance file (113/113) pass.tsc --build apps/controllerpasses;scripts/verify-workspace-boundary.mjsandtests/conformance/repository-credentials-source-boundary.test.mjs(142/142) pass; Prettier passes on the touched files. (An earlier head importedrequireConfigurationinto the installation parser and the boundary check refused it; that import is gone.)Risks