diff --git a/.serena/memories/ADR-01-CORE.md b/.serena/memories/ADR-01-CORE.md index 6297e54..0f973a7 100644 --- a/.serena/memories/ADR-01-CORE.md +++ b/.serena/memories/ADR-01-CORE.md @@ -1,7 +1,7 @@ @@ -22,6 +22,7 @@ architecture decisions and owner-approved policy changes ## Facts - Bootstrap architecture or policy meaning changes require explicit owner approval; implementation-only maintenance must preserve the current decisions. - ADR 0004 (accepted 2026-07-10) fixes profile composition and the CloakBrowser boundary. +- ADR 0006 (accepted 2026-08-03) amends ADR 0005: the Dart SDK joins Go and Rust as a desktop language-server host, which also makes the `dart-flutter` MCP transport available, and the zcode harness is delegated out of bootstrap to `nddev-harnesses` because its target cannot be adopted unattended. ADR 0005 had listed `dart` among the things that stay forbidden; the `dart` apt package still is. - ADR 0005 (accepted 2026-08-02) amends ADR 0004: Go and Rust join Node, Python, and LLVM as desktop language-server hosts. It is explicit that this trades away the strong form of the desktop boundary — the separation between source analysis and local project build becomes intent and documentation rather than absence of a compiler, the same weaker guarantee that already applied to Node and Python. ## Evidence diff --git a/.serena/memories/BROWSER-01-WORKFLOW.md b/.serena/memories/BROWSER-01-WORKFLOW.md index 7b065fa..c4b52d6 100644 --- a/.serena/memories/BROWSER-01-WORKFLOW.md +++ b/.serena/memories/BROWSER-01-WORKFLOW.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/CI-01-ACTIONS.md b/.serena/memories/CI-01-ACTIONS.md index fdaa17a..5f7110a 100644 --- a/.serena/memories/CI-01-ACTIONS.md +++ b/.serena/memories/CI-01-ACTIONS.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/CONTEXT-01-CORE.md b/.serena/memories/CONTEXT-01-CORE.md index ac73701..0b4d50b 100644 --- a/.serena/memories/CONTEXT-01-CORE.md +++ b/.serena/memories/CONTEXT-01-CORE.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/CORE-01-INDEX.md b/.serena/memories/CORE-01-INDEX.md index 7ce1051..3bbdf31 100644 --- a/.serena/memories/CORE-01-INDEX.md +++ b/.serena/memories/CORE-01-INDEX.md @@ -1,7 +1,7 @@ @@ -32,7 +32,7 @@ Durable Serena memory index for the `rldyour-new-mac-or-ubuntu` bootstrap module ## Current State - This module has three tracked memories: `CORE-01-INDEX.md`, `RELEASE-01-VALIDATION.md`, and `TECHDEBT-01-NOW.md`. -- The `2.2.1` contract composes Apple Silicon macOS desktop, Ubuntu 24.04/26.04 desktop, and Ubuntu 24.04/26.04 server roles. Desktop roles are source/LSP-only; the Ubuntu server role owns build/runtime and explicit Docker modes. +- The `2.3.0` contract composes Apple Silicon macOS desktop, Ubuntu 24.04/26.04 desktop, and Ubuntu 24.04/26.04 server roles. Desktop roles are source/LSP-only; the Ubuntu server role owns build/runtime and explicit Docker modes. - GUI is an optional desktop overlay. Ubuntu server is always headless. - The module owns exact AI CLI installation, terminal integration, language-server/tooling installation, and the mandatory CloakBrowser runtime. Native AI CLI configuration remains in sibling adapter repositories. - Serena indexes Bash and Python because the implementation is shell-first with Python validators and fault-injection tests. diff --git a/.serena/memories/DEPLOY-01-RUNTIME.md b/.serena/memories/DEPLOY-01-RUNTIME.md index a5246dd..052efb5 100644 --- a/.serena/memories/DEPLOY-01-RUNTIME.md +++ b/.serena/memories/DEPLOY-01-RUNTIME.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/DESIGN-01-WORKFLOW.md b/.serena/memories/DESIGN-01-WORKFLOW.md index 4604c52..b7b649c 100644 --- a/.serena/memories/DESIGN-01-WORKFLOW.md +++ b/.serena/memories/DESIGN-01-WORKFLOW.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/DOCS-01-INSTRUCTIONS.md b/.serena/memories/DOCS-01-INSTRUCTIONS.md index 766d131..2a96160 100644 --- a/.serena/memories/DOCS-01-INSTRUCTIONS.md +++ b/.serena/memories/DOCS-01-INSTRUCTIONS.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/EXPLORE-01-RESEARCH.md b/.serena/memories/EXPLORE-01-RESEARCH.md index da22341..40725c5 100644 --- a/.serena/memories/EXPLORE-01-RESEARCH.md +++ b/.serena/memories/EXPLORE-01-RESEARCH.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/FLOW-01-SDLC.md b/.serena/memories/FLOW-01-SDLC.md index 34ee13c..aee30a0 100644 --- a/.serena/memories/FLOW-01-SDLC.md +++ b/.serena/memories/FLOW-01-SDLC.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/FUTURE-01-VISION.md b/.serena/memories/FUTURE-01-VISION.md index 68dbca4..ee9ff12 100644 --- a/.serena/memories/FUTURE-01-VISION.md +++ b/.serena/memories/FUTURE-01-VISION.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/HOOKS-01-LIFECYCLE.md b/.serena/memories/HOOKS-01-LIFECYCLE.md index d0921af..940cb5c 100644 --- a/.serena/memories/HOOKS-01-LIFECYCLE.md +++ b/.serena/memories/HOOKS-01-LIFECYCLE.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/ISSUES-01-VERIFIED-PROBLEMS.md b/.serena/memories/ISSUES-01-VERIFIED-PROBLEMS.md index 7e59865..f112360 100644 --- a/.serena/memories/ISSUES-01-VERIFIED-PROBLEMS.md +++ b/.serena/memories/ISSUES-01-VERIFIED-PROBLEMS.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/LSP-01-LANGUAGE-SERVERS.md b/.serena/memories/LSP-01-LANGUAGE-SERVERS.md index 1932a7b..877f53f 100644 --- a/.serena/memories/LSP-01-LANGUAGE-SERVERS.md +++ b/.serena/memories/LSP-01-LANGUAGE-SERVERS.md @@ -1,7 +1,7 @@ @@ -26,6 +26,10 @@ language-server setup and diagnostic proof ## Facts - Desktop profiles install source-editing and language-server tooling; project build execution belongs on servers. - Contract `2.1.0` (ADR 0005) admits Go `1.26.5` and Rust `1.97.1` as desktop-only language-server hosts for `gopls` and `rust-analyzer`, on the same footing as Node, Python, and Homebrew's LLVM: present to resolve source, not to authorize project builds. +- Contract `2.3.0` (ADR 0006) admits the Dart SDK `3.12.2` on the same footing, and it carries two capabilities: `dart language-server --protocol=lsp` (the invocation `rldyour-lsps` declares, proven against a real `initialize` handshake) and `dart mcp-server`, the transport the `dart-flutter` MCP server in `rldyour-mcps` executes. Before `2.3.0` no bootstrap path installed Dart on either platform while the marketplace claimed otherwise, so that MCP server could never start. +- The Dart SDK zip records its directories as `0775` and umask only clears bits it never adds, so the staged tree passes `rldyour::_managed_tree_permissions normalize` before its receipt is written and a reused tree is re-validated. That helper is the generalized former browser-Node one; adding a second permission path is forbidden. +- Dart telemetry is disabled through `rldyour::ensure_dart_telemetry_disabled`, which runs the SDK's own `--disable-analytics` switch and then reads `reporting=0` back from the shared Dart/Flutter telemetry config. Never hand-write that file: upstream maintains it. Ubuntu's verifier re-proves the opt-out; macOS keeps its documented weaker-gate posture. +- The Flutter SDK is deliberately not installed: its `bin/cache` self-populates at runtime and would mutate a hash-verified tree. - Ubuntu installs both from tracked per-architecture SHA-256 artifacts into owned versioned directories with runtime receipts; `golang-go`, `rustc`, `cargo`, and `rustup` remain forbidden distribution packages. macOS uses the `go`, `rust`, and `rust-analyzer` Homebrew formulae. - One combined `rust--` archive carries rustc, cargo, rust-std, clippy, rustfmt, and rust-analyzer, so a single tracked hash covers the whole Rust host. - `gopls` `v0.23.0` is the one host component without a tracked archive hash: it publishes no prebuilt archive, so it is pinned by exact module version and verified through the Go module checksum database. `runtime_support.ubuntu_gopls_provenance` records that class explicitly. diff --git a/.serena/memories/MCP-01-TRANSPORT.md b/.serena/memories/MCP-01-TRANSPORT.md index bf6f245..7bb6496 100644 --- a/.serena/memories/MCP-01-TRANSPORT.md +++ b/.serena/memories/MCP-01-TRANSPORT.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/PATTERNS-01-CANONICAL.md b/.serena/memories/PATTERNS-01-CANONICAL.md index 577621a..bdaead9 100644 --- a/.serena/memories/PATTERNS-01-CANONICAL.md +++ b/.serena/memories/PATTERNS-01-CANONICAL.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/RELEASE-01-VALIDATION.md b/.serena/memories/RELEASE-01-VALIDATION.md index 8b8a9c6..a30a337 100644 --- a/.serena/memories/RELEASE-01-VALIDATION.md +++ b/.serena/memories/RELEASE-01-VALIDATION.md @@ -1,7 +1,7 @@ @@ -46,11 +46,11 @@ Release, validation, CI, and public README contract for the macOS/Ubuntu bootstr - launchd forward and rollback handoffs use bounded loaded/unloaded state convergence instead of treating an immediate `launchctl` exit status as proof. ## Current State -- Current product/config version is `2.2.1` (`VERSION`, `config/rldyour-contract.json` -> `adapter`), and `2.2.1` is the published GitHub release tag — the published release and the contract agree. +- Current product/config version is `2.3.0` (`VERSION`, `config/rldyour-contract.json` -> `adapter`). The published GitHub release tag is still `2.2.1`: `2.3.0` advances the contract and the gitlink only, so the published tag trails by design until a release is cut. - Contracts `2.1.0` and `2.2.0` were never released; `2.2.1` publishes their combined contents. Do not expect tags for them. - Release `2.2.1` published five immutable checksummed assets in one create call: the source archive, `release-manifest.json`, `release-notes.md`, `sbom.spdx.json`, and `SHA256SUMS`. - Supported targets are Apple Silicon macOS desktop and Ubuntu 24.04/26.04 desktop/server on amd64 or arm64. Desktop Docker mode is always `none`; server Docker is explicit `none`, `rootful`, or `rootless`. -- The active harness set is codex and zcode only (`harnesses.active`). Neither is installed inline: each is owned by an NDDev module pinned by exact `harnesses..module_commit`, and is self-materialized from `module_repo` at that commit when its `module_path_env` is unset. Exact commits and vendor runtime versions are read from the contract and the module's `build/version.json`; they are not duplicated here. +- The active harness set is codex only (`harnesses.active`). It is not installed inline: it is owned by an NDDev module pinned by exact `harnesses.codex.module_commit`, and is self-materialized from `module_repo` at that commit when `RLDYOUR_CODEX_MODULE` is unset. zcode moved to `harnesses.delegated` in `2.3.0` and is installed by `nddev-harnesses`; `scripts/ci/validate.sh` fails if the active set drifts or if the delegation loses its owner or reason. Exact commits and vendor runtime versions are read from the contract and the module's `build/version.json`; they are not duplicated here. - The mandatory browser baseline is CloakBrowser `0.4.12`, Chrome DevTools MCP `1.6.0`, and Playwright CLI `0.1.17` on loopback CDP `127.0.0.1:9222`; Webwright has no installed runtime or dependency tree. - AI, browser Node, and CloakBrowser runtimes install from repository-owned frozen locks into content-addressed directories before an atomic wrapper/service/receipt handoff. - Browser Node staging removes group/world-write permission bits before publication. An already published runtime with unsafe permissions is preserved outside the active namespace and rebuilt from the frozen lock. diff --git a/.serena/memories/RULES-01-QUALITY-POLICY.md b/.serena/memories/RULES-01-QUALITY-POLICY.md index ccd4f85..599d6d5 100644 --- a/.serena/memories/RULES-01-QUALITY-POLICY.md +++ b/.serena/memories/RULES-01-QUALITY-POLICY.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/RUNTIME-01-BASELINES.md b/.serena/memories/RUNTIME-01-BASELINES.md index c74b184..eebadb3 100644 --- a/.serena/memories/RUNTIME-01-BASELINES.md +++ b/.serena/memories/RUNTIME-01-BASELINES.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/SECURITY-01-POSTURE.md b/.serena/memories/SECURITY-01-POSTURE.md index 7817775..20aaca1 100644 --- a/.serena/memories/SECURITY-01-POSTURE.md +++ b/.serena/memories/SECURITY-01-POSTURE.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/SERENA-01-MEMORY-SYNC.md b/.serena/memories/SERENA-01-MEMORY-SYNC.md index beb5a6a..60346cf 100644 --- a/.serena/memories/SERENA-01-MEMORY-SYNC.md +++ b/.serena/memories/SERENA-01-MEMORY-SYNC.md @@ -1,7 +1,7 @@ diff --git a/.serena/memories/TECHDEBT-01-NOW.md b/.serena/memories/TECHDEBT-01-NOW.md index 46d5331..ddda6eb 100644 --- a/.serena/memories/TECHDEBT-01-NOW.md +++ b/.serena/memories/TECHDEBT-01-NOW.md @@ -1,7 +1,7 @@ @@ -37,10 +37,10 @@ Operational watchpoints and boundaries for the bootstrap module. - Durable Serena memory files are tracked; runtime-local Serena state remains ignored. - The module owns installation and verification, not adapter-native MCP, command, skill, or task-routing surfaces. - Managed shell integration edits only delimited source blocks, backs up pre-existing files, and verifies a fresh login shell. Interactive aliases activate only when their target executable exists. -- ZCode remains an explicit integrity handoff because upstream publishes no checksum/signature manifest. Ubuntu can install it only with an independently supplied SHA-256. +- ZCode is out of bootstrap scope as of `2.3.0` (ADR 0006). The app creates and owns `~/.zcode` on first launch and its module installer refuses an unstamped target without an explicit `--adopt-unmanaged`, which no unattended run may supply; because the harness step ran ahead of every later layer under `set -euo pipefail`, that refusal aborted whole device applies. It is declared `harnesses.delegated` with `nddev-harnesses` as owner. - A real Apple Silicon macOS desktop strict apply and an immediate non-interactive idempotent reapply were verified on 2026-07-10, including managed launchd/CDP health and cmux hooks. Representative Ubuntu 24.04/26.04 desktop/server runs with systemd, SSH/UFW, and each selected Docker mode remain required; container-only CI cannot prove those host boundaries. -- No current bootstrap contract/version drift: `VERSION`, contract, scripts, frozen locks, docs, SECURITY, and tests agree on `2.2.1` and its exact runtime pins, and `2.2.1` is the published release tag. -- Resolved: release `2.2.1` publishes the combined contents of the unreleased `2.1.0` and `2.2.0` contracts, so the published tag no longer trails. +- No current bootstrap contract/version drift: `VERSION`, contract, scripts, frozen locks, docs, SECURITY, and tests agree on `2.3.0` and its exact runtime pins. `2.2.1` remains the published release tag: `2.3.0` is contract-only so far, the same shape as the unreleased `2.1.0` and `2.2.0` before it. +- Release `2.2.1` publishes the combined contents of the unreleased `2.1.0` and `2.2.0` contracts. The published tag trails the contract again at `2.3.0`, which is the module's normal shape between releases, not drift. - Resolved in `2.2.0`: `content_id()` and `regular_owned()` now take an explicit flag, and `cloak_runtime_identity()` — the only caller reading Git-tracked sources — passes it. The suite passes under `umask 002` and `umask 022` alike. Installed runtime paths still fail closed on a group- or world-writable file, pinned by `test_private_mode_is_enforced_for_installed_files_and_not_for_sources`. - Historical Webwright runtimes may remain on previously configured devices for preservation, but no managed command, dependency, or config path can execute them. diff --git a/.serena/memories/TESTS-01-VALIDATION-GATES.md b/.serena/memories/TESTS-01-VALIDATION-GATES.md index dcec5d8..1178cd6 100644 --- a/.serena/memories/TESTS-01-VALIDATION-GATES.md +++ b/.serena/memories/TESTS-01-VALIDATION-GATES.md @@ -1,7 +1,7 @@