I2691 — start, check, finish and the commit and push hooks refuse a change from a session that has not joined
Make the derived state of I2690 binding: a non-trivial change from a session that is announced nowhere, or is behind the trunk by more than the policy's bound, is refused with the command that repairs it, and a read never is.
BLOKOVÁNO vlna 1 · p0 · profil implementation · běží samostatně
Součást development-runtime — The runtime has a development surface.
Blocked. This issue cannot start until I2690 is done. The status is derived from that, not declared.
Cíl
Make the derived state of I2690 binding: a non-trivial change from a session that is announced nowhere, or is behind the trunk by more than the policy's bound, is refused with the command that repairs it, and a read never is.
Proč
The owner, 2026-10-13, after a session worked three hours stale and unannounced in a cluster of nineteen workers: this must never happen again; it must be formalized, derived, inferred, enforced, in .ai, announced, a hard requirement, on GitHub Pages, tested, documented and on the landing page. See ADR 0226.
Aktuální stav
Measured on master f0696ec535 on 2026-10-13: nothing refuses a stale or unannounced session; on the owner's Mac the git hooks were not installed at all (core.hooksPath unset), and doctor said so only as six wiring failures nobody read.
Cílový stav
start, check and finish carry the join doctrine; the pre-commit and pre-push hooks run it; doctor reports a machine whose hooks are not wired as one finding with the single command that wires them; an unreachable remote, a closed mesh and a mesh with no server never refuse.
Rozsah
- apps/majordomus-cli/src/doctrine/
- apps/majordomus-cli/src/capability/builtin/
- lib/doctor.sh
- .githooks/
- .ai/repo/rules/project/a-session-joins-the-cluster-before-it-works.v2.md
Mimo rozsah
- Deriving the facts: that is I2690
- A refusal of reads, of context, of mesh or of doctor
Závislosti
Kritéria přijetí
- An unannounced session's commit is refused naming the announcing command, and the same session's context and mesh peers are not
- A session behind the bound is refused at push and told to merge the trunk
- An offline machine is told the check is unverified and proceeds
- The rule is raised to blocking as version 2 with test 3004 as its decision and reviewed_because removed
Validace
- bin/majordomus plan validate
- majordomus rules list
- MJ_TEST_JOBS=2 bash test/run.sh 3010_a_session_joins_the_cluster
Požadované důkazy
- join_refusal_case_3004
- rule_v2_blocking
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I2691.yaml. Read it back with majordomus plan show I2691.