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

I1402

A finding says which of six states it found, and the state that could hide a person's edit is no longer one of them

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
VERIFY
Wave
1
Waiting on
none
Holds back
Behind it in all
4
Evidence
2 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 I1402

majordomus plan verify I1402

majordomus plan done I1402

What it is

Objective
Derive a typed state for every projected record from two independent questions — has a person rewritten the generated region since it was posted, and has the canonical record moved since — and report the answer instead of collapsing both into one word.
Why
The check reported `missing` and `body` and nothing else, and the second word hid a defect. The adapter advertises that it will not overwrite what a person wrote inside the generated region, and it decided that by comparing the remote's marker hash to the canonical hash: if they differed it returned early. So the protection was blind in exactly the case it is for. A person edits the region, the plan then moves, and the next --apply splices canonical text over their words without --force and without a word of warning. The marker records what the body was posted as, so the question was always answerable against the marker rather than against the canonical record.
Now
region_edited() returned false whenever the canonical record had moved, so `edited` was unreachable in the common case. Findings about a remote record claiming an unknown canonical id were printed from inside a pipeline, therefore from a subshell, so the drift count never saw them and --check could not fail on one.
Wanted
insync, behind, edited, conflict, adopt and missing for a canonical record, and unmanaged for a remote one. --apply rewrites behind and adopt, and refuses edited and conflict without --force. Every finding counts toward the exit code.
Done when
unknown: the record declares no `completion`
Risk
Low. Every distinction is derived from bytes both sides already carry.

Acceptance

  • A person's edit is detected whether or not the canonical record has moved since, proved by a case for each
  • A record whose region was edited and whose canonical record also moved is reported as conflict, and --apply refuses it without --force
  • An issue claiming a canonical id this repository does not have is reported and counted, so --check fails on it
  • Every state is proved by a case that builds the remote as a fixture, offline
Validation
bash test/run.sh 45_github_projectionscripts/github-sync --check
Evidence required
states_distinguishededit_protection_holds
Evidence present
states_distinguishededit_protection_holds

Scope

Touches
scripts/github-synctest/cases/45_github_projection.sh
Not
Distinguishing a record never created from one deleted on GitHub, which is not derivable from either side without a second store of what was created; `missing` states what is observable, which is that there is no counterpart nowResolving a conflict automatically
Depends on
Priority
p1
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-09-09
Updated
2026-09-09T17:20:44Z
Started
2026-09-09T17:20:34Z
Verified
2026-09-09T17:20:41Z
Completed
2026-09-09T17:20:44Z

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.