I2129 — Časování leasů, které politika deklaruje, jsou ta, která používají volby mcp a serve
Načíst politiku před mcp a serve elect, zajistit, aby každý čtenář časování lease četl deklarovanou hodnotu, a deklarovat časový limit nečinnosti vedle ostatních časování serveru.
HOTOVO vlna 0 · p2 · profil implementation · běží samostatně
Cíl
Načíst politiku před mcp a serve elect, zajistit, aby každý čtenář časování lease četl deklarovanou hodnotu, a deklarovat časový limit nečinnosti vedle ostatních časování serveru.
Proč
Timings (apps/majordomus-cli/src/lease.rs:89-191) je OnceLock naplněný zkompilovanými výchozími hodnotami při prvním čtení a declare_timings se volá jen z LoadedPolicy::load (apps/majordomus-cli/src/policy.rs:364). V mcp a serve čtou Lease::keep_alive (apps/majordomus-cli/src/lease.rs:1043) a inspect timings před App::load, který politiku nenačítá (apps/majordomus-cli/src/commands/mcp.rs:173-174, apps/majordomus-cli/src/commands/serve.rs:72,89-90), takže pozdější deklarace je tichý no-op. Politiku načte jako první jen env enter (apps/majordomus-cli/src/commands/env.rs:548). standing_of (apps/majordomus-cli/src/capability/builtin/server.rs:370,386) a spawn claim (apps/majordomus-cli/src/commands/serve.rs:330,358) používají zkompilovaný BIND_GRACE, ať je deklarováno cokoli. docs/MCP.md:284-303 a komentář na .ai/repo/policy.yaml:335-339 říkají, že spor se posuzuje podle deklarace. apps/majordomus-cli/tests/lease_declared.rs volá declare_timings přímo a případ 354_a_lease_contest_is_judged_by_a_declaration.sh kontroluje jen schéma. Dnes latentní, protože deklarované hodnoty se rovnají výchozím. Idle timeout DEFAULT_IDLE_SECONDS (apps/majordomus-cli/src/cli.rs:3427) je zkompilovaná konstanta chybějící v policy.yaml server:. Audit základní linie z 2026-10-09 na masteru 1fb8d6be44, mezera životního cyklu 6 a drift 1.
Aktuální stav
Deklarované časování zámku dosáhne jen env enter; mcp, serve, standing_of a claim spawnu používají zkompilované hodnoty.
Cílový stav
mcp a serve čtou politiku před svou první volbou, takže deklarované časování je to, které volba používá; standing_of a mez spawn-claim čtou lease::timings() místo zkompilovaných BIND_GRACE a JOIN_TIMEOUT. Odložená část, časový limit nečinnosti jako deklarovaný klíč serveru, je I2701.
Rozsah
- apps/majordomus-cli/src/lease.rs
- apps/majordomus-cli/src/policy.rs
- apps/majordomus-cli/src/commands/mcp.rs
- apps/majordomus-cli/src/commands/serve.rs
- apps/majordomus-cli/src/capability/builtin/server.rs
- apps/majordomus-cli/src/cli.rs
- .ai/repo/policy.yaml
- share/schemas/majordomus/policy
- apps/majordomus-cli/tests/lease_declared.rs
- test/cases/354_a_lease_contest_is_judged_by_a_declaration.sh
- docs/MCP.md
Závislosti
Žádné. Tento úkol je kořenem grafu.
Co na tom čeká
Kritéria přijetí
- Test se skutečným procesem, který deklaruje jiný busy grace než výchozí, pozoruje, že volba čeká deklarovanou hodnotu, v mcp i serve
- Žádný čtenář časování lease nejmenuje přímo zkompilovanou konstantu
Validace
- bin/majordomus plan validate
- cargo test --test lease_declared
- MJ_TEST_JOBS=4 bash test/run.sh 354_a_lease_contest_is_judged_by_a_declaration
Požadované důkazy
- declared_timings_reach_the_election_test
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| declared_timings_reach_the_election_test | test | cargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --test lease_policy_process | test result: ok. 3 passed; 0 failed: serve a mcp čekají každý deklarovanou dobu obsazenosti; peers.rs a server.rs čtou lease::timings() (běh 2026-10-14 12:00-12:15Z na masteru 2ca25bb9cf plus tato změna) | 2ca25bb |
Časová osa
- zahájeno
- 2026-10-14T12:15:47Z
- ověřeno
- —
- dokončeno
- 2026-10-14T12:16:27Z
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Kanonický záznam: .ai/repo/project/issues/I2129.yaml. Načtěte ho zpět pomocí majordomus plan show I2129.