Skip to content

merging-and-referencing-are-enforced — Merging and referencing are enforced: every pull request carries its metadata, every reference resolves, every number is taken once

Merging and referencing are projections, typed commands and gates: every pull request carries its metadata from the records, every reference resolves on master, every number is taken once.

PLANNED 0 of 10 issues done

ready
3
blocked
7
active
0
verify
0
done
0
cancelled
0

Problem

A pull request carries only what its author typed, and the repository labels hold, collision:accepted and ci:yielded are named in code but declared nowhere. plan next offers work that already sits in an open pull request. A milestone dependency holds every issue of the milestone, 26 of them at 355a0cee79a with no unfinished dependency of their own, and nothing names them. Issue ids have no allocator. A GitHub issue created by hand with a record title is adopted by github-sync. A commit need not name its issue. The landing duties of a train member are a table in docs/INTEGRATION.md.

Outcome

Merging and referencing are projections, typed commands and gates: every pull request carries its metadata from the records, every reference resolves on master, every number is taken once.

Current state

scripts/github-sync projects issues, milestones and four label families (majordomus, priority, status, execution) from the trunk only and never touches a pull request; plan.next ranks READY by stamps alone (plan.rs:567-580); the milestone gate blocks every issue of a blocked milestone (plan.rs:1110-1130); scripts/case-numbers and lib/adr.sh each survey tree, worktrees, refs and board for one identifier; commit.validate has no rule about naming an issue; nothing declares the label vocabulary.

Desired state

Every criterion of the intent is carried by an issue here and proven by its test.

Scope

  • scripts/github-sync
  • scripts/ci/github-check
  • scripts/ci/collision-gate
  • scripts/case-numbers
  • lib/adr.sh
  • apps/majordomus-cli/src/plan.rs
  • apps/majordomus-cli/src/commit
  • apps/majordomus-cli/src/convergence
  • docs/INTEGRATION.md
  • CONTRIBUTING.md

Acceptance criteria

  • Every open pull request carries labels, the GitHub milestone of the issue it serves, an assignee and a managed body region of Refs links, projected from the records, with no closing keyword
  • An issue whose work sits in an open pull request or under a live branch claim is never the answer of plan next or plan ready
  • plan validate names every issue held only by its milestone gate, and an issue may declare that it needs nothing from its milestone dependencies
  • A pull request naming a record id that resolves neither on master nor in itself is refused, and convergence reports stranded records
  • Issue ids, ADR numbers and case numbers come from one survey, and two branches adding one number under different names are refused
  • A GitHub issue is created only by github-sync, an issue nobody projected is reported on GitHub, and an issue without a record marker is never adopted
  • A commit naming no issue or carrying a closing keyword is refused outside the narrow exemptions, judged after a recorded boundary
  • Every served page names only versions of the release model
  • Each train member is judged on its merged tree, and a fix member carries a test and its coverage
  • Every label and convention is declared once, projected and checked

Validation

  • bin/majordomus plan validate
  • bin/majordomus intent validate

Evidence required

  • pr_metadata_projected
  • work_in_review_is_not_next
  • milestone_gate_is_explained
  • references_resolve_on_master
  • one_allocator
  • issues_come_from_the_projection
  • every_commit_names_its_issue
  • one_version_everywhere
  • merged_result_is_judged
  • conventions_declared_once

Issues

Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.

issuestatuswavedepends ontitle
I3970 BLOCKED 1 I3979 Every pull request carries its metadata, projected from the trunk's records: labels, milestone, assignee and Refs links, never a closing keyword
I3971 BLOCKED 4 I3754 Work in an open pull request or under a live branch claim is reported taken and is never the next issue
I3972 BLOCKED 1 I3757 plan validate names every issue held only by its milestone gate, and an issue may declare it needs nothing from the milestone's dependencies
I3973 READY 0 — A record is referenced only once it is on master: a pull request naming an unlanded id is refused, and convergence reports stranded records
I3974 READY 0 — One allocator surveys every number (issue ids, ADR numbers, case numbers), and two branches adding one number under different names are refused
I3975 BLOCKED 2 I3970, I3979 GitHub issues are created only by github-sync: an agent's raw create is refused, an issue nobody projected is reported on GitHub, and an unmarked issue is never adopted
I3976 BLOCKED 2 I3973, I3915 Every commit names the issue it serves, outside narrow machine-verifiable exemptions, with the earlier history as a baseline
I3977 BLOCKED 1 I3449 Every page a deployment serves names only versions of the release model, checked after the deploy
I3978 BLOCKED 2 I3915 Each train member is judged on its merged tree, and a fix member joins only with a test and its changed-code coverage
I3979 READY 0 — Every label, branch prefix and commit type is declared once, projected to GitHub, described in CONTRIBUTING and checked

The graph

merging-and-referencing-are-enforced dependency graphfrom .ai/repo/project
flowchart LR
    I3970["I3970<br/>Every pull request carries its metadata, projected from the trunk's records: labels, milestone, assignee and Refs links, never a closing keyword"]:::blocked
    I3971["I3971<br/>Work in an open pull request or under a live branch claim is reported taken and is never the next issue"]:::blocked
    I3972["I3972<br/>plan validate names every issue held only by its milestone gate, and an issue may declare it needs nothing from the milestone's dependencies"]:::blocked
    I3973["I3973<br/>A record is referenced only once it is on master: a pull request naming an unlanded id is refused, and convergence reports stranded records"]:::ready
    I3974["I3974<br/>One allocator surveys every number (issue ids, ADR numbers, case numbers), and two branches adding one number under different names are refused"]:::ready
    I3975["I3975<br/>GitHub issues are created only by github-sync: an agent's raw create is refused, an issue nobody projected is reported on GitHub, and an unmarked issue is never adopted"]:::blocked
    I3976["I3976<br/>Every commit names the issue it serves, outside narrow machine-verifiable exemptions, with the earlier history as a baseline"]:::blocked
    I3977["I3977<br/>Every page a deployment serves names only versions of the release model, checked after the deploy"]:::blocked
    I3978["I3978<br/>Each train member is judged on its merged tree, and a fix member joins only with a test and its changed-code coverage"]:::blocked
    I3979["I3979<br/>Every label, branch prefix and commit type is declared once, projected to GitHub, described in CONTRIBUTING and checked"]:::ready
    I3970 --> I3975
    I3973 --> I3976
    I3979 --> I3970
    I3979 --> I3975
    classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
    classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
    classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
    classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
    classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
    classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px

Canonical record: .ai/repo/project/milestones/merging-and-referencing-are-enforced.yaml. Read it back with majordomus plan show merging-and-referencing-are-enforced.

Searches the titles and descriptions of every page this site publishes.