Skip to content
Cockpit0.29.0
A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:06:01Z by majordomus 0.29.0. Nothing on this page is read again. See it live

I2129

The lease timings the policy declares are the ones the mcp and serve elections use

Where it stands

devtask.issue
Readiness
complete completion is recorded and every required evidence token is present
Status
DONE
Can start
not now
Milestone
Milestone status
ACTIVE
Wave
0
Waiting on
none
Holds back
Behind it in all
1
Evidence
1 of 1
A move writes the repository: it stamps one field of this issue's record and appends one event to the ledger, and a commit will carry both.
The same moves from a terminal

majordomus plan start I2129

majordomus plan verify I2129

majordomus plan done I2129

What it is

Objective
Load the policy before mcp and serve elect, make every reader of a lease timing read the declared value, and declare the idle timeout beside the other server timings.
Why
Timings (apps/majordomus-cli/src/lease.rs:89-191) is a OnceLock filled with compiled defaults on first read, and declare_timings is called only from LoadedPolicy::load (apps/majordomus-cli/src/policy.rs:364). In mcp and serve, Lease::keep_alive (apps/majordomus-cli/src/lease.rs:1043) and inspect read the timings before App::load, which does not load the policy (apps/majordomus-cli/src/commands/mcp.rs:173-174, apps/majordomus-cli/src/commands/serve.rs:72,89-90), so the later declaration is a silent no-op. Only env enter loads the policy first (apps/majordomus-cli/src/commands/env.rs:548). standing_of (apps/majordomus-cli/src/capability/builtin/server.rs:370,386) and the spawn claim (apps/majordomus-cli/src/commands/serve.rs:330,358) use the compiled BIND_GRACE whatever is declared. docs/MCP.md:284-303 and the comment at .ai/repo/policy.yaml:335-339 say the contest is judged by the declaration. apps/majordomus-cli/tests/lease_declared.rs calls declare_timings directly and case 354_a_lease_contest_is_judged_by_a_declaration.sh checks the schema only. Latent today because the declared values equal the defaults. The idle timeout DEFAULT_IDLE_SECONDS (apps/majordomus-cli/src/cli.rs:3427) is a compiled constant absent from policy.yaml server:. Baseline audit of 2026-10-09 at master 1fb8d6be44, lifecycle gap 6 and drift 1.
Now
Declared lease timings reach env enter only; mcp, serve, standing_of and the spawn claim use compiled values.
Wanted
mcp and serve read the policy before their first election, so the declared timings are the ones the election uses; standing_of and the spawn-claim bound read lease::timings() rather than the compiled BIND_GRACE and JOIN_TIMEOUT. The deferred part, the idle timeout as a declared server key, is I2701.
Done when
unknown: the record declares no `completion`
Risk
unknown: the record declares no `risk`

Acceptance

  • A real-process test that declares a busy grace different from the default observes the election wait the declared value, in both mcp and serve
  • No reader of a lease timing names a compiled constant directly
Validation
bin/majordomus plan validatecargo test --test lease_declaredMJ_TEST_JOBS=4 bash test/run.sh 354_a_lease_contest_is_judged_by_a_declaration
Evidence required
declared_timings_reach_the_election_test
Evidence present
declared_timings_reach_the_election_test

Scope

Touches
apps/majordomus-cli/src/lease.rsapps/majordomus-cli/src/policy.rsapps/majordomus-cli/src/commands/mcp.rsapps/majordomus-cli/src/commands/serve.rsapps/majordomus-cli/src/capability/builtin/server.rsapps/majordomus-cli/src/cli.rs.ai/repo/policy.yamlshare/schemas/majordomus/policyapps/majordomus-cli/tests/lease_declared.rstest/cases/354_a_lease_contest_is_judged_by_a_declaration.shdocs/MCP.md
Not
unknown: the record declares no `non_scope`
Depends on
none
Priority
p2
Profile
implementation
Parallel safe
false
Owner
unknown: the record declares no `owner`

The work so far

Branches
none
Merged
none
Commits
0
Trunk
master
Sessions
none
Created
2026-10-09
Updated
2026-10-14T12:16:27Z
Started
2026-10-14T12:15:47Z
Verified
unknown: the record declares no `verified_at`
Completed
2026-10-14T12:16:27Z

Synchronisation

Adapter
scripts/github-sync
Repository
unknown: the derived plan's header carries no repository
External issue
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
State there
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it

Findings

Nothing is wrong with these records.