feat: complete native execution and Steam discovery
This commit is contained in:
@@ -35,8 +35,7 @@ Steam, native, Heroic, Lutris, or UMU integration begins.
|
||||
- Isolated integration tests using only synthetic temporary state and the mock adapter.
|
||||
- Adversarial tests required by R-024 and the threat model where Phase 1 code accepts
|
||||
strings, paths, manifests, environment values, or serialized data.
|
||||
- `make verify` and `make audit` both pass.
|
||||
- `make check` passes.
|
||||
|
||||
Before coding, split this phase into narrow tasks and present any contract choice that
|
||||
would materially constrain future adapters to the project owner.
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
| Rust workspace and component boundaries | root and crate manifests; ADR 0001 | Passed |
|
||||
| Temporary naming and rename path | rename manifest; placeholder scanner | Passed for private development |
|
||||
| Toolchain and lockfile | Rust 1.97.1 checker; desktop evidence; committed lockfile | Passed |
|
||||
| Formatting, linting, tests | `make verify`; desktop evidence | Passed |
|
||||
| CI | pinned workflow invoking `make verify` and `make audit` | Configured; first hosted run pending |
|
||||
| Formatting, linting, tests | local `make check`; desktop evidence | Passed |
|
||||
| Local quality gate | `make check` invokes verification and dependency audits | Passed |
|
||||
| Dependency/license/security audits | workspace auditor; `deny.toml`; cargo-deny 0.20.2 | Passed |
|
||||
| Release/version policy | release policy and changelog | Passed |
|
||||
| ADRs | `docs/adr/` | Passed |
|
||||
@@ -18,6 +18,5 @@
|
||||
| Supported-platform decision | supported-platform record | Passed |
|
||||
| Canonical project license | root GNU AGPL v3 text; hash checked | Passed |
|
||||
|
||||
Phase 0 is closed. The first hosted CI run is operational evidence rather than a blocker
|
||||
to beginning private Phase 1 contract design, but it must pass before accepting external
|
||||
changes or treating CI as enforced.
|
||||
Phase 0 is closed. Gitea stores source only; the recorded local `make check` result is the
|
||||
authoritative quality gate before pushes and releases.
|
||||
|
||||
@@ -64,3 +64,10 @@ fresh `make verify` and `make audit` result is required.
|
||||
- Rustfmt, workspace/all-target check, three unit tests, and Clippy `-D warnings`: passed
|
||||
- cargo-deny 0.20.2: advisories, bans, licenses, and sources all passed
|
||||
- Phase 0 result: complete
|
||||
|
||||
## Local-only verification policy update
|
||||
|
||||
D-067 supersedes the unexercised hosted-workflow plan. Gitea stores source only;
|
||||
`make check` runs the complete verification and audit gate on the development desktop.
|
||||
Rust 1.97.1 is now both the minimum supported and reviewed compiler. Earlier paragraphs
|
||||
retain the original investigation chronology rather than implying that hosted CI ran.
|
||||
|
||||
@@ -36,10 +36,21 @@ kind = "runtime-library"
|
||||
source = "https://crates.io/crates/uuid"
|
||||
version = "1.24.0"
|
||||
license = "MIT OR Apache-2.0"
|
||||
features = ["serde", "v4"]
|
||||
owner = "project maintainers"
|
||||
update_policy = "explicit identity-contract change after changelog, license, and audit review"
|
||||
release_profile = true
|
||||
|
||||
[[components]]
|
||||
name = "toml"
|
||||
kind = "runtime-library"
|
||||
source = "https://crates.io/crates/toml"
|
||||
version = "1.1.3+spec-1.1.0"
|
||||
license = "MIT OR Apache-2.0"
|
||||
owner = "project maintainers"
|
||||
update_policy = "explicit configuration-contract change after changelog, license, and audit review"
|
||||
release_profile = true
|
||||
|
||||
# Transitive crate versions, sources, and checksums are pinned in Cargo.lock. Their
|
||||
# licenses and sources are enforced by cargo-deny before release.
|
||||
|
||||
|
||||
@@ -31,13 +31,10 @@ cargo run --locked -p kiln-cli -- doctor --json | jq -e \
|
||||
'.schema_version == 1 and .status == "ok" and .private_placeholder == true'
|
||||
```
|
||||
|
||||
The exact-toolchain gate, canonical AGPL license, dependency-free static audits, and
|
||||
cargo-deny 0.20.2 advisory/bans/licenses/sources audit all pass. Phase 0 is closed.
|
||||
A first hosted CI run remains required before accepting external changes or claiming
|
||||
enforced CI, but does not block private Phase 1 contract design.
|
||||
The exact-toolchain gate, canonical AGPL license, static audits, and cargo-deny 0.20.2
|
||||
advisory/bans/licenses/sources audit all pass. Phase 0 is closed. Local `make check`
|
||||
replaces the unused hosted workflow as the authoritative gate.
|
||||
|
||||
`rust-version = "1.85"` records the minimum supported compiler for Edition 2024. The
|
||||
exact reviewed development and CI toolchain remains pinned separately to Rust 1.97.1 in
|
||||
`rust-toolchain.toml`; these controls must not be conflated. `make verify` explicitly
|
||||
checks the active `rustc` version because distro-provided Rust binaries may ignore the
|
||||
Rustup override file.
|
||||
`rust-version = "1.97.1"` and `rust-toolchain.toml` deliberately name the same minimum
|
||||
and reviewed local compiler. `make verify` checks the active `rustc` version before the
|
||||
Rust quality gates.
|
||||
|
||||
@@ -3,28 +3,28 @@ R-001,10,package reconstruction record,planned
|
||||
R-002,8,session acceptance test,planned
|
||||
R-003,9,performance benchmark record,planned
|
||||
R-004,6,controller compatibility matrix,planned
|
||||
R-005,7,provider contract and acceptance tests,planned
|
||||
R-006,2,CLI integration tests,planned
|
||||
R-005,7,Phase 3 Steam discovery evidence plus later provider execution and acceptance tests,in-progress
|
||||
R-006,2,Phase 2 native list search info scan dry-run and launch CLI tests,complete
|
||||
R-007,8,gaming-tool integration tests,planned
|
||||
R-008,8,session lifecycle acceptance test,planned
|
||||
R-009,1,Phase 1A normalized-record contract tests,in-progress
|
||||
R-009,1,Phase 1 identity registry and provider-independent contract tests,complete
|
||||
R-010,5,TTY recovery acceptance test,planned
|
||||
R-011,0,development workflow record,active
|
||||
R-012,1,Phase 1A role-separation contract tests,in-progress
|
||||
R-012,1,Phase 1 role-separation adapter runtime and CLI contract tests,complete
|
||||
R-013,8,profile policy acceptance tests,planned
|
||||
R-014,12,Pegasus adapter tests,post-v1
|
||||
R-015,8,Lean and Ready policy tests,planned
|
||||
R-016,7,adapter capability contract tests,planned
|
||||
R-016,7,Phase 1 contracts Phase 2 native and Phase 3 Steam capability tests,in-progress
|
||||
R-017,8,window-switching acceptance tests,planned
|
||||
R-018,4,lifecycle confidence tests,planned
|
||||
R-018,4,Phase 1 policy and Phase 2 owned native-process lifecycle tests,in-progress
|
||||
R-019,15,vendor launcher tests,post-v1
|
||||
R-020,6,Bluetooth CLI and TUI tests,planned
|
||||
R-021,11,installer destructive VM tests,planned
|
||||
R-022,10,optional recovery profile tests,optional
|
||||
R-023,14,OpenGamepadUI evaluation,post-v1
|
||||
R-024,1,Phase 1A identifier and path adversarial tests,in-progress
|
||||
R-024,1,Phase 1 contracts plus Phase 2 native and Phase 3 Steam adversarial tests,complete
|
||||
R-025,0,source inventory and release review,active
|
||||
R-026,0,supported-platform record,active
|
||||
R-027,0,path and identity architecture review,active
|
||||
R-028,8,release GPU matrix,planned
|
||||
R-029,1,Phase 1A versioned JSON contract tests,in-progress
|
||||
R-029,1,Phase 1 versioned JSON TOML provenance plus config defaults validate explain edit and launch integration tests,complete
|
||||
|
||||
|
@@ -0,0 +1,19 @@
|
||||
# Phase 1 completion evidence
|
||||
|
||||
- Date: 2026-07-18
|
||||
- Requirement IDs: R-009, R-012, R-016, R-018, R-024, R-029
|
||||
- Phase/gate: phase 1 / provider-independent contract completion
|
||||
- Scope: provider/runtime capability interfaces, typed dry-run launch plans, lifecycle
|
||||
confidence policy, structured versioned errors, fixed-precedence versioned TOML with
|
||||
provenance, deterministic mock scenarios, and versioned CLI machine output
|
||||
- Exclusions: real providers, process execution, daemon or IPC, discovery cache, GUI,
|
||||
session supervision, installation management, public stability, and final naming
|
||||
- Commands: `make verify`; `make audit`; `cargo test --workspace --all-targets --locked`;
|
||||
human and JSON `kiln doctor` smoke paths; structured CLI error smoke paths
|
||||
- Expected result: all required Phase 1 mock outcomes and hostile inputs are covered;
|
||||
schemas reject unknown versions and fields; launch arguments never require a shell;
|
||||
lifecycle effects degrade conservatively; configuration precedence is deterministic
|
||||
- Observed result: 40 unit, contract, adversarial, persistence, concurrency, mock, and
|
||||
isolated CLI integration tests passed; formatting, compilation, Clippy with warnings
|
||||
denied, dependency policy, source inventory, schema reports, and smoke checks passed
|
||||
- Result: pass
|
||||
@@ -0,0 +1,16 @@
|
||||
# Phase 1B installation registry evidence
|
||||
|
||||
- Date: 2026-07-18
|
||||
- Requirement IDs: R-009, R-024, R-027
|
||||
- Phase/gate: phase 1 / durable installation identity registry
|
||||
- Scope: exact adapter-fingerprint matching, persistent UUID generation, move aliases,
|
||||
XDG state resolution, bounded strict JSON, locking, atomic replacement, and backup
|
||||
- Exclusions: adapters, launch plans, configuration precedence, providers, CLI changes,
|
||||
and process execution
|
||||
- Commands: `make verify`; `make audit`; human and JSON `kiln doctor` smoke paths
|
||||
- Expected result: identity survives reloads and moves; ambiguous, corrupted, oversized,
|
||||
and unsafe state fails closed without mutation; concurrent resolution creates one entry
|
||||
- Observed result: 20 unit, contract, adversarial, persistence, and concurrency tests
|
||||
passed; Rustfmt, workspace/all-target compilation, Clippy with warnings denied, and
|
||||
cargo-deny advisories/bans/licenses/sources passed
|
||||
- Result: pass
|
||||
@@ -0,0 +1,22 @@
|
||||
# Phase 1 status
|
||||
|
||||
Phase 1 is complete. Its contracts remain private and may change before 1.0 when the
|
||||
schema version and changelog are updated.
|
||||
|
||||
| Required area | Evidence | Status |
|
||||
|---|---|---|
|
||||
| Game and installation identity | Phase 1A contract tests | Passed |
|
||||
| Durable registry and move aliases | Phase 1B persistence and adversarial tests | Passed |
|
||||
| Provider-independent role separation | Core types and adapter/runtime traits | Passed |
|
||||
| Provider and runtime capabilities | Mock adapter and runtime contract tests | Passed |
|
||||
| Versioned JSON and machine output | Serialization and CLI integration tests | Passed |
|
||||
| Argument-safe launch plans | Typed command/argument tests | Passed |
|
||||
| Lifecycle confidence policy | Conservative effect-matrix tests | Passed |
|
||||
| Structured errors | Ambiguity, capability, and version tests | Passed |
|
||||
| Versioned TOML precedence and provenance | Configuration merge and validation tests | Passed |
|
||||
| All required mock outcomes | Deterministic mock scenario tests | Passed |
|
||||
| Adversarial input handling | Identity, registry, launch, config, and CLI tests | Passed |
|
||||
| Repository gates | `make check` | Passed |
|
||||
|
||||
See `evidence-contracts-2026-07-18.md`, `evidence-registry-2026-07-18.md`, and
|
||||
`evidence-completion-2026-07-18.md` for the dated records.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Phase 2 native vertical-slice evidence
|
||||
|
||||
- Date: 2026-07-18
|
||||
- Requirement IDs: R-006, R-009, R-012, R-016, R-018, R-024, R-029
|
||||
- Phase/gate: phase 2 / native discovery through execution
|
||||
- Scope: bounded opt-in manifests, approved Desktop Entry parsing, normalization,
|
||||
durable identity, search, dry-run plans, global user configuration, owned child
|
||||
execution, bounded redacted logs, and failures
|
||||
- Exclusions: arbitrary application scanning, real graphical games, wrappers, Steam,
|
||||
daemon or IPC, cache, installation management, and public stability
|
||||
- Commands: `cargo test --workspace --all-targets --locked`; `make check`;
|
||||
isolated CLI list/search/info/scan/dry-run/launch integration test
|
||||
- Expected result: hostile metadata fails closed; arguments remain discrete; exact IDs
|
||||
and unique names resolve deterministically; ambiguity is structured; child output is
|
||||
logged privately with sensitive output and home paths redacted; unsuccessful launches
|
||||
return structured errors; concurrent configuration edits fail closed
|
||||
- Observed result: 56 workspace tests and strict repository gates passed; the isolated
|
||||
native process executed through the production CLI path and produced a bounded mode-0600
|
||||
log; configuration CLI edits reached native launch-plan runtime, session, environment,
|
||||
and provenance fields
|
||||
- Result: pass
|
||||
@@ -0,0 +1,51 @@
|
||||
# Native game manifests
|
||||
|
||||
Native discovery is opt-in. Place one schema-versioned TOML file per game under
|
||||
`${XDG_CONFIG_HOME:-$HOME/.config}/kiln/native/`. Discovery is authoritative and
|
||||
read-only; it does not scan arbitrary system applications.
|
||||
|
||||
## Direct executable
|
||||
|
||||
```toml
|
||||
schema_version = 1
|
||||
id = "openmw"
|
||||
name = "OpenMW"
|
||||
install_path = "/games/openmw"
|
||||
executable = "/games/openmw/openmw"
|
||||
arguments = ["--replace"]
|
||||
```
|
||||
|
||||
`id` becomes `native:<id>`. `install_path` and `executable` must be absolute,
|
||||
normalized UTF-8 paths. Arguments are passed directly and are never evaluated by a
|
||||
shell.
|
||||
|
||||
## Approved Desktop Entry
|
||||
|
||||
```toml
|
||||
schema_version = 1
|
||||
id = "supertuxkart"
|
||||
name = "SuperTuxKart"
|
||||
install_path = "/usr/bin"
|
||||
desktop_entry = "/usr/share/applications/supertuxkart.desktop"
|
||||
```
|
||||
|
||||
The explicit path is the approval boundary. The adapter accepts Application entries,
|
||||
parses `Exec=` without a shell, expands `%%`, `%c`, `%i`, and `%k`, and omits file/URL
|
||||
codes because no files or URLs are supplied. Unknown field codes, malformed quoting,
|
||||
symlinks, invalid UTF-8, files over 64 KiB, and mixed executable/Desktop Entry sources
|
||||
fail closed.
|
||||
|
||||
## Commands and state
|
||||
|
||||
```text
|
||||
kiln list [--json]
|
||||
kiln search <query> [--json]
|
||||
kiln info <id-or-name> [--json]
|
||||
kiln scan [--provider native] [--no-cache] [--json]
|
||||
kiln launch <id-or-name> --dry-run [--json]
|
||||
kiln launch <id-or-name> [--json]
|
||||
```
|
||||
|
||||
Installation identity remains in the Phase 1 XDG state registry. Native stdout and
|
||||
stderr append to `${XDG_STATE_HOME:-$HOME/.local/state}/kiln/logs/native.log` with mode
|
||||
`0600`. A non-zero child exit returns a structured `launch-failed` error.
|
||||
@@ -0,0 +1,19 @@
|
||||
# Phase 2 status
|
||||
|
||||
Phase 2 is complete.
|
||||
|
||||
| Exit condition | Evidence | Status |
|
||||
|---|---|---|
|
||||
| Explicit native discovery | Manifest and approved Desktop Entry tests | Passed |
|
||||
| Normalization and durable identity | Game-record and move-preservation tests | Passed |
|
||||
| Search and ambiguity handling | Native adapter and CLI integration tests | Passed |
|
||||
| Dry-run planning | Typed launch-plan CLI test | Passed |
|
||||
| Launch execution | Owned `/usr/bin/printf` isolated integration test | Passed |
|
||||
| Logging | Private-mode, bounded, redacted stdout/stderr log tests | Passed |
|
||||
| Configuration | Defaults, validate, explain, safe edits, provenance, and launch-plan integration tests | Passed |
|
||||
| Failure handling | Malformed/non-UTF-8 input, traversal, symlinks, missing install, spawn, and non-zero exit tests | Passed |
|
||||
| Repository gates | `make check` | Passed |
|
||||
|
||||
Real graphical-game execution is not required for this provider-independent native slice
|
||||
and would interrupt the active desktop session. The isolated process test exercises the
|
||||
same execution path without opening a window.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Phase 3 Steam discovery evidence
|
||||
|
||||
- Date: 2026-07-18
|
||||
- Requirement IDs: R-005, R-009, R-012, R-016, R-024, R-027
|
||||
- Phase/gate: phase 3 / read-only Steam discovery
|
||||
- Scope: native Steam-root selection, bounded `libraryfolders.vdf` and
|
||||
`appmanifest_*.acf` parsing, installed-title normalization, stable App ID and
|
||||
installation identity, provider-scoped CLI discovery, and hostile fixtures
|
||||
- Exclusions: Steam process startup, launch plans, game execution, Proton selection,
|
||||
lifecycle tracking, account data, artwork, and Steam configuration mutation
|
||||
- Commands: `cargo test --workspace --all-targets --locked`; `kiln scan --provider
|
||||
steam --json`; `make check`
|
||||
- Expected result: missing/unmounted libraries are skipped; partial installs and known
|
||||
Steam runtime packages are excluded; malformed, duplicate, oversized, invalid-UTF-8,
|
||||
traversal, and symlinked metadata fail closed; installed games normalize without
|
||||
starting Steam
|
||||
- Observed result: 61 automated tests passed; the production CLI parsed the current
|
||||
local Steam metadata and reported 227 installed titles without starting Steam or a
|
||||
game; a real trailing-space display-name case was normalized and retained as a fixture
|
||||
- Result: pass
|
||||
@@ -0,0 +1,16 @@
|
||||
# Phase 3 status
|
||||
|
||||
Phase 3 is complete.
|
||||
|
||||
| Exit condition | Evidence | Status |
|
||||
|---|---|---|
|
||||
| Steam root and library parsing | Bounded KeyValues fixture tests | Passed |
|
||||
| App-manifest parsing | Installed, partial, malformed, oversized, and invalid-UTF-8 fixtures | Passed |
|
||||
| Normalized identity | Stable `steam:<appid>` and deterministic installation UUID tests | Passed |
|
||||
| Read-only provider surface | Discovery/info-only capability and unsupported-launch tests | Passed |
|
||||
| CLI integration | Provider-scoped list, search, info, and scan test | Passed |
|
||||
| Real-system acceptance | Local Steam metadata scan, no client start or game launch | Passed |
|
||||
| Repository gates | `make check` | Passed |
|
||||
|
||||
Steam launch-plan generation, client startup, Proton behavior, and lifecycle tracking remain
|
||||
Phase 4 work.
|
||||
@@ -33,4 +33,4 @@ This directory is the starting point for project planning and later implementati
|
||||
|
||||
## Integrity note
|
||||
|
||||
The numbered topic files are the current v0.15 source of truth. `99_FULL_SPEC_ARCHIVE.md` preserves the complete monolithic v0.4 specification for historical and integrity checks, so it no longer matches the evolving numbered files byte-for-byte.
|
||||
The numbered topic files are the current v0.22 source of truth. `99_FULL_SPEC_ARCHIVE.md` preserves the complete monolithic v0.4 specification for historical and integrity checks, so it no longer matches the evolving numbered files byte-for-byte.
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
> Performance-first Linux gaming appliance with a unified launcher backend
|
||||
|
||||
| **Status** | Implementation — phase 0 complete; phase 1 ready |
|
||||
| **Status** | Implementation — phases 0–3 complete; phase 4 ready |
|
||||
|--------------------|----------------------------------------------------|
|
||||
| **Version** | 0.18 |
|
||||
| **Version** | 0.22 |
|
||||
| **Created** | July 17, 2026 |
|
||||
| **Document type** | Living project specification |
|
||||
| **Current target** | Purpose-built, performance-focused gaming distribution |
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
- Do not split components into separate Git repositories during early development. Avoid submodules and multi-repository coordination while interfaces are still changing.
|
||||
- A component may later move to its own repository with history preserved when it has a stable public contract, independent tests, clear external value, and a genuinely independent release lifecycle.
|
||||
- The repository and task documentation must allow one Codex CLI session started at the repository root to work across the complete project without manual context handoffs.
|
||||
- Bootstrap the repository before feature work with a pinned Rust toolchain, committed dependency lockfile, formatting and lint policy, deny-by-default CI checks, license/security auditing, fixture conventions, changelog/version policy, and an architecture-decision-record directory. The first vertical slice must not invent these piecemeal.
|
||||
- Bootstrap the repository before feature work with a pinned Rust toolchain, committed dependency lockfile, formatting and lint policy, deny-by-default local quality gates, license/security auditing, fixture conventions, changelog/version policy, and an architecture-decision-record directory. The first vertical slice must not invent these piecemeal.
|
||||
|
||||
### 5.1 Layer model
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ Development will use a layered workflow: fast, repeatable testing in virtual mac
|
||||
- A capability advances through four gates: unit tests for pure logic and parsers; contract tests for schemas and adapter behavior; isolated integration tests using fixtures or temporary state; and real-system or VM acceptance tests where applicable.
|
||||
- Work may proceed in parallel only when tasks are demonstrably independent and do not edit the same files or depend on unsettled contracts.
|
||||
- Failures at any gate block the next dependent phase. Exceptions require an explicit documented decision rather than silent scope expansion.
|
||||
- Treat the workspace MSRV and the reviewed development toolchain as separate controls: the MSRV describes compatible source, while local and CI gates verify the exact active compiler selected for reproducible development.
|
||||
- Rust 1.97.1 is both the minimum supported compiler and the reviewed local toolchain. The complete local gate rejects any different active compiler before compilation.
|
||||
- Every internal path dependency declares an exact compatible version as well as its path. Dependency changes update the lockfile, source inventory where applicable, license policy, and advisory/license/source audit evidence in the same task.
|
||||
- Do not preapprove dependency licenses that are not present. Add a license to the allowlist only with the reviewed dependency that requires it.
|
||||
- Each real-system gate records the exact package versions, hardware/driver/kernel tuple, fixture or test account, commands, expected result, observed result, logs, and cleanup. "Launch one game" without a reproducible evidence record is not an acceptance test.
|
||||
@@ -54,7 +54,7 @@ Development will use a layered workflow: fast, repeatable testing in virtual mac
|
||||
|
||||
| **Phase** | **Focus** | **Exit condition** |
|
||||
|-----------|-----------------|------------------------------------------------------------------------------------------------|
|
||||
| 0 | Repository and evidence baseline | Create the Rust workspace and component boundaries using the approved temporary, repository-local Kiln family; establish a rename manifest and automated placeholder scan; pin the toolchain and lockfile; configure formatting, linting, tests, CI, dependency/license/security audits, release/version policy, ADRs, fixture rules, threat model, package/source inventory, test-evidence template, requirement-to-test traceability matrix, and supported-platform decision record. Final collision-checked project/package/crate/executable/configuration/IPC namespaces are required before any public, published, or globally installed artifact, but do not block private implementation. No provider implementation begins before the remaining baseline passes. |
|
||||
| 0 | Repository and evidence baseline | Create the Rust workspace and component boundaries using the approved temporary, repository-local Kiln family; establish a rename manifest and automated placeholder scan; pin the local toolchain and lockfile; configure formatting, linting, tests, a complete local verification entrypoint, dependency/license/security audits, release/version policy, ADRs, fixture rules, threat model, package/source inventory, test-evidence template, requirement-to-test traceability matrix, and supported-platform decision record. Final collision-checked project/package/crate/executable/configuration/IPC namespaces are required before any public, published, or globally installed artifact, but do not block private implementation. No provider implementation begins before the remaining baseline passes. |
|
||||
| 1 | Contracts | Define and aggressively test versioned game/installation identity, the durable installation registry, store/adapter/configuration-owner/execution-backend separation, provider and runtime interfaces, JSON records, launch plans, lifecycle confidence, structured errors, and configuration precedence/provenance using a mock adapter. |
|
||||
| 2 | Native vertical slice | Complete native discovery, normalization, search, dry-run planning, launch execution, logging, and failure handling before beginning Steam execution. |
|
||||
| 3 | Steam discovery | Parse Steam installation and library state through read-only, fixture-driven tests; normalize installed games without launching them. |
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
| D-047 | 2026-07-18 | Confirmed | Reference or reuse ChimeraOS gamescope-session for dedicated frontend sessions where appropriate, but not as the Lean/Ready general multi-window shell. |
|
||||
| D-048 | 2026-07-18 | Confirmed | Add OpenGamepadUI as a post-v1 frontend candidate beside Pegasus without granting its internal catalog or plugins backend authority. |
|
||||
| D-049 | 2026-07-18 | Confirmed | Use Labwc as the leading stacking-compositor prototype while keeping final selection conditional on application, hardware, portal, multi-monitor, and nested-Gamescope tests. |
|
||||
| D-050 | 2026-07-18 | Confirmed | Add a phase 0 repository/evidence baseline before feature work: pinned toolchain and lockfile, CI quality gates, audits, ADRs, fixture rules, threat model, package/source inventory, test-evidence format, and supported-platform record. |
|
||||
| D-050 | 2026-07-18 | Superseded by D-067 | Originally required hosted CI quality gates as part of the phase 0 repository/evidence baseline. D-067 replaces hosted execution with mandatory local verification. |
|
||||
| D-051 | 2026-07-18 | Confirmed | Start with on-demand authoritative discovery and no persistent database; add only a disposable cache or SQLite index when measured latency or live-state requirements justify it, preserving a no-cache path. |
|
||||
| D-052 | 2026-07-18 | Confirmed | Store IDs remain storefront-qualified (`epic:`, `gog:`, `amazon:`) even when Heroic owns configuration; the management client is not part of canonical game identity. |
|
||||
| D-053 | 2026-07-18 | Confirmed | Treat window focus as a compositor/session-adapter capability. Labwc keybindings are the baseline because Labwc intentionally exposes no D-Bus or custom IPC; unsupported programmatic focus is reported honestly. |
|
||||
@@ -117,6 +117,7 @@
|
||||
| D-064 | 2026-07-18 | Confirmed | Use the Ryzen 9 7900X3D/RTX 5070 desktop with a dedicated external USB project drive as the initial bare-metal reference, and require Xbox-family and PlayStation-family controller coverage over both USB and Bluetooth. |
|
||||
| D-065 | 2026-07-18 | Confirmed | Defer technical names until the final public project name can define one related naming system. Permit only clearly temporary repository-local labels during private development, and require the rename manifest, collision screen, and final rename before anything is published or globally installed. |
|
||||
| D-066 | 2026-07-18 | Confirmed | Use the temporary Project Kiln naming family for private development: one repository-local `kiln` CLI with subcommands, plus functional `kiln-core`, `kiln-cli`, `kiln-session`, and `kiln-adapter-*` component labels. Do not create separate `play` or administrative executables. |
|
||||
| D-067 | 2026-07-18 | Confirmed | Keep Gitea as source storage only. Run compilation, tests, Clippy, dependency audits, VM work, and release verification locally on the development desktop through one recorded gate. Rust 1.97.1 is both the minimum supported and reviewed compiler; hosted workflows are not required. |
|
||||
|
||||
## 20. Change log
|
||||
|
||||
@@ -140,6 +141,10 @@
|
||||
| 0.16 | 2026-07-18 | Began private phase 0 implementation; pinned Rust 1.97.1 after the upstream miscompilation-fix release, established the initial workspace/evidence baseline, and changed project status from planning to implementation. |
|
||||
| 0.17 | 2026-07-18 | Closed phase 0 after the exact Rust toolchain, formatting, compilation, unit tests, Clippy, canonical AGPL license, workspace/source checks, temporary-name scan, and cargo-deny advisory/bans/license/source gates all passed. |
|
||||
| 0.18 | 2026-07-18 | Promoted Phase 0 lessons into binding development rules: distinguish MSRV from the enforced toolchain pin, version local path dependencies, keep license allowlists evidence-based, audit pinned development tools, and use Phase 0 completion as the Codex CLI handoff point with a root `AGENTS.md`. |
|
||||
| 0.19 | 2026-07-18 | Completed phases 1 and 2: versioned provider-independent contracts, durable installation identity, native manifest and approved Desktop Entry discovery, normalized search and resolution, dry-run planning, owned process execution, private logging, structured failures, and their automated evidence. |
|
||||
| 0.20 | 2026-07-18 | Replaced the unused hosted-CI plan with mandatory local verification, made Rust 1.97.1 the minimum and reviewed compiler, and scheduled closure of the remaining configuration and adversarial-test gaps before phase 3. |
|
||||
| 0.21 | 2026-07-18 | Closed the pre-phase-3 gaps with local configuration defaults, validation, explanation and safe edits; native launch-plan configuration integration; removal of the obsolete file-lock dependency; bounded redacted process logs; and expanded adversarial tests. |
|
||||
| 0.22 | 2026-07-18 | Completed Phase 3 with bounded read-only Steam library and app-manifest parsing, stable App ID identities, provider-scoped CLI discovery, adversarial fixtures, and a non-launching check against the local Steam installation. |
|
||||
|
||||
## 21. Reference notes
|
||||
|
||||
|
||||
Reference in New Issue
Block a user