I2703 — The mesh cooperation rule lists the hello checks in the order the code runs them, and a test names that order
Bring rule project.mesh-cooperation-is-authenticated to the check order accept_hello runs, with the nonce cache last and the recipient check before it, as a new version of the blocking rule, and hold the code to it with a test.
READY wave 1 · p1 · implementation profile · runs alone
Ready. Every dependency is done, so majordomus plan start I2703 will be accepted.
Objective
Bring rule project.mesh-cooperation-is-authenticated to the check order accept_hello runs, with the nonce cache last and the recipient check before it, as a new version of the blocking rule, and hold the code to it with a test.
Why
Split from I2132 on 2026-10-14. I2132 bound each hello to its recipient and made docs/MESH.md state the order the code checks in, and its desired_state said 'Not done here' of the rule, which still lists the nonce fourth; correcting it is a version bump of a blocking rule that scripts/ci/mesh-check and case 301 name by file. Its acceptance criteria still required rule and code to agree, so it could never close. Baseline audit of 2026-10-09 at master 1fb8d6be44, mesh drift 1.
Current state
.ai/repo/rules/project/mesh-cooperation-is-authenticated.v1.md says the answerer verifies 'in order' signature, timestamp, nonce, protocol, self, repository, trust, and has no recipient check. docs/MESH.md lists the ten checks in the code's order, with the recipient (misaddressed) seventh and the nonce cache last, while its diagram still reads 'signature · freshness · nonce · protocol · self · repository · trust'. scripts/ci/mesh-check and test/cases/301_the_mesh_stays_one_subsystem.sh name the v1 rule file. No test names the order Cooperation::accept_hello (apps/majordomus-cli/src/mesh/cooperation.rs) checks in.
Desired state
A new version of the rule states the order accept_hello checks in, the recipient check included and the nonce cache last with its reason; scripts/ci/mesh-check, case 301 and the docs/MESH.md diagram follow the new version; a test sends hellos that fail two checks at once and asserts the refusal of the earlier one, for each adjacent pair the rule orders.
Scope
- .ai/repo/rules/project
- scripts/ci/mesh-check
- test/cases/301_the_mesh_stays_one_subsystem.sh
- apps/majordomus-cli/src/mesh/cooperation.rs
- apps/majordomus-cli/tests/mesh_cooperation.rs
- docs/MESH.md
Out of scope
- The recipient field of a hello and the misaddressed refusal, which I2132 delivered
Dependencies
Acceptance criteria
- The rule's check order and the code's check order are the same, and a test names the order
Validation
- bin/majordomus plan validate
- cargo test --lib mesh::cooperation
- scripts/ci/mesh-check
- MJ_TEST_JOBS=4 bash test/run.sh 301_the_mesh_stays_one_subsystem
Evidence required
- hello_check_order_test
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I2703.yaml. Read it back with majordomus plan show I2703.