Repository navigation
Conversation
…ance Expose portable identity reuse through the enrollment CLI and verify the complete installed flow. A selected enrolled identity keeps its portable key and certificate while the target issues independent access and approval. Hold the native enrollment lock across source loading, target exchange and promotion. Reject equivalent source/target enrollment endpoint URLs before cleanup, including ignored trailing slashes on root and prefixed paths. Require registration wire version2 on the public endpoint, retain historical receipt decoding, and migrate the existing native approval fixture. Installed acceptance exercises the actual local approval authority, offline source server, lost commit replies and exact resume. Update enrollment documentation and the server release note. Validation after the URL regression repair: 1,855 Python tests passed (43 skipped) using a freshly rebuilt Go client; full Go tests and vet passed; explicit Black check passed over140 targets; complete configured type check passed with zero errors in the existing lint environment. The new focused regression fails against original production bytes and passes after repair. Native platform CI and current remote review remain publication gates.
Code Review 👍 Approved with suggestions 0 closed / 1 findings🔴 High risk · Cross-server identity reuse creates fresh target access credentials; mistaken issuer trust or approval could grant access under a reused identity. Expose portable identity reuse through the enrollment CLI and verify the installed flow end to end, including the same-server URL guard before cleanup. Consider normalizing host case and the explicit default port in the same-server check in 💡 Edge Case: Same-server guard misses host case and explicit default port📄 client/go-cli/internal/identity/provisional_session.go:201-205 The same-server check compares Compare a normalized endpoint key🤖 Prompt for agentsVerificationRules No rules evaluated Functional validation Not enabledFor more verification details, comment OptionsAuto-apply is off → Gitar will not commit updates to this branch. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source |
| sourceEndpoint, sourceEndpointErr := enrollmentURL(source.serverURL, "/api/v1/enrollment/requests") | ||
| targetEndpoint, targetEndpointErr := enrollmentURL(serverURL, "/api/v1/enrollment/requests") | ||
| if sourceEndpointErr == nil && targetEndpointErr == nil && sourceEndpoint.String() == targetEndpoint.String() { | ||
| return ErrEnrollmentSource | ||
| } |
There was a problem hiding this comment.
💡 Edge Case: Same-server guard misses host case and explicit default port
The same-server check compares enrollmentURL(...).String() values, but enrollmentURL only trims trailing slashes from the path. It does not lowercase the scheme or host, and it does not drop the :443 default port. If the source was saved as https://source.invalid, then identity= with url=https://SOURCE.invalid or url=https://source.invalid:443 passes the check. The tool then cleans the provisional directory and registers against the source server itself, which is the case the PR says it rejects before cleanup. Fix: build a comparison key from the lowercased Hostname(), the port with an empty value treated as 443, and the trimmed path, and add test cases for host case and the explicit default port.
Compare a normalized endpoint key:
key := func(u *url.URL) string {
port := u.Port()
if port == "" || port == "443" {
port = "443"
}
return strings.ToLower(u.Hostname()) + ":" + port + u.EscapedPath()
}
if sourceEndpointErr == nil && targetEndpointErr == nil && key(sourceEndpoint) == key(targetEndpoint) {
return ErrEnrollmentSource
}
- Apply fix
Check the box to apply the fix or reply for a change | Was this helpful? React with 👍 / 👎
|
PR-cycle state — maintained automatically. Do not edit by hand. Mechanical PR-cycle state (JSON){
"check_observations": [
{
"checks": [
{
"conclusion": "SUCCESS",
"name": "Gitar",
"run_id": 124914994716,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/runs/124914994716"
},
{
"conclusion": "SUCCESS",
"name": "Platform Linux arm64",
"run_id": 124934061956,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934061956",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934061956,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
},
{
"conclusion": "SUCCESS",
"name": "Platform Linux x64",
"run_id": 124934060887,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934060887",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934060887,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
},
{
"conclusion": "SUCCESS",
"name": "Platform Windows arm64",
"run_id": 124934062133,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934062133",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934062133,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
},
{
"conclusion": "SUCCESS",
"name": "Platform Windows x64",
"run_id": 124934098018,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934098018",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934098018,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
},
{
"conclusion": "SUCCESS",
"name": "Platform macOS arm64",
"run_id": 124934061847,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934061847",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934061847,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
},
{
"conclusion": "SUCCESS",
"name": "Platform macOS x64",
"run_id": 124934089068,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934089068",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934089068,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
},
{
"conclusion": "SUCCESS",
"name": "Python 3.10",
"run_id": 124934097935,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934097935",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934097935,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
},
{
"conclusion": "SUCCESS",
"name": "Python 3.11",
"run_id": 124934062048,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934062048",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934062048,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
},
{
"conclusion": "SUCCESS",
"name": "Python 3.12",
"run_id": 124934098184,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934098184",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934098184,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
},
{
"conclusion": "SUCCESS",
"name": "Python 3.14",
"run_id": 124934105200,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934105200",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934105200,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
},
{
"conclusion": "SUCCESS",
"name": "Python lint",
"run_id": 124934099525,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934099525",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934099525,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
},
{
"conclusion": "SUCCESS",
"name": "Website",
"run_id": 124934060945,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124934060945",
"workflow": {
"app_id": 15368,
"attempt": 2,
"check_suite_id": 112010663912,
"event": "pull_request",
"job_id": 124934060945,
"name_unique": true,
"run": {
"conclusion": "success",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"number": 361,
"status": "completed"
},
"run_id": 41329022659,
"workflow_id": 286506297
}
}
],
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"id": "sha256:2381cb77ab766c4b23d2e8dfc70b19922a8195d7f99902ee2b6fc20d0c2dfd7e",
"required_checks": [
"Gitar",
"Platform Linux arm64",
"Platform Linux x64",
"Platform Windows arm64",
"Platform Windows x64",
"Platform macOS arm64",
"Platform macOS x64",
"Python 3.10",
"Python 3.11",
"Python 3.12",
"Python 3.14",
"Python lint",
"Website"
],
"status": "success"
},
{
"checks": [
{
"conclusion": "SUCCESS",
"name": "Gitar",
"run_id": 124914994716,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/runs/124914994716"
},
{
"conclusion": "SUCCESS",
"name": "Platform Linux arm64",
"run_id": 124914992089,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914992089"
},
{
"conclusion": "FAILURE",
"name": "Platform Linux x64",
"run_id": 124914991986,
"run_status": "completed",
"status": "failure",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914991986"
},
{
"conclusion": "SUCCESS",
"name": "Platform Windows arm64",
"run_id": 124914992150,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914992150"
},
{
"conclusion": "SUCCESS",
"name": "Platform Windows x64",
"run_id": 124914992147,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914992147"
},
{
"conclusion": "SUCCESS",
"name": "Platform macOS arm64",
"run_id": 124914992094,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914992094"
},
{
"conclusion": "SUCCESS",
"name": "Platform macOS x64",
"run_id": 124914992168,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914992168"
},
{
"conclusion": "SUCCESS",
"name": "Python 3.10",
"run_id": 124914992086,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914992086"
},
{
"conclusion": "SUCCESS",
"name": "Python 3.11",
"run_id": 124914991997,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914991997"
},
{
"conclusion": "SUCCESS",
"name": "Python 3.12",
"run_id": 124914991953,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914991953"
},
{
"conclusion": "SUCCESS",
"name": "Python 3.14",
"run_id": 124914992029,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914992029"
},
{
"conclusion": "SUCCESS",
"name": "Python lint",
"run_id": 124914991993,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914991993"
},
{
"conclusion": "SUCCESS",
"name": "Website",
"run_id": 124914991804,
"run_status": "completed",
"status": "success",
"url": "https://github.com/omry/arbiter/actions/runs/41329022659/job/124914991804"
}
],
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"id": "sha256:b98fedcaab30c1ee6feba26e6ff7afbe87348085f6822ee391d94d2f745306b2",
"required_checks": [
"Gitar",
"Platform Linux arm64",
"Platform Linux x64",
"Platform Windows arm64",
"Platform Windows x64",
"Platform macOS arm64",
"Platform macOS x64",
"Python 3.10",
"Python 3.11",
"Python 3.12",
"Python 3.14",
"Python lint",
"Website"
],
"status": "failure"
}
],
"delivery_deferrals": [],
"findings": [],
"pr": {
"base_ref": "pr81",
"base_sha": "cb91525ab9f3a071c39f4f8bc945faa1b2fe56e1",
"body_digest": "sha256:ac8f7c85cab7db742d8190dda1b4b5fe8b8a898034a88661c392fca9075b27a0",
"body_identity_version": 2,
"diff_digest": "sha256:05792ac9a24de248e370f195f599f2502502938ed3c6fa94f5141a697a8a9a9f",
"head_ref": "pr82",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"pr": 82,
"repository": "omry/arbiter",
"scope_authority": [
{
"digest": "sha256:3c0fada6a105777ecd5546b3f3898b0b2dea71f1032176e6ccd7c3fd51386a6a",
"path": "docs/authentication/implementation-plan.md"
},
{
"digest": "sha256:7cbad8803d0ade4090289d22a681a01026782ade9785c731ac7a2d8a33b9c0e1",
"path": "docs/authentication/portable-enrollment-lld.md"
}
],
"title_digest": "sha256:92b1e7e260f573823658c92fbbc53adae2dafef4d4209700abe4f41042893b2d"
},
"record_version": 3,
"review_observations": [],
"review_requests": [
{
"base_established_at": "2026-11-01T16:58:14Z",
"base_ref": "pr81",
"base_sha": "cb91525ab9f3a071c39f4f8bc945faa1b2fe56e1",
"body_digest": "sha256:b594e90948cd9ce822804532c7eb56a39587aa5cd1048b4541b1f2c1902a23aa",
"created_at": "2026-11-01T18:08:23Z",
"head_sha": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"id": 6561836653,
"kind": "regular-review"
}
],
"review_results": [
{
"base_ref": "pr81",
"base_sha": "cb91525ab9f3a071c39f4f8bc945faa1b2fe56e1",
"body_digest": "sha256:89f8e945f8d741425ef107e6b762d689f594f7a8ec76014df2281d83c4750d21",
"commit_id": "6f4faf979a89d94c3bb7b10dbe4cd5d9770e3789",
"id": 6561851068,
"inline_message_ids": [],
"request_comment_id": 6561836653,
"result_kind": "clean",
"status": "result",
"submitted_at": "2026-11-01T18:09:33Z",
"unresolved_thread_ids": [
"PRRT_kwDOSmRaHM6ycgo0"
]
}
],
"revision_fingerprint": "sha256:770b35503d98227d25c0e9938dc341f84bd91ddb9446c6f171c12b15d6ee0993",
"rounds": [],
"schema": "awd:swe:pr-cycle-state",
"version": 2
} |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Codex Review: Didn't find any major issues. 👍 Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Expose portable identity reuse through the enrollment CLI and verify the complete installed flow. A selected enrolled identity keeps its portable key and certificate while the target issues independent access and approval. Hold the native enrollment lock across source loading, target exchange and promotion. Reject equivalent source/target enrollment endpoint URLs before cleanup, including ignored trailing slashes on root and prefixed paths.
Require registration wire version2 on the public endpoint, retain historical receipt decoding, and migrate the existing native approval fixture. Installed acceptance exercises the actual local approval authority, offline source server, lost commit replies and exact resume. Update enrollment documentation and the server release note.
Validation after the URL regression repair: 1,855 Python tests passed (43 skipped) using a freshly rebuilt Go client; full Go tests and vet passed; explicit Black check passed over140 targets; complete configured type check passed with zero errors in the existing lint environment. The new focused regression fails against original production bytes and passes after repair. Native platform CI and current remote review remain publication gates.