New Software
New Software displays real server state with a next action, not placeholder statistics.
Served by the core studio
Software records (sources, programs, runs, releases, components, environments, media, verification and exports) live in the core engine and are edited in its studio. When a connected engine answers through this workspace, the panels above render its own records as returned; without a connection the shell states that and shows nothing rather than an invented row. The surface contract below names each action and the setup it needs.
Surface contract
Primary object: the zero-code grouping flow: select repositories, set the objective, then generate — each step a core-studio contract.
Actions
- Select repositoriesThe guided setup’s source step connects a repository through POST /v1/software/{id}/sources after the provider authorization; the GitHub App grants read-only repository access and the hosted shell never sees the token.
- Set objectiveThe objective is recorded by the doc program in the core studio (POST /v1/software/{id}/programs). No objective means generation stays locked; the hosted shell cannot set engine state.
- GenerateCore studioGeneration runs as an analysis job in the core engine with the cap you set in micro-USD before starting; the hosted shell holds no engine session and never shows a fabricated build.
Required states and how this surface reaches them
- loading
- the session probe and each list show Loading… until the control plane answers.
- ready
- the server’s own records render as returned; the primary object is named before its details.
- empty
- no selection exists yet; the guided setup names each repository it will read and reads nothing until a source is authorized.
- error
- the control plane’s status and detail are shown; no placeholder row replaces them.
- offline
- no control plane is reachable; nothing is rendered rather than invented.
- permission_denied
- a 401 returns to sign-in with this path; a 403 states that the role cannot read this surface.
- not_configured
- a 503 names the missing provider or secret; setup is shown, never fake results.
- budget_paused
- a 402 (quota_exceeded / upgrade_required) pauses spending; the budget row shows the cap and consumption that caused it.
- requires_approval
- generation that spends is bounded by the analysis cap the server records; the client cannot raise it silently.
Scope: workspace membership. Engine records are read and written through the core engine’s own routes (proxied by the control plane); the hosted shell binds only to named contracts, shows a record only when the server returned it, and never calculates permissions in the browser.