Repository navigation
feat: add the feature factory, share one email domain and drop the quickstart certificate - #6
Conversation
A spec writer turns a labelled issue into a spec pull request. When a person merges it, the captain splits the spec into tasks and starts an implementer run for each through the kora MCP server. Its scopes let it start and read implementer runs only. Reviews, verifications and failed CI route back to the implementer that owns each task.
Every example tenant claims local.runkora.io and binds to a tenant group in the groups claim with claimBinding, which 0.11.0 ships. Each quickstart user signs in as <tenant>-<role>@local.runkora.io and belongs to one tenant group.
Visual WalkthroughThis pull request adds the feature factory and serves the quickstart over plain HTTP on localhost. Spec to task startAn approved spec merge starts the captain, which starts one implementer run per task. sequenceDiagram
participant G as GitHub
participant T as Triggers
participant S as Spec writer
participant C as Captain
participant I as Implementer
G->>T: issue labelled ready-to-spec
T->>S: start spec run
S-->>G: open spec pull request
G->>T: spec pull request merged
T->>C: start planning run
C-->>G: post task checklist
loop each task with no open dependency
C->>I: start implementer run
I-->>G: open task pull request
end
alt run ended before pull request opened
C->>I: start replacement run
end
G->>T: task pull request merged
T->>C: start next tasks
Review and verification loopEach task pull request gets a review and a verification, and failing CI or review returns to the implementer. sequenceDiagram
participant G as GitHub
participant T as Triggers
participant R as Reviewer
participant V as Verifier
participant I as Implementer
participant C as Captain
G->>T: pull request opened or synchronized
T->>R: start review run
R-->>G: review as comment
G->>T: CI run completes
alt CI passed
T->>V: start verification run
V-->>G: verification as comment
else CI failed
T->>I: start fix run
end
G->>T: review submitted
T->>I: address review
I-->>G: push fixes to branch
alt still failing after third push
I-->>G: add needs-human label
G->>T: needs-human label added
T->>C: start captain run
C-->>G: mark task blocked
end
Sign-in and quickstart routesTenants and identity reach Dex over plain HTTP on dex.localhost, and the gateway no longer uses TLS. flowchart TB
BR[Browser]:::context
subgraph quick [Quickstart cluster]
GW[k3d gateway on port 9880]:::changed
CON[Console at kora.localhost]:::changed
DEX[Dex at dex.localhost]:::changed
HA[Identity host alias]:::changed
ID[Identity service]:::context
TEN[Tenant issuerURL]:::changed
TLS[mkcert TLS certificate]:::removed
end
BR -->|plain HTTP| GW
GW -->|routes to console| CON
BR -->|sign in| DEX
TEN -->|trusts issuer| ID
ID -->|resolves dex.localhost| HA
HA -->|reaches Dex| DEX
TLS -->|no longer terminates TLS| GW
classDef added fill:#1f883d,stroke:#1a7f37,stroke-width:2px,color:#ffffff
classDef changed fill:#bf8700,stroke:#9a6700,stroke-width:2px,color:#ffffff
classDef removed fill:#cf222e,stroke:#a40e26,stroke-width:2px,stroke-dasharray:5,color:#ffffff
classDef context fill:transparent,stroke:#8c959f,stroke-width:1px,stroke-dasharray:3,color:#8c959f
linkStyle default stroke:#8c959f,stroke-width:2px
style quick fill:transparent,stroke:#8c959f
Legend: green = added, amber = changed, red = removed, dashed grey = context
|
There was a problem hiding this comment.
Walkthrough
Adds a feature factory (spec, plan, implement, review, verify agents with triggers) and moves the example tenants to one shared local.runkora.io email domain with per-tenant Dex groups.
| Severity | Finding | Location |
|---|---|---|
| Add a sender restriction to the review trigger | factories/feature/factory/triggers/implementer-on-review.yaml:15 |
Review effort: High
Risk: Medium, new factory and sign-in identity changes
Coverage: 43 of 43 files reviewed
Where to focus
| Area | Why it needs a person |
|---|---|
factories/feature/factory/triggers |
Decide which review authors may drive a write-enabled agent. |
quickstart/manifests/dex/glauth.yaml |
Verify the group-per-tenant bindings match every tenant manifest. |
factories/feature/factory/agents |
Check the agent actions cover the labels and comments the prompts request. |
Lower risk
| Area | Why |
|---|---|
factories/feature/platform/models |
Model manifests copied from sibling factories. |
| READMEs | Text updates for the shared email domain. |
Changes by area
| Area | Files | Change |
|---|---|---|
factories/feature |
28 | New feature factory and platform tenant |
quickstart |
4 | Dex users and groups, Makefile, docs |
| tenants and READMEs | 9 | Shared email domain and claim bindings |
Makefile, versions.mk |
2 | Register feature factory, version bump |
Checked
Manifest cross-references, kustomization resource lists, Makefile secret names, Dex group bindings.
The console is http://kora.localhost:9880 and Dex is http://dex.localhost:5557/dex. Browsers treat *.localhost as a secure origin, so the quickstart needs no certificate and installs no CA. kora 0.11.1 keeps the session cookie working in Safari on that origin.
Adds
factories/feature, a factory that turns a feature request into an approved spec and builds it task by task. Moves the examples to kora 0.11.3, puts every tenant on one email domain with claim binding, and serves the quickstart over plain HTTP with no certificate.Changes
factories/feature: The platform repository (tenantfeature, models) and the factory repository (GitHub connection and source,buildenvironment,maintainerrole, five agents, eight triggers).spec-writerturns an issue labelledready-to-specinto a spec pull request onspec/<issue>.captainthen splits it into tasks and starts animplementerrun for each through the kora MCP server'sruns:starttool.scopeslet it start and readimplementerruns only. It keeps its checklist on the issue, and a merged task or aneeds-humanlabel wakes it.reviewerreviews each task pull request.verifierchecks it against the spec once CI passes. Reviews, verifications and failed CI route back to the implementer that owns the task.versions.mkinstalls 0.11.3. 0.11.1 keeps the console's session cookie working in Safari on alocalhostorigin over HTTP. 0.11.2 holds an agent update until every agent its scopes name exists.local.runkora.ioand binds to onetenant-<name>group withclaimBinding. Each quickstart user signs in as<tenant>-<role>@local.runkora.ioand belongs to one tenant group. The single-tenant users keepadmin@andengineer@.http://kora.localhost:9880and Dex ishttp://dex.localhost:5557/dex. Browsers treat*.localhostas a secure origin, somake upno longer runsmkcertor installs a CA.make tunnelandmake alertuse the HTTP addresses.make exampleoffers the feature factory. The READMEs and the Users list use the new sign-in emails.Testing
local.runkora.iowith a binding and reachReady. The identity service loads them with no overlap error.admin@local.runkora.iosigned in to theexampletenant overhttp://kora.localhost:9880in Chrome and Safari.spec-writeropened a spec with four ordered tasks and acceptance criteria.captainfound the implementer withagents:listand started its first task withruns:start. kora recorded the captain as the run's creator.implementeropened the task pull request. The reviewer and verifier runs started from it.agents:*:implementer:*scopes, because the implementer was still provisioning when the grant was written. kora 0.11.2 fixes this (fix(agents): fail a declared agent update when its grant is refused kora#857).