@@ -54,8 +54,8 @@ Reuse existing resource deletion and serialization code. Cross-Project copying w
5454removed. ` admin_resource_owners ` alone feeds the historical ` source:"admin_copy" `
5555provenance read; ` admin_asset_copies ` is retained only because tables are not
5656dropped. Unknown historical provenance remains unknown. No secrets or request
57- bodies enter logs. A forwarded console actor name is only a label, never an
58- authorization input.
57+ bodies enter logs. The console's fixed actor label ( ` console ` ) is only an audit
58+ display label, never an authorization input.
5959
6060When requirements conflict, object ownership is unclear, or a design would need
6161parallel compatibility paths, raise the issue with a concrete recommendation and
@@ -732,10 +732,10 @@ does not qualify its isolation or enable public creation.
732732### Hosted sandbox nodes and optional suspension
733733
734734Default installation includes Core, Web and PostgreSQL but no execution node.
735- It always creates a separate deployment administrator credential . Core receives
736- only its digest; the paired console server receives the private token and injects
737- it only on ` /core/v1 ` requests after console login and same-origin checks.
738- The browser never receives that token . Node and daemon connections use ` /api/v1 `
735+ It always creates the Core key . Core receives only its digest; the paired console
736+ server receives the private key, uses it for sign-in and injects it only on
737+ ` /core/v1 ` requests after console login and same-origin checks. The browser
738+ never receives that key . Node and daemon connections use ` /api/v1 `
739739with their own credentials; the reverse proxy sends them directly to Core, never
740740through Web. Zero-node Core receives neither the Docker socket nor KVM.
741741The Web and deployment administrator API select one provider, public Core origin,
@@ -826,7 +826,7 @@ as a user service; it performs no SSH installation, Session creation or model ca
826826
827827The [ Hosted Sandbox Manager] ( services/agents-api/HOSTED-SANDBOX-MANAGER.md ) is a
828828deployment-level admin surface, separate from Project credentials. The paired
829- console's administrator token stays on its server. Enrollment credentials authorize
829+ console's Core key stays on its server. Enrollment credentials authorize
830830initial node configuration reads and registration; durable node credentials authorize
831831retained configuration reads and node transport. Project keys cannot read nodes,
832832placement or allocations.
@@ -1833,7 +1833,7 @@ installer. Its initial default is 2 CPUs and 4096 MiB; microsandbox also request
18331833installer defaults. Node configuration and identity live under
18341834` ~/.parsar/nodes/<installation-id>/ ` ; microsandbox uses its separate short private
18351835Runtime home. Zero-node installs create no node identity state but retain the paired
1836- administrator credential for first setup.
1836+ Core key for first setup.
18371837
18381838One Runtime image contains the existing daemon, shared helpers and three native
18391839harness packages. Their differences remain in the adapters. Core keeps exclusive
@@ -1847,21 +1847,21 @@ must not change on a repeated install.
18471847
18481848` services/core-console ` serves the production Web build and, after console login
18491849and same-origin checks, forwards every ` /core/v1 ` request with the Core key; Core
1850- decides whether the route exists. It requires a
1851- private ` CORE_CONSOLE_ADMIN_TOKEN_FILE ` and holds no project caller credential.
1852- Every ` /v1 ` and ` /api/v1 ` request returns 404, including explicit Bearer and
1853- WebSocket requests; Web forwards no node or daemon transport. The installer
1854- mounts only the administrator key into Web and only its digest into Core. The
1855- browser receives safe capability flags , never that key. The deployment's TLS
1856- reverse proxy routes ` /v1 ` (applications) and ` /api/v1 ` (nodes and Runtime
1850+ decides whether the route exists. It requires the private Core key file named by
1851+ ` CORE_CONSOLE_CORE_KEY_FILE ` and holds no project caller credential. Every ` /v1 `
1852+ and ` /api/v1 ` request returns 404, including explicit Bearer and WebSocket
1853+ requests; Web forwards no node or daemon transport. The installer mounts only the
1854+ Core key into Web and only its digest ( ` AGENTS_API_CORE_KEY_DIGESTS_FILE ` ) into
1855+ Core. The browser receives safe configuration , never that key. The deployment's
1856+ TLS reverse proxy routes ` /v1 ` (applications) and ` /api/v1 ` (nodes and Runtime
18571857daemons, with their own credentials) directly to Core and everything else,
18581858including ` /core/v1 ` , to Web. Operator scripts call ` /core/v1 ` on Core's loopback
18591859port.
18601860Nodes and Core come from one distribution; older nodes using the removed
18611861` /core/v1/sandbox ` node paths cannot connect and are replaced through the drained
18621862upgrade and re-enrollment workflow.
18631863
1864- The Web manager offers no manual administrator- key fallback . A console without
1864+ The Web manager offers no manual Core key entry outside sign-in . A console without
18651865paired management configuration shows setup guidance; direct remote project API
18661866connections do not silently administer the console's configured deployment.
18671867Chinese/English sandbox text, status and diagnostic formatting live in the shared
@@ -1888,20 +1888,23 @@ The `/core/v1` proxy retains fixed-origin, cross-site, safe-path, redirect and U
18881888restrictions through the standard Go reverse proxy with streaming/cancellation;
18891889literal or encoded dot segments can never move a request out of ` /core/v1 ` .
18901890The console implements no product identity, resource semantics, Runtime discovery
1891- or execution loop. Its local administrator account grants the complete console
1892- surface; do not introduce Web roles, invitations or per-project Web identities.
1893- Agent API caller keys remain independent of the administrator password and cookie.
1894-
1895- Account mode is explicit (` CORE_CONSOLE_AUTH_MODE=account ` ) and requires a private
1896- writable state directory. The first visitor registers the sole administrator with
1897- a username and password; no initialization key is required. The atomic durable
1898- account record stores a password hash; corruption or missing registered account
1899- state must never reopen registration. Account creation is race-safe. Cookie sessions are
1900- bounded, HttpOnly, SameSite Strict and Secure for HTTPS origins; a restart requires
1901- sign-in again, without deleting the account. Unauthenticated access is limited to
1902- the static login UI, finite console authentication routes and the static node
1903- installation payload. Authentication requests use same-origin JSON POSTs with
1904- bounded bodies and bounded password-hash work.
1891+ or execution loop. Signing in with the Core key grants the complete console
1892+ surface; do not introduce Web accounts, roles, invitations or per-project Web
1893+ identities. Agent API caller keys remain independent of the Core key and cookie.
1894+
1895+ Web signs in only with the Core key (` POST /console/auth/login ` with
1896+ ` {"core_key":"…"} ` ), compared in constant time with the console's configured key
1897+ and never logged or echoed. There are no accounts, passwords, first-run setup or
1898+ Basic authentication; ` CORE_CONSOLE_AUTH_MODE ` , ` CORE_CONSOLE_STATE_DIR ` ,
1899+ ` CORE_CONSOLE_PASSWORD_FILE ` and the renamed ` CORE_CONSOLE_ADMIN_TOKEN_FILE ` fail
1900+ startup. Cookie sessions are in memory, bounded, HttpOnly, SameSite Strict and
1901+ Secure for HTTPS origins; a restart or Core key rotation requires sign-in again.
1902+ Unauthenticated access is limited to the static login UI, finite console
1903+ authentication routes and the static node installation payload. Sign-in uses
1904+ same-origin JSON POSTs with bounded bodies and bounded concurrent work. Only
1905+ failed attempts are rate limited, so the correct key always signs in; Web and the
1906+ installer therefore require Core keys of at least 32 characters. See the
1907+ [ Core key operations guide] ( docs/getting-started/operations.md#core-key ) .
19051908
19061909Projects and application API keys live in Core PostgreSQL. Project creation owns
19071910its scope and shared principal; key issuance, revocation and Project archive share
0 commit comments