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

I1999

A tracked file a hook regenerates does not refuse a task that never touched it

Where it stands

devtask.issue
Readiness
ready no dependency and no gate holds it; nobody has started it
Status
READY
Can start
startable
Milestone
Milestone status
ACTIVE
Wave
0
Waiting on
none
Holds back
none
Behind it in all
0
Evidence
0 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 I1999

majordomus plan verify I1999

majordomus plan done I1999

What it is

Objective
Let a repository declare the tracked paths its own tooling rewrites, have `check` and `finish` judge them as the machine's and not the worker's, and make the scope finding and the note finding say what settles them before `finish` refuses.
Why
Reported by an adopter session (progresus-isir) on 2026-10-08 with majordomus 0.14.0: seven tracked files are rewritten by a post-checkout hook on every checkout, so every task showed them as changed outside its scope and `check` failed on work that never touched them. The interim advice — name the seven files in --scope — was measured to work: 0 failing in `check` over three tasks and two `finish --outcome completed` (t-20261008121807-0d62, t-20261008123637-b728). Two things still tripped the adopter. `finish` also refused on majordomus.note-integrity while `check` had shown the note line only as INFO, so nothing said a handover had to exist first. And the scope finding gives no pointer to a remedy: 'restore the file' is not one where a hook rewrites it at once.
Now
The scope check treats every changed tracked path alike. A path a hook regenerates must be named in each task's --scope by hand. The scope finding names the path and nothing that settles it. `check` reports a missing completion note as INFO and `finish` refuses on it.
Wanted
A repository declares its machine-regenerated tracked paths once, with the reason, and the scope check reports a change to one of them as the machine's: named, not failing, and not silently dropped. A scope finding on any other path says the two remedies — name the path in the scope, or stop tracking the file — and does not advise restoring a file the repository declares regenerated. `check` reports what `finish` will refuse over a note or a handover with the same severity `finish` uses, and names the command that writes it.
Done when
unknown: the record declares no `completion`
Risk
unknown: the record declares no `risk`

Acceptance

  • A repository that declares a regenerated path passes `check` on a task whose scope does not name it, and the report names the path and the declaration that covers it
  • A change to an undeclared path outside the scope still fails `check`, and the finding names both remedies
  • A declaration without a reason is refused
  • Whatever `finish --outcome completed` refuses over a note or a handover, `check` reports as failing beforehand with the command that settles it
  • The shell tool and the Rust executable give the same verdict for the same tree
Validation
bin/majordomus plan validateMJ_TEST_JOBS=4 bash test/run.sh <the case this issue adds>
Evidence required
regenerated_paths_scope_casecheck_reports_what_finish_refuses_case
Evidence present
unknown: the record carries no `evidence` entries

Scope

Touches
bin/majordomuslibapps/majordomus-cli/srcshare/skeletondocs/CLI.mddocs/ADOPTION.mdtest/cases
Not
unknown: the record declares no `non_scope`
Depends on
unknown: the record declares no `depends_on`
Priority
p2
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-08
Updated
2026-10-08
Started
unknown: the record declares no `started_at`
Verified
unknown: the record declares no `verified_at`
Completed
unknown: the record declares no `completed_at`

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

LevelCodeMessageReproduce
WARNscope_conflictshares lib with I2059; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares lib with I2114; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2132; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2140; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2282; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2410; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2411; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2412; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares lib with I2413; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2414; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2415; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2653; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2670; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares lib with I2694; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2695; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2697; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares lib with I2713; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares lib with I2714; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2716; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2717; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares lib with I2718; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2720; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2723; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2731; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares lib with I2734; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2740; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares lib with I2742; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2747; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares lib with I2760; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares apps/majordomus-cli/src with I2770; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases with I2786; they may not run concurrentlymajordomus plan validate