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

project.advisors-are-optional@1

Advisors are optional; reasoning, governance and CI never depend on one

What it is

URI
majordomus://rule/project.advisors-are-optional@1
Kind
rule
Identity
project.advisors-are-optional@1
Path
.ai/repo/rules/project/advisors-are-optional.v1.md
Provenance
declared
Media type
text/markdown
As a capability
rule.project.advisors-are-optional@1

Front matter

{
  "id": "project.advisors-are-optional",
  "version": 1,
  "kind": "rule",
  "title": "Advisors are optional; reasoning, governance and CI never depend on one",
  "description": "No external or local model is required for Majordomus to boot, enter a repository, run doctor, generate, validate or test, or for a session to reason, decide, implement and validate. An advisor's absence, timeout, rate limit or refused credential is recorded state that changes how much independent review is available, never whether the work can be done.",
  "statement": "Name advisory capabilities, never advisors, in reasoning code; derive availability from presence and recorded outcomes; treat no advisor as an ordinary plan; and keep every model credential out of CI.",
  "status": "active",
  "class": "blocking",
  "depends_on": [
    "project.empty-is-not-failure@1"
  ],
  "tags": [
    "reasoning",
    "advisors",
    "providers",
    "ci"
  ],
  "x-majordomus": {
    "tests": [
      "test/cases/730_reasoning_works_with_no_advisor.sh",
      "test/cases/731_advisor_transport_contract.sh",
      "test/cases/733_advisor_failure_and_recovery.sh",
      "test/cases/735_a_new_advisor_needs_no_consumer_edit.sh"
    ]
  }
}

Content

---
id: project.advisors-are-optional
version: 1
kind: rule
title: Advisors are optional; reasoning, governance and CI never depend on one
description: No external or local model is required for Majordomus to boot, enter a repository, run doctor, generate, validate or test, or for a session to reason, decide, implement and validate. An advisor's absence, timeout, rate limit or refused credential is recorded state that changes how much independent review is available, never whether the work can be done.
statement: Name advisory capabilities, never advisors, in reasoning code; derive availability from presence and recorded outcomes; treat no advisor as an ordinary plan; and keep every model credential out of CI.
status: active
class: blocking
depends_on: [project.empty-is-not-failure@1]
tags: [reasoning, advisors, providers, ci]

x-majordomus:
  tests: [test/cases/730_reasoning_works_with_no_advisor.sh, test/cases/731_advisor_transport_contract.sh, test/cases/733_advisor_failure_and_recovery.sh, test/cases/735_a_new_advisor_needs_no_consumer_edit.sh]
---

# Rationale

The owner's review protocol was a sequence of vendor names in one worker's private notes.
The first time it was run through code, in the session that built ADR 0098, one advisor's
credential was a placeholder and another refused to run in an untrusted directory. A
workflow written as "ask this one, then that one" would have stopped there. Recorded as
`auth_failed` and `error`, the two failures cost one bounded wait each, and the work went
on.

# Required behaviour

1. **Capabilities, not names.** Reasoning code, its capability, its command, its Cockpit
   page and the transport's contract and driver name advisory capabilities. Which advisor
   provides one is `share/advisors.yaml`'s answer, in its declaration order.
2. **Absence is a status.** An advisor is `available`, `unavailable`, `not_configured`,
   `disabled`, `temporarily_failed` or `rate_limited`, each with its reason. None of these
   is a failure of the repository; `doctor` reports them as information.
3. **No advisor is a plan.** Material uncertainty with no suitable advisor gets the
   structured local review, and the session concludes, implements and validates.
4. **Failures are bounded and recorded.** Every exchange has a deadline; its outcome is a
   record; repeated failures open a circuit that closes after its cooldown.
5. **Nothing required calls a model.** Entry, `doctor`, generation, validation and CI make
   no model call, and no workflow or gate names a model credential.

# Failure behaviour

`majordomus reasoning check` exits 10 on provider-independent code naming an advisor, an
adapter the catalogue names with no module, a catalogue reference that resolves to nothing,
or CI naming a model credential; `doctor` fails on the same findings.