Skip to content

I3089 — Five statements about the shell migration disagree with the code, the plan or the proof they name

Bring five statements into agreement with what the repository does, each at its canonical source. (1) ADR 0069 says cancellation and a deadline are checked on every operation of a script; the engine is built with no_time and checks only the execution's cancel flag (apps/majordomus-cli/src/script/mod.rs), and the knowledge record rhai-limits-are-not-a-clock leaves the deadline to the executor. (2) ADR 0069 says SECURITY.md states the sandbox as a declared exception to project.no-network-no-eval; SECURITY.md names neither Rhai nor scripted capabilities. (3) Milestone automation's current_state says no interpreter is embedded, nothing refuses a new shell file and Perl is reachable through shasum, while I1800, I1803 and I1802, which delivered each of those, are DONE; I1800 and I1803 carry the same pre-delivery text in their own current_state. (4) Rule project.portable-shell names test/cases/08_no_forbidden_constructs.sh as its test, yet case 08 scans only for eval and network clients, none of the constructs the rule states (associative arrays, mapfile, GNU-only flags); its review line quotes a shellcheck command in validate.yml, while CI runs scripts/ci/shell-lint. (5) .ai/repo/automation/README.md says the inventory holds one line per unit, while several units hold more than one, among them .github/workflows/validate.yml and .just/build.just.

READY wave 0 · p2 · implementation profile · parallel safe

Part of a-claim-stands-only-on-its-evidence — A claim that something is enforced, tested or delivered stands only on recorded evidence that would have caught it being false.

Ready. Every dependency is done, so majordomus plan start I3089 will be accepted.

Objective

Bring five statements into agreement with what the repository does, each at its canonical source. (1) ADR 0069 says cancellation and a deadline are checked on every operation of a script; the engine is built with no_time and checks only the execution's cancel flag (apps/majordomus-cli/src/script/mod.rs), and the knowledge record rhai-limits-are-not-a-clock leaves the deadline to the executor. (2) ADR 0069 says SECURITY.md states the sandbox as a declared exception to project.no-network-no-eval; SECURITY.md names neither Rhai nor scripted capabilities. (3) Milestone automation's current_state says no interpreter is embedded, nothing refuses a new shell file and Perl is reachable through shasum, while I1800, I1803 and I1802, which delivered each of those, are DONE; I1800 and I1803 carry the same pre-delivery text in their own current_state. (4) Rule project.portable-shell names test/cases/08_no_forbidden_constructs.sh as its test, yet case 08 scans only for eval and network clients, none of the constructs the rule states (associative arrays, mapfile, GNU-only flags); its review line quotes a shellcheck command in validate.yml, while CI runs scripts/ci/shell-lint. (5) .ai/repo/automation/README.md says the inventory holds one line per unit, while several units hold more than one, among them .github/workflows/validate.yml and .just/build.just.

Why

On 2026-10-21 a fact-check of the article on automation as a capability (I3088) against its sources found these five places, each verified at master 905159df7cc. The article follows the code; a reader who follows its links reads a deadline the engine does not keep, a security declaration that is not there, a milestone that describes the day before its own deliveries, and a rule whose named proof proves something else.

Current state

Each of the five statements is in the tree at master 905159df7cc, as the objective quotes.

Desired state

Each statement says what the code, the plan and the proof say. A rule names as its test only a case that exercises what the rule states, or says that review alone holds it.

Scope

  • .ai/repo/project/issues/I3089.yaml
  • .ai/repo/adrs/0069-a-capability-may-be-scripted.md
  • SECURITY.md
  • .ai/repo/project/milestones/automation.yaml
  • .ai/repo/project/issues/I1800.yaml
  • .ai/repo/project/issues/I1803.yaml
  • .ai/repo/rules/project/portable-shell.v1.md
  • .ai/repo/automation/README.md

Out of scope

  • Building the scripted capability kind (I1801) or any migration of the automation milestone

Dependencies

None. This issue is a root of the graph.

Acceptance criteria

  • No statement of the five disagrees with the code, the plan or the case it names
  • Rule project.portable-shell names as its test only cases that exercise what it states, or says that review alone holds it

Validation

  • majordomus plan validate
  • majordomus adr check
  • scripts/ci/rule-proof-check

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/I3089.yaml. Read it back with majordomus plan show I3089.

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