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

I2300

A head is judged against what it changes, not against GitHub's live state

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
0
Waiting on
none
Holds back
none
Behind it in all
0
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 I2300

majordomus plan verify I2300

majordomus plan done I2300

What it is

Objective
Make scripts/ci/github-check report as pending, and not refuse, the drift an apply would write on the records a head changed since its merge base, and on the trunk on the records that changed in a landing younger than a declared window; refuse the same drift on every other record, and on the trunk past the window with the remedy named.
Why
The gate github-projection runs scripts/github-sync --check against live GitHub and refuses every record that is behind. The adapter projects only the trunk and nothing applies it automatically, so a pull request that edits an already projected record is red from birth and cannot go green on its own head. Measured on 2026-10-10: pull request #855 changed one line of I1900 and failed with 'DRIFT behind issue I1900 (#753) body is behind the canonical record'; pull request #820 failed with '8 record(s) state'. The only way out was to not edit the record. Had such a change landed, the trunk's own ci would have been red until somebody applied by hand, which blocks the next release tag. The ratcheting baseline covers only missing and adopt, and there is no label or base comparison for behind.
Now
scripts/ci/github-check refuses behind, state, milestone and closed on every run, whatever the run is of. scripts/github-sync --apply is run by hand from master.
Wanted
On a head, drift on a record the head changed is reported PENDING with the words 'projected after merge'. On the trunk it is PENDING while the landing is younger than apply.window in .ai/repo/ci/github.yaml, and refused afterwards with scripts/github-sync --apply named. A record counts as changed when its file or its rendering differs. A change that cannot be measured refuses as before. docs/INTEGRATION.md tells the executor to apply after such a landing.
Done when
unknown: the record declares no `completion`
Risk
unknown: the record declares no `risk`

Acceptance

  • A pull request head that changes a projected record passes the gate with that record reported PENDING
  • Drift on a record the head did not change is refused on the same run
  • The trunk reports a landed change PENDING inside the declared window and refuses it past the window, naming scripts/github-sync --apply
  • The window is read from .ai/repo/ci/github.yaml and the gate carries no copy of it
  • A base or a window that cannot be read refuses what the gate refused before
Validation
bin/majordomus plan validatebash test/run.sh 1038_a_head_is_judged_against_what_it_changes 97_github_gate 45_github_projection
Evidence required
pending_class_casemutations_fail_the_case
Evidence present
pending_class_casemutations_fail_the_case

Scope

Touches
scripts/ci/github-check.ai/repo/ci/github.yaml.ai/repo/ci/README.md.ai/repo/rules/project/github-projection-gated.v1.md.ai/repo/automation/inventory.jsonltest/cases/1038_a_head_is_judged_against_what_it_changes.shdocs/INTEGRATION.mddocs/PLANNING.mddocs/CLAIMS.yamldocs/claims/projected-record-edit-is-landable.mddocs/claims/github-projection-gated.md
Not
unknown: the record declares no `non_scope`
Depends on
none
Priority
p1
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-10
Updated
2026-10-14T08:02:42Z
Started
2026-10-14T08:02:34Z
Verified
unknown: the record declares no `verified_at`
Completed
2026-10-14T08:02:42Z

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.