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

I1981

A command's effect class is declared per subcommand and flag, and live scenarios judge the whole argv

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
4 of 2
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 I1981

majordomus plan verify I1981

majordomus plan done I1981

What it is

Objective
Declare read-only or state-mutating per subcommand and per flag in share/commands.yaml where a command has both, and make live use-case validation and runs judge the full argument vector against that declaration.
Why
share/commands.yaml classes `knowledge` state-mutating as a whole, so live scenarios refuse its read-only edges, nodes and sources. OSCILLA cb79d27 had to copy its tracked tree into a fixture to prove a knowledge edge. It classes `check` read-only with writes [], yet `check --checkpoint` writes .ai/local/state/current.yaml, so a live step can change state while being admitted as read-only.
Now
lib/usecase.sh:383-386 admits a live step when the top-level command's class is read-only (commands.sh:27). The registry has no per-subcommand or per-flag effect.
Wanted
The registry carries an effect per subcommand and flag where they differ. lib/usecase.sh validate and run refuse a live step whose argv reaches a writing path and admit one that only reads. doctor reconciles the declaration with the dispatch as it does today.
Done when
unknown: the record declares no `completion`
Risk
unknown: the record declares no `risk`

Acceptance

  • A live scenario step `knowledge edges` validates and runs
  • A live scenario step `check --checkpoint` is refused at validate time, naming the flag
  • The command-registry reconciliation in doctor covers the new per-subcommand declarations
Validation
bin/majordomus plan validateMJ_TEST_JOBS=4 bash test/run.sh <the case this issue adds>
Evidence required
live_scenario_reads_knowledgelive_scenario_refuses_writing_flag
Evidence present
live_scenario_reads_knowledgelive_scenario_refuses_writing_flaglive_scenario_reads_knowledgelive_scenario_refuses_writing_flag

Scope

Touches
share/commands.yamllib/usecase.shlib/commands.shdocs/CLI.mdtest/cases/359_live_scenarios.shtest/fixtures/commands
Not
unknown: the record declares no `non_scope`
Depends on
unknown: the record declares no `depends_on`
Priority
p0
Profile
implementation
Parallel safe
true
Owner
unknown: the record declares no `owner`

The work so far

Branches
none
Merged
none
Commits
0
Trunk
master
Sessions
none
Created
2026-10-04
Updated
2026-10-14T07:39:39Z
Started
2026-10-11T05:05:14Z
Verified
2026-10-11T05:05:29Z
Completed
2026-10-14T07:39:39Z

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.