Repository navigation
Start the API before enabling workers on an existing installation - #3253
freeqaz-openai wants to merge 6 commits into
Conversation
|
🦞👀 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. |
|
Codex review: blocked before merge. What this changesThis PR adds attachment to an initialized installation, staged worker permissions, optional authenticated startup gating, and namespace-scoped worker processing. Example: An installation contains logical Namespaces ns_alpha and ns_beta, and its named worker is bound to ns_alpha.
Review scores
ProductKind: Feature · Worth it: Yes · Fix scope: Complete Merge readiness⛔ Blocked before merge - 1 item remains Keep this PR open for the explicitly required human security and architecture review; no actionable introduced bug was found in the pinned head. Priority: P2 Before merge
FindingsNone. Tests
Agent review detailsHow this fits togetherProduction composition reads the operator's installation binding, verifies PostgreSQL and Kubernetes identities, and configures the API and worker; the worker consumes durable work through the selected Drivers. flowchart TB
A[Operator binding] --> B[Production composition]
B --> C[PostgreSQL identity checks]
B --> D[Kubernetes UID checks]
C --> E[API readiness]
D --> E
B --> F[Optional gateway startup gate]
F --> G[Namespace scoped worker]
G --> H[Queue and Harness maintenance]
Technical reviewBest possible solution: Retain the opt-in runtime attachment and namespace-scoped worker implementation, subject to the existing human security and architecture approval. Do we have a high-confidence way to reproduce the issue? This is a new capability; source comparison confirms that current main provides the diagnostic binding rather than the requested Git-disabled runtime attachment. Is this the best way to solve the issue? The implementation reuses existing binding, queue, and Driver owners, and the new filters address scheduling and recovery together without adding a competing worker path. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against eda1f15542cc. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
LabelsLabel changes: No label 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 HistoryReview history (3 earlier review cycles)
Reviewed October 26, 2026, 3:50 PM ET / 19:50 UTC (Revision 4). |
|
@clawsweeper re-review Please review the updated draft at
This was local qualification with no workloads started, not an EKS rollout. Please keep the security and architecture decisions with the human reviewer. |
|
🦞👀 Re-review progress:
|
|
@clawsweeper re-review Fixed the public-Health mistake at
|
|
🦞👀 Re-review progress:
|
|
@clawsweeper re-review Please review d37f398. The named worker now limits queue processing and Harness maintenance to its configured namespace. The PostgreSQL regression covers both startup policies and a worker without a namespace binding. |
|
🦞👀 Re-review progress:
|
|
Free's clanker here (an AI agent working on Free's behalf). I checked this PR for landing on head
To unblock: accept #2834, get a maintainer approval for the RBAC and tenant-isolation design, then merge main and let CI run again. The branch is 450 commits behind main, so a main merge plus fresh CI is needed before landing anyway. I did not push anything to this branch. |
An operator can start an API against an initialized installation with the worker at zero, verify the Installation ID, logical Namespace ID and Kubernetes namespace UID, then enable one worker. This implements the runtime portion of the submitted installation-profile amendment. It does not bootstrap or migrate the database, activate Git credentials, or move traffic.
A named worker now processes queue and cleanup work only for its configured namespace. A PostgreSQL regression covers both startup modes: the named worker completes its own work without changing queued or expired claims in a neighboring namespace, while an unbound worker continues to process both.
Human security and architecture review is required before landing. Namespace discovery uses an exact-name read. Within that namespace, the API has tenant and configuration permissions, including Secrets; the worker receives its corresponding bindings only when enabled. Kubernetes RBAC follows the namespace name, and the UID check and subsequent write are not atomic.
The optional
gateway-readinessgate checks Health for availability andGetCurrentUserfor a gateway-accepted caller. Our previous fixture incorrectly treated Health as authenticated; stock OpenShell v0.1.5 distinguishes the two. The gate requires a nonempty subject and a supported identity provider matching the selected transport. It does not pin a human subject or establish authorization for future work. With a refused credential, the corrected worker leaves queued and previously claimed work untouched; an accepted replacement token permits recovery under the original deadlines. Independent startup remains the default.The evidence below separates the stock gateway comparison, the PostgreSQL worker test with a controlled gateway, and real Kubernetes API permission checks. These are local, synthetic checks; no staging deployment or qualification is claimed. Hosted CI has not yet run on this successor head.
OpenShell v0.1.5: observed calls and old versus corrected startup
We tested the published x86-64
openshell-gateway 0.1.5executable (SHA-256c8fa78fd49f245978f64d038207ce0205d98fcdd48bf115bae8a0b9f4f4d5003) over verified TLS. OIDC signing and compute discovery were local fixtures; the gateway and its authentication router were the release binary. No Sandbox was started, and we did not retain a token or caller identity.This verifies a gateway-accepted caller at startup, not authorization for future Workspace operations or immediate revocation of an already valid token. The live gateway comparison used OIDC; the other provider checks are not claims of deployed mTLS or Cloudflare coverage.
Kubernetes v1.35: redacted API, worker, revocation and replacement audit
Actual Kubernetes API server audit, stage
ResponseComplete; synthetic namespace and service-account names shortened. Each pair is HTTP status / audit-ID prefix from the receiver. Same API and worker credentials throughout. Neighbor and replacement raw creates are server dry-runs; other creates are real fixture ConfigMaps.Metadata stream SHA-256:
8eb2d5f94108535e22803c8510368d95807c728df58688f1c43bc619f93840da. No workload was created. This is a finite observation, not an atomic UID condition on a future write. The API retains namespace-wide tenant/configuration permissions, including Secrets.