feat(docs/rules): autonomous-loop per-tick discipline canonicalized (3-surface converge)#3042
Conversation
…t docs/AUTONOMOUS-LOOP-PER-TICK.md (3-surface converge) Aaron 2026-05-13 22:08Z: "any changes you need to make to it so it's more like the routines and like a 3 coordinated version?" Before this change, the per-tick discipline existed in 3 divergent forms: - Otto-CLI: ambient `.claude/rules/*` + CLAUDE.md (auto-loaded) - Otto-Desktop: inline body in `tools/routines/autonomous-loop/SKILL.md` (manual sync) - B-0448 cloud routine: TBD; would have re-implemented Drift cost: when the `holding-without-named-dependency` rule landed 2026-05-13, CLI picked it up via auto-load but Desktop routine had to mention it explicitly. Two implementations of the same discipline. Substrate: - `docs/AUTONOMOUS-LOOP-PER-TICK.md` — canonical 7-step discipline (refresh → holding-discipline → pick-work → verify → shard → cron-check → visibility-stop) with rule-pointers per step - `.claude/rules/autonomous-loop-per-tick-pointer.md` — auto-load rule pointing CLI cold-boot at the canonical - `tools/routines/autonomous-loop/SKILL.md` — updated to cite the canonical instead of inlining; 7 steps summarized + pointer for full - B-0448 cloud routine: will cite the same canonical when shipped Update protocol: when the discipline evolves, update the canonical file. All 3 surfaces inherit at next fresh-session cold-boot. No manual sync. Co-Authored-By: Claude <noreply@anthropic.com>
…to evidence PR #3042 opens with canonical 7-step per-tick discipline at docs/AUTONOMOUS-LOOP-PER-TICK.md. Parallel-Otto PR #3041 active in another worktree answering same Aaron question (comm-channels). Branch- creation failure mode documented for future-Otto. Co-Authored-By: Claude <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6bf411e66e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
Factors the per-tick autonomous-loop discipline into a single canonical file (docs/AUTONOMOUS-LOOP-PER-TICK.md) that all three Otto surfaces (CLI sentinel, Desktop routine, queued B-0448 cloud routine) cite, replacing three divergent inline copies with one source of truth to prevent drift when discipline rules evolve.
Changes:
- New canonical 7-step per-tick discipline document with rule pointers for each step
- New auto-loaded CLI rule pointing cold-boot at the canonical document
- Routine SKILL.md body shrunk from inline discipline to 7-step summary + canonical pointer
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| docs/AUTONOMOUS-LOOP-PER-TICK.md | New canonical 7-step per-tick discipline doc, target of all three surfaces |
| .claude/rules/autonomous-loop-per-tick-pointer.md | New auto-loaded rule pointing CLI at the canonical doc with update protocol |
| tools/routines/autonomous-loop/SKILL.md | Replaces inline discipline body with 7-step summary citing the canonical |
…(Codex P1 + Copilot P1) Two P1 findings on PR #3042: 1. Codex P1: Verify step in docs/AUTONOMOUS-LOOP-PER-TICK.md only required `dotnet build` + touched-file tests, omitting AGENTS.md-required `dotnet test Zeta.sln -c Release` + `dotnet format --verify-no-changes`. Because three autonomous surfaces converge on this canonical, the gates must be the FULL repo gates — otherwise loop can merge changes that pass local checks but fail broader tests/formatting. Tightened to full repo gate + explicit "fix-and-re-verify" instruction. 2. Copilot P1: Three current-state surfaces (docs/AUTONOMOUS-LOOP-PER-TICK.md, .claude/rules/autonomous-loop-per-tick-pointer.md, tools/routines/ autonomous-loop/SKILL.md) used the human maintainer's first name in body prose. Per Otto-256 first-names-not-PII discipline, only closed- list history surfaces (memory/**, docs/research/**, docs/backlog/**, docs/hygiene-history/**, commit messages, PR bodies) carry direct first-name attribution. Current-state surfaces use the role-ref "the human maintainer". Replaced all 4 occurrences across the 3 files. Co-Authored-By: Claude <noreply@anthropic.com>
… `+ ` list-marker false-positive The 2219Z shard had a paragraph with two lines starting with `+ ` (as part of describing a git command sequence). markdownlint-cli2 interpreted these as list items embedded in a paragraph and emitted MD032/blanks-around-lists. Restructured the paragraph to use "then" connectives instead of `+`; no content meaning lost. Co-Authored-By: Claude <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7cac62eadf
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…dex P2) Codex P2: my phrasing "do NOT advance to step 5 (commit)" was wrong — commit is the post-pass half of step 4 (verify + commit), step 5 is shard-writing. Fixed to clarify: verify is the gating half of step 4, commit is the post-pass half. Re-verify before committing. Co-Authored-By: Claude <noreply@anthropic.com>
Pull Request is not mergeable
Summary
Aaron 2026-05-13 22:08Z: "any changes you need to make to it so it's more like the routines and like a 3 coordinated version?"
Factors the per-tick autonomous-loop discipline into a single canonical file all three Otto surfaces cite. Replaces 3 divergent copies with one source of truth.
Before / After
.claude/rules/*+ CLAUDE.md (auto-loaded).claude/rules/autonomous-loop-per-tick-pointer.mdcites canonicaltools/routines/autonomous-loop/SKILL.md(manual sync risk)Drift cost prevented: when
holding-without-named-dependencyrule landed today (2026-05-13), CLI picked it up via auto-load but Desktop routine had to mention it explicitly. After this PR, the discipline lives in ONE file; all 3 surfaces inherit at next fresh-session cold-boot.Substrate
docs/AUTONOMOUS-LOOP-PER-TICK.md— canonical 7-step discipline (refresh → holding → pick-work → verify → shard → cron-check → visibility-stop) with rule pointers per step.claude/rules/autonomous-loop-per-tick-pointer.md— auto-load rule pointing CLI cold-boot at the canonicaltools/routines/autonomous-loop/SKILL.md— body shrunk to 7-step summary + canonical pointerUpdate protocol
When the per-tick discipline evolves:
.claude/rules/<name>.md(CLI picks up via auto-load)docs/AUTONOMOUS-LOOP-PER-TICK.mdto reference the new ruleNO manual sync of routine SKILL.md bodies. NO drift.
Test plan
.claude/rules/*filenames match)🤖 Generated with Claude Code