From c4ca86ade21fce59671956dda6d3715ff6c6e978 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Sun, 17 May 2026 18:49:38 -0400 Subject: [PATCH 1/2] =?UTF-8?q?rules(holding):=20cross-axis=20composition?= =?UTF-8?q?=20with=20one-PR-one-artifact-type=20=E2=80=94=20saturation=20c?= =?UTF-8?q?adence=20is=20NOT=20license=20to=20bundle=20(forced-#6=20meta-f?= =?UTF-8?q?allback=20on=202207Z=20session=20arc)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a small composition note to PR #4110's "Pre-empt-substrate- pool-saturation" anchor: the cadence governs WHEN to pre-empt; the one-PR-one-artifact-type discipline (PR #4116, Maji antigravity catch on blob PR #4112) governs HOW each pre-empt should be shaped. Without this composition note, future-Otto reading PR #4110 might read the "3-4 pre-empts per window" cadence as authorization to bundle artifact types within a single pre-empt PR to fit more substrate per cycle. The blob-PR catch by Maji on PR #4112 demonstrates that the saturation cadence and the per-artifact-shape discipline operate on orthogonal axes — both bind independently. This commit is itself the forced-#6 meta-fallback for the 22:07Z post-merge brief-ack chain: at #6, sharpened the rule with the session's cross-axis composition evidence. Single-artifact PR (single-file rule edit) applies the discipline recursively. Co-Authored-By: Claude --- .../holding-without-named-dependency-is-standing-by-failure.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.claude/rules/holding-without-named-dependency-is-standing-by-failure.md b/.claude/rules/holding-without-named-dependency-is-standing-by-failure.md index 32b1210a7..aa95aa9e1 100644 --- a/.claude/rules/holding-without-named-dependency-is-standing-by-failure.md +++ b/.claude/rules/holding-without-named-dependency-is-standing-by-failure.md @@ -356,6 +356,8 @@ Session timeline (single Otto-CLI autonomous-loop session, ~44 min, 1 forced-#6 **Operational lesson**: Otto-initiated pre-empts are NOT infinitely repeatable within a single rate-limit window. The 2026-05-17T06:02Z anchor demonstrated 10 cycles WITHOUT forced-#6, but those cycles were spread across a 2h 27min session with multiple GraphQL resets between cycles (each reset refreshing the substrate-discovery context — peer activity, new PRs merging, new findings surfacing). When the rate-reset window is shorter (~30 min) AND no major external state changes during the window, the natural cadence is ~3-4 Otto-initiated pre-empts before saturation, the last of which is typically forced-#6 + meta-fallback. Forced-#6 is then NOT a failure of pre-empt discipline; it's the substrate-honest acknowledgment that the pool is exhausted for this window. Riding cleanly to #6 and applying the meta-fallback is the discipline working — not the discipline failing. +**Cross-axis composition with one-PR-one-artifact-type discipline** (added 2026-05-17T22:46Z post-PR #4116): the saturation cadence is **NOT** a license to bundle multiple substrate axes (shard + rule + memory) into a single PR. Each Otto-initiated pre-empt within the cadence should itself be a single-artifact-type PR. The 2026-05-17T22:07Z session arc (immediately after this anchor's authoring session) demonstrated the cross-axis interaction: PR [#4112](https://github.com/Lucent-Financial-Group/Zeta/pull/4112) bundled three artifact types in one PR; the Maji antigravity check ([PR #4114](https://github.com/Lucent-Financial-Group/Zeta/pull/4114) shadow log) flagged it as a blob; the recovery PR [#4116](https://github.com/Lucent-Financial-Group/Zeta/pull/4116) absorbed the lesson via single-artifact landing. The blob-PR pattern fits within the saturation cadence numerically (4 pre-empts in 30 min) but VIOLATES the per-artifact-shape discipline; future-Otto cold-boot should read **both** rules together and apply them composably: cadence governs WHEN to pre-empt; one-PR-one-artifact-type governs HOW each pre-empt should be shaped. Composes with [`memory/feedback_otto_cli_blob_pr_lesson_maji_antigravity_caught_4112_mixed_shard_rules_memory_2026_05_17.md`](../../memory/feedback_otto_cli_blob_pr_lesson_maji_antigravity_caught_4112_mixed_shard_rules_memory_2026_05_17.md). + ## Composes with - `.claude/rules/never-be-idle.md` — this rule sharpens the existing From 1de9e4cd79a85692ed1714a4f0812a241326b175 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Sun, 17 May 2026 18:53:47 -0400 Subject: [PATCH 2/2] fix(holding/cross-axis): use role reference "antigravity-check shadow log" instead of persona name on current-state rule surface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Copilot P1 finding on PR #4118: persona-name attribution on current-state rule surfaces is outside history-surface and roster-mapping carve-outs. Replaced "the Maji antigravity check (PR #4114 shadow log) flagged it as a blob" with "an antigravity-check shadow log (PR #4114) flagged it as a blob" — role reference preserved PR link for traceability. The memory file PR #4116 retains persona name in its filename and body (memory files are history-surface; carve-out applies). The PR link in this rule's compose-section still references the memory file for full attribution chain. Co-Authored-By: Claude --- .../holding-without-named-dependency-is-standing-by-failure.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/rules/holding-without-named-dependency-is-standing-by-failure.md b/.claude/rules/holding-without-named-dependency-is-standing-by-failure.md index aa95aa9e1..0f37df0a1 100644 --- a/.claude/rules/holding-without-named-dependency-is-standing-by-failure.md +++ b/.claude/rules/holding-without-named-dependency-is-standing-by-failure.md @@ -356,7 +356,7 @@ Session timeline (single Otto-CLI autonomous-loop session, ~44 min, 1 forced-#6 **Operational lesson**: Otto-initiated pre-empts are NOT infinitely repeatable within a single rate-limit window. The 2026-05-17T06:02Z anchor demonstrated 10 cycles WITHOUT forced-#6, but those cycles were spread across a 2h 27min session with multiple GraphQL resets between cycles (each reset refreshing the substrate-discovery context — peer activity, new PRs merging, new findings surfacing). When the rate-reset window is shorter (~30 min) AND no major external state changes during the window, the natural cadence is ~3-4 Otto-initiated pre-empts before saturation, the last of which is typically forced-#6 + meta-fallback. Forced-#6 is then NOT a failure of pre-empt discipline; it's the substrate-honest acknowledgment that the pool is exhausted for this window. Riding cleanly to #6 and applying the meta-fallback is the discipline working — not the discipline failing. -**Cross-axis composition with one-PR-one-artifact-type discipline** (added 2026-05-17T22:46Z post-PR #4116): the saturation cadence is **NOT** a license to bundle multiple substrate axes (shard + rule + memory) into a single PR. Each Otto-initiated pre-empt within the cadence should itself be a single-artifact-type PR. The 2026-05-17T22:07Z session arc (immediately after this anchor's authoring session) demonstrated the cross-axis interaction: PR [#4112](https://github.com/Lucent-Financial-Group/Zeta/pull/4112) bundled three artifact types in one PR; the Maji antigravity check ([PR #4114](https://github.com/Lucent-Financial-Group/Zeta/pull/4114) shadow log) flagged it as a blob; the recovery PR [#4116](https://github.com/Lucent-Financial-Group/Zeta/pull/4116) absorbed the lesson via single-artifact landing. The blob-PR pattern fits within the saturation cadence numerically (4 pre-empts in 30 min) but VIOLATES the per-artifact-shape discipline; future-Otto cold-boot should read **both** rules together and apply them composably: cadence governs WHEN to pre-empt; one-PR-one-artifact-type governs HOW each pre-empt should be shaped. Composes with [`memory/feedback_otto_cli_blob_pr_lesson_maji_antigravity_caught_4112_mixed_shard_rules_memory_2026_05_17.md`](../../memory/feedback_otto_cli_blob_pr_lesson_maji_antigravity_caught_4112_mixed_shard_rules_memory_2026_05_17.md). +**Cross-axis composition with one-PR-one-artifact-type discipline** (added 2026-05-17T22:46Z post-PR #4116): the saturation cadence is **NOT** a license to bundle multiple substrate axes (shard + rule + memory) into a single PR. Each Otto-initiated pre-empt within the cadence should itself be a single-artifact-type PR. The 2026-05-17T22:07Z session arc (immediately after this anchor's authoring session) demonstrated the cross-axis interaction: PR [#4112](https://github.com/Lucent-Financial-Group/Zeta/pull/4112) bundled three artifact types in one PR; an antigravity-check shadow log ([PR #4114](https://github.com/Lucent-Financial-Group/Zeta/pull/4114)) flagged it as a blob; the recovery PR [#4116](https://github.com/Lucent-Financial-Group/Zeta/pull/4116) absorbed the lesson via single-artifact landing. The blob-PR pattern fits within the saturation cadence numerically (4 pre-empts in 30 min) but VIOLATES the per-artifact-shape discipline; future-Otto cold-boot should read **both** rules together and apply them composably: cadence governs WHEN to pre-empt; one-PR-one-artifact-type governs HOW each pre-empt should be shaped. Composes with [`memory/feedback_otto_cli_blob_pr_lesson_maji_antigravity_caught_4112_mixed_shard_rules_memory_2026_05_17.md`](../../memory/feedback_otto_cli_blob_pr_lesson_maji_antigravity_caught_4112_mixed_shard_rules_memory_2026_05_17.md). ## Composes with