Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
a023942
Contract tests: a module without lazurio.preparation starts by the de…
immakermatty Sep 29, 2026
fd284ba
A module without lazurio.preparation starts by the default preparatio…
immakermatty Sep 29, 2026
1837530
Decision F25 and the adoption contract: the default preparation of a …
immakermatty Sep 29, 2026
5dde8c7
Contract tests: a local dependency inside the same Organization check…
immakermatty Sep 29, 2026
3024927
The default preparation accepts a local dependency inside the same Or…
immakermatty Sep 29, 2026
b62e229
Contract tests for review 5359095003: status and stop without the pre…
immakermatty Sep 29, 2026
360187a
Review 5359095003: status and stop without the preparation, the lockf…
immakermatty Sep 29, 2026
0bc562b
Contract tests: a started application gets the replaced Launchpad's r…
immakermatty Sep 29, 2026
19f3edd
A dangling symlink in place of workspace/ is directory-not-regular, n…
immakermatty Sep 29, 2026
d628be1
A started application gets the replaced Launchpad's runtime environme…
immakermatty Sep 29, 2026
b49bb0c
Decision F26 and the adoption contract: the environment of a started …
immakermatty Sep 29, 2026
7d10bf2
Merge remote-tracking branch 'origin/claude/DEV-6628-default-preparat…
immakermatty Sep 29, 2026
83c0144
The Launchpad says Environment and Remote Environment to people, in C…
immakermatty Sep 29, 2026
9ba8b27
The Folder's instructions and manual say Environment, with one rule f…
immakermatty Sep 29, 2026
4a7a230
A guard keeps Mašina, VM and Machine out of what people read (#99)
immakermatty Sep 29, 2026
4f4e0ed
Decision F27: Environment and Remote Environment towards people, Mach…
immakermatty Sep 29, 2026
c086318
The CLI's human output and help say Environment and Remote Environmen…
immakermatty Sep 29, 2026
0d547fe
Test: the hosted update paragraph says "in this Environment" (#99)
immakermatty Sep 29, 2026
5d0855d
Merge origin/main (a9e195f: #100, #103 with #101) into the Environmen…
immakermatty Sep 29, 2026
9b2e391
Merge origin/main (5d6ddfc: #106, the Steward preset) into the Enviro…
immakermatty Sep 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions docs/decisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -2437,3 +2437,55 @@ re-render every Folder for no change in content. The user-facing text says
| `owner.assignment` `{kind: "automation", github_login, github_id}` of the responsible operator (selected) | Same shape as `operator`, one selector, fail closed on unknown kinds; needs a Machines schema change and a re-pin |
| Allow the Steward preset only on an `automation` handover | Nothing to choose until Machines ships, and a work VM re-assigned from a Team to `automation` could not reach the preset through the change path (the old binding would refuse it); rejected for the kind-wide allow-list that F10 already uses |
| Configure Lazurio MausBot from Platform (write its environment or unit) | A second supervisor and a writer outside the Folder; Machines runs the service today; rejected: the preset declares, the service applies |

## F28 — Towards people the place they work in is the Environment; a hosted one is a Remote Environment

**Decided by the Principal 2026-09-29 (issue #99).** What people read calls the place
where they and their agents work the **Environment**, and a hosted one a **Remote
Environment**. The words "Mašina", "Machine" (as the thing a person works in), "VM" and
"server" are not used towards people. The reason is recognition: people know "Remote
Environment" from the tools they already use (Codex and T3 Code name a hosted workspace
that way, F16), and understand it better than "Machine", which in this project is a
defined architectural term.

1. **Czech.** The word stays unchanged and is masculine: *ten Environment*, *tento
(tenhle) Environment*, *na tomto (tomhle) Environmentu*, *Remote Environment*
(*osobní Remote Environment*, *pracovní Remote Environment*, *týmový Remote
Environment*). Texts that already treated it as neuter (*tohle Environment je
sdílené*) follow the masculine form.
2. **Where it applies.** Every user-facing string of the Launchpad in both locales
(`src/launchpad/messages.ts` and the page's own fallback text), the human output and
help text of the CLI, the prompts a person copies for an agent, and the instructions
the Platform generates into the Folder (`AGENTS.md` and `manual/`, every preset, both
locales). The generated `AGENTS.md` carries one short rule that tells agents to say
Environment and Remote Environment to people and never Mašina, VM or server
(`environmentWording` in `src/folder/render.ts`); the template revision is
`base-instructions-15`. The manual defines **Machine** once, as the technical term,
in its glossary and in the boundary bullet of `manual/lazurio.md`.
3. **Where "Machine" stays.** Machine remains the technical term for the runtime,
security and recovery boundary an Environment runs on (0144, 0153). Identifiers, JSON
keys, machine-readable values, command names (`lazurio machine inspect`,
`lazurio machine folder-refresh`), flags, file names (`manual/this-machine.md`,
`lazurio.machine.json`), schemas (`lazurio.machine.v1`), custody, `ARCHITECTURE.md`
and these decision records keep it. Where help text must name such a command, the
command stays and the prose around it says Environment. The hosting product keeps its
name, Lazurio Machines; in prose its operator is the hosting operator.
4. **A guard.** `tests/environment-wording.test.ts` scans the message catalog in both
locales, the page's text, the prepared prompts and the generated Folder instructions
and manual of every preset and locale for "Mašin", "VM" and "Machine" as a noun. Its
allowlist is short and explained: the wording rule itself, code spans (commands,
paths, identifiers), the bold defined term **Machine**, the product name Lazurio
Machines, the name of the principle "Human and Machine", and the Czech word
*mašinérie* (machinery).

**Not covered.** Renaming identifiers, JSON keys, commands, schema fields, file names
or the architecture's term is a separate decision, because other products read those
contracts. Docs that are architecture or decision records keep "Machine"; user guides
may follow this wording when they are next edited.

| Alternative | Trade-off / disposition |
| --- | --- |
| Keep "Machine" / "Mašina" towards people | A defined architectural term people do not recognize; rejected by the Principal |
| Czech "prostředí" / "vzdálené prostředí" | A common word that does not read as a name; not chosen by the Principal, so Czech and English texts name the same thing |
| Rename the identifiers, commands and schemas too | Changes contracts other products read; a separate decision |
| "Environment" and "Remote Environment" in what people read, "Machine" as the technical term, guarded by a test (selected) | People read one familiar word; contracts stay; regressions are caught |
4 changes: 2 additions & 2 deletions docs/launchpad-development.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,10 @@ the frame.

| Before | Now |
| --- | --- |
| Machine profile: Workspace preset, Language, Detail, Coordination, Preview, Apply previewed change, the status line | Settings → General, one group of rows; Preview and Apply in its last row |
| Environment profile: Workspace preset, Language, Detail, Coordination, Preview, Apply previewed change, the status line | Settings → General, one group of rows; Preview and Apply in its last row |
| Reload profile | Settings → General, page action in the header |
| JSON of the last answer (`#result`) | Settings → General, behind "Technical details" |
| This Machine (read-only handover) | Settings → This Machine, one row per recorded fact |
| This Environment (read-only handover) | Settings → This Environment, one row per recorded fact |
| Tools (groups, cards, dialogs, MCP card) | Settings → Tools; Refresh status is its page action in the header |
| Product update pill, with the read-only "Folder refresh needed" line (F17 addendum) | Sidebar footer above Settings/Back, visible from every route, and only while an update is available or under way (Principal 2026-09-28, as in T3 Code); the Folder refresh line is independent of the pill, a subdued notice right above it with the command in selectable monospace |
| Application (development lifecycle) | Launchpad home `/`, not a setting; since P4 replaced there by the catalog; since P5 the module page carries the lifecycle ([below](#module-lifecycle)), the development API stays |
Expand Down
14 changes: 7 additions & 7 deletions src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ folder-preview --folder <absolute Folder directory>
--locale <cs|en> --detail <concise|technical>
--coordination <direct|coordinator>

All five choices are required. OS is detected on the execution Machine.
All five choices are required. OS is detected in the Environment that runs the command.
Alternatively supply --profile <JSON> instead of the five profile choices.
Optional --previous-digest <sha256> is inventory input, not proof of ownership.
The directory must already exist and be caller-owned, non-shared and stable.
Expand All @@ -332,18 +332,18 @@ profile-preview uses the same profile choices and --folder, plus required
--expected-revision <positive integer>. It reads existing .lazurio state and
creates/removes only its operation lock. It does not apply the proposed change.
Both profile commands accept optional --preset <name> to change the workspace preset
within what the recorded Machine handover allows; omitted keeps the current preset.
within what the recorded Environment handover allows; omitted keeps the current preset.
profile-update takes the same inputs as profile-preview and APPLIES the change:
it replaces owned instructions/preferences/manifest and archives the transaction.
On an installed Machine the Folder is the operator's ~/Lazurio; the change is applied
In an installed Environment the Folder is the operator's ~/Lazurio; the change is applied
only after the preview and only at the expected revision.
It refuses missing/unrecognized state, edits and pending recovery; it does not initialize a Folder.
In a hosted Folder (adopted from a Machine handover) a top-level entry other than
In a Remote Environment's Folder (adopted from its handover) a top-level entry other than
organizations/, personalspace/, the two legacy launchpad files and the owned AGENTS.md,
manual/ and .lazurio/ is refused by name (exit 2, folder-foreign-entry) before
preparation, before every replacement and in profile-resume; the journal stays for a
later resume. A workstation Folder keeps your own top-level files untouched.
On a hosted Machine, machine folder-refresh re-renders the same owned files from the
In a Remote Environment, machine folder-refresh re-renders the same owned files from the
current handover through this same transaction, keeping the recorded profile.
tools enable|disable <tool> --folder <Folder> --expected-revision <n> records which
catalog tools agents are told to use and re-renders the same owned files through this
Expand Down Expand Up @@ -392,7 +392,7 @@ Without a Launchpad: {organizationDirectory, operation, selection} with operatio
status or stop addresses an application owned by the systemd user manager directly,
through the same core, runner and coordination lock. Where applications are
session-scoped it answers launchpad-required; it never starts or prepares anything.
open returns the execution Machine's local URL; it does not launch a browser or tunnel.
open returns the local URL in the Environment that runs it; it does not launch a browser or tunnel.
Native Windows filesystem inspection is not yet qualified.`);
console.log(`legacy-paths-inspect --home <absolute owned home directory>
Read-only macOS inventory of Lazurio, Conglomerate and Conglomerate_GEN3 paths.
Expand Down Expand Up @@ -688,7 +688,7 @@ This is not a migration writer or authority to apply the draft. Exit 0 draft, 2
: { os: executionOs(process.platform), ...axes },
);
if (profile.os !== executionOs(process.platform))
throw new Error("Profile OS does not match execution Machine");
throw new Error("Profile OS does not match this Environment's OS");
if (initializing) {
console.log(JSON.stringify(await initializeFolder(folder, profile)));
return 0;
Expand Down
16 changes: 8 additions & 8 deletions src/doctor/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,18 @@ export const doctorHelp = `doctor [--folder <absolute Folder>] [--sign-in] [--js
product already makes: product (update state, running and active version,
the active executable's self-check, a verified newer release, a needed
Folder refresh, the Folder's template revision), Folder (its state as this
version reads it, preset, a pending transaction; on a hosted Machine the
recorded binding against the live handover), tools (required missing is a
version reads it, preset, a pending transaction; in a Remote Environment
the recorded binding against the live handover), tools (required missing is a
failure, recommended or enabled missing needs attention), Organizations and
modules (every catalog entry, executable or the typed reason), Launchpad
(the supervised unit and its health socket) and Machine (on a hosted
Machine whether the entry is recorded). Reads only: the Folder's tool
(the supervised unit and its health socket) and Environment (in a Remote
Environment whether the entry is recorded). Reads only: the Folder's tool
selection under the read lock, no write, no restart, no network; --sign-in
also runs each installed tool's sign-in probe, which may contact its
provider. --json prints {kind, verdict, locale, checks}; every check is
{id, outcome ok|warn|fail|skipped, reason?, context?} of enumerated ids,
without paths or text. The Folder is --folder, the supervised unit's, or on
a hosted Machine the declared operator's. A broken product is repaired
without paths or text. The Folder is --folder, the supervised unit's, or in
a Remote Environment the declared operator's. A broken product is repaired
through lazurio recover. Exit status: 0 ok, 10 attention, 3 broken,
2 usage, 1 failure.`;

Expand Down Expand Up @@ -76,7 +76,7 @@ const texts = {
tools: "Tools",
organizations: "Organizations and modules",
launchpad: "Launchpad",
machine: "Machine",
machine: "Environment",
},
footer: "Read only; nothing was changed.",
},
Expand All @@ -92,7 +92,7 @@ const texts = {
tools: "Nástroje",
organizations: "Organizace a moduly",
launchpad: "Launchpad",
machine: "Mašina",
machine: "Environment",
},
footer: "Jen čtení; nic se nezměnilo.",
},
Expand Down
Loading
Loading