44
55from druks .agents import Agent
66from druks .apps import App , AppSettings
7- from druks .contrib .ship .contracts import (
7+ from druks .contrib .software_factory .contracts import (
88 ContractRevisionOutput ,
99 EvaluationOutput ,
1010 ImplementationOutput ,
1313 ReviewOutput ,
1414 TriageOutput ,
1515)
16- from druks .contrib .ship .ticketing .base import Tracker
17- from druks .contrib .ship .ticketing .jira import Jira
18- from druks .contrib .ship .ticketing .linear import Linear
16+ from druks .contrib .software_factory .ticketing .base import Tracker
17+ from druks .contrib .software_factory .ticketing .jira import Jira
18+ from druks .contrib .software_factory .ticketing .linear import Linear
1919from druks .core import services
2020from druks .db import StoredSubject
2121from druks .doctor import CheckResult
3333async def check_tracker_identity () -> CheckResult :
3434 """Whether the selected tracker's identity is connected. Trackerless is a
3535 choice, not a fault; a selected-but-unconnected tracker is pending setup."""
36- settings = await Ship .settings ()
36+ settings = await SoftwareFactory .settings ()
3737 if settings .tracker == "none" :
3838 return CheckResult (name = "tracker" , ok = True , detail = "trackerless by choice" )
3939 service = {"linear" : services .Linear , "jira" : services .Jira }[settings .tracker ]
@@ -48,18 +48,22 @@ async def check_tracker_identity() -> CheckResult:
4848 )
4949
5050
51- class Ship (App ):
52- name = "ship "
51+ class SoftwareFactory (App ):
52+ name = "software_factory "
5353 # These tables (projects, work_items, ...) are already unprefixed in core's
5454 # migration history, so they must stay that way.
5555 prefix_tables = False
56- icon = "ship "
56+ icon = "factory "
5757 description = (
5858 "Each stage of the build pipeline runs as its own agent. An agent runs its own "
5959 "model, or inherits its harness default — the backend dispatches the harness "
6060 "from the model you pick."
6161 )
62- navigation = [("/ship" , "active" ), ("/ship/history" , "history" ), ("/ship/projects" , "projects" )]
62+ navigation = [
63+ ("/software_factory" , "active" ),
64+ ("/software_factory/history" , "history" ),
65+ ("/software_factory/projects" , "projects" ),
66+ ]
6367
6468 class Settings (AppSettings ):
6569 tracker : Literal ["none" , "linear" , "jira" ] = Field (
@@ -143,44 +147,44 @@ async def get_tracker(cls, source: str | None = None) -> Tracker | None:
143147 # them. The attribute name is each agent's id (its durable settings/timeline key).
144148 generate_plan = Agent (
145149 description = "ticket → implementation plan" ,
146- prompt = "ship /build/generate_plan.md" ,
150+ prompt = "software_factory /build/generate_plan.md" ,
147151 contract = PlanOutput ,
148152 model = "codex" ,
149153 )
150154 review_plan = Agent (
151155 description = "critiques the plan before any work starts" ,
152- prompt = "ship /build/review_plan.md" ,
156+ prompt = "software_factory /build/review_plan.md" ,
153157 contract = ReviewOutput ,
154158 model = "claude" ,
155159 )
156160 revise_contract = Agent (
157161 description = "revises the plan contract on feedback" ,
158- prompt = "ship /build/revise_contract.md" ,
162+ prompt = "software_factory /build/revise_contract.md" ,
159163 contract = ContractRevisionOutput ,
160164 model = "codex" ,
161165 )
162166 implement = Agent (
163167 description = "plan → diff, in a drukbox" ,
164- prompt = "ship /build/implement.md" ,
168+ prompt = "software_factory /build/implement.md" ,
165169 contract = ImplementationOutput ,
166170 model = "claude" ,
167171 )
168172 evaluate_implementation = Agent (
169173 description = "verification + code review of the diff, one verdict" ,
170- prompt = "ship /build/evaluate_implementation.md" ,
174+ prompt = "software_factory /build/evaluate_implementation.md" ,
171175 contract = EvaluationOutput ,
172176 model = "codex" ,
173177 effort = "medium" ,
174178 )
175179 triage_human_feedback = Agent (
176180 description = "routes a human's PR feedback back into the workflow" ,
177- prompt = "ship /build/triage_human_feedback.md" ,
181+ prompt = "software_factory /build/triage_human_feedback.md" ,
178182 contract = TriageOutput ,
179183 model = "codex" ,
180184 )
181185 repo_profiler = Agent (
182186 description = "reads a repo once and reports its stack, verification commands, and skills" ,
183- prompt = "ship /profile/repo_profiler.md" ,
187+ prompt = "software_factory /profile/repo_profiler.md" ,
184188 contract = RepoProfilerOutput ,
185189 model = "codex" ,
186190 )
0 commit comments