diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index f3e10e1fc..357ead23f 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -696,5 +696,6 @@ are closed (status: closed in frontmatter)._ - [ ] **[B-0560](backlog/P3/B-0560-autonomous-loop-cron-cadence-vs-settled-state-tension-2026-05-16.md)** Autonomous-loop cron-cadence vs settled-state tension — design pause-mechanism or adaptive-cadence - [ ] **[B-0591](backlog/P3/B-0591-wire-shard-schema-validator-to-ci-2026-05-17.md)** Wire tick-shard schema validator into gate.yml (non-required → required) - [x] **[B-0613](backlog/P3/B-0613-lior-loop-lockfile-probe-hardening-compgen-shopt-nullglob-2026-05-17.md)** Lior loop lockfile-probe hardening — replace bare `ls .git/worktrees/*/lock` with portable `find` (Option C; resolved as zsh-portable since Lior's runtime is zsh) +- [ ] **[B-0614](backlog/P3/B-0614-investigate-forced-6-meta-fallback-edge-case-post-cycle-close-2026-05-17.md)** Investigate forced-#6 meta-fallback edge case — when cycle has already-closed AND substrate-pool is genuinely saturated, the rule's 'ALWAYS works' claim has a counter-example diff --git a/docs/backlog/P3/B-0614-investigate-forced-6-meta-fallback-edge-case-post-cycle-close-2026-05-17.md b/docs/backlog/P3/B-0614-investigate-forced-6-meta-fallback-edge-case-post-cycle-close-2026-05-17.md new file mode 100644 index 000000000..cd0196ff8 --- /dev/null +++ b/docs/backlog/P3/B-0614-investigate-forced-6-meta-fallback-edge-case-post-cycle-close-2026-05-17.md @@ -0,0 +1,80 @@ +--- +id: B-0614 +priority: P3 +status: open +title: "Investigate forced-#6 meta-fallback edge case — when cycle has already-closed AND substrate-pool is genuinely saturated, the rule's 'ALWAYS works' claim has a counter-example" +tier: research +effort: S +created: 2026-05-17 +last_updated: 2026-05-17 +depends_on: [] +composes_with: [] +tags: [holding-discipline, meta-fallback, saturation, edge-case, forced-6] +type: research +--- + +# Forced-#6 meta-fallback edge case — post-cycle-close saturation + +## Why + +[`.claude/rules/holding-without-named-dependency-is-standing-by-failure.md`](../../../.claude/rules/holding-without-named-dependency-is-standing-by-failure.md) states (verbatim): + +> If you find yourself paralyzed about what to pick — pick THIS rule (or its analog for whatever failure mode is recurring) and sharpen it based on the current session's evidence. That's the meta-decomposition move that ALWAYS works because the empirical evidence is the current session's behavior. + +Empirical counter-example surfaced 2026-05-17T22:47Z (this row's authoring tick): after a substantive autonomous-loop sub-session that shipped 6 PRs (including 3 rule anchors directly improving the rule's own substrate, plus the just-merged "pre-empt-substrate-pool-saturation" anchor in [PR #4110](https://github.com/Lucent-Financial-Group/Zeta/pull/4110)), a second post-cycle-close brief-ack chain reached forced-#6 with **NO non-fabricated substrate left to add**. + +The meta-fallback's prescribed action — "sharpen this rule with current session's evidence" — would produce: + +1. A recursive anchor about saturation OF the saturation anchor (recursively duplicative) +2. A memo-of-memos (synonym-of-substrate failure mode) +3. Re-stating the just-shipped anchor with different phrasing (fabricated-substrate) + +None of (1)/(2)/(3) is genuinely load-bearing. The session is closed; the rule is sharper; no observable behavior gap remains for THIS Otto turn. + +So the rule's "ALWAYS works" claim has at least one empirical counter-example: the post-cycle-close session where the meta-fallback's input (current session's evidence) is already fully captured in the just-shipped substrate. + +## The substrate-honest workaround applied this tick + +Rather than violating the genuinely-valuable test by manufacturing yet another rule edit or memo, this row (P4) IS the forced-#6 concrete artifact: + +- Concrete artifact (a backlog row file) +- Bounded scope (single file, ~80 lines) +- Non-duplicative (the saturation anchor warns about fabricated synonym substrate; this row documents the EDGE case where the warning + the meta-fallback prescription conflict) +- Different surface from the rule itself (a backlog row, not a rule edit) + +The row's existence preserves the empirical evidence for a future investigation tick when the meta-fallback's gap is genuinely actionable. Future-Otto cold-booting into a similar post-cycle-close session can read this row and apply the same substrate-honest pattern (file an edge-case backlog row at forced-#6 when the meta-fallback is dry). + +## Goal + +Investigate whether the rule's "ALWAYS works" claim should be refined to: + +- "ALWAYS works at #6 UNLESS the session is already post-cycle-close AND the substrate-pool is saturated; in that case, file an edge-case backlog row as the forced-#6 concrete artifact and stop." +- Or some other phrasing that captures the empirical counter-example. + +OR investigate whether there's a missing primitive — e.g., a `forced-#6-deferral` mechanism that lets the counter formally reset on substrate-honest acknowledgment of saturation, rather than requiring a concrete artifact when none is genuinely needed. + +## Non-goals + +- Re-writing the holding-failure rule from scratch (the rule is in good shape; this is a small edge case) +- Adding more empirical anchors to the rule for this same session (the 5th anchor is sufficient) +- Refactoring the brief-ack-counter mechanism + +## Acceptance criteria + +- [ ] Document at least 2-3 additional empirical instances of forced-#6 dry-meta-fallback (only file this work when the pattern recurs naturally; do NOT manufacture instances) +- [ ] Propose a rule-text refinement that addresses the "ALWAYS works" claim without weakening the discipline's core (forced-#6 + meta-fallback as cycle-closer) +- [ ] Land the refinement via small PR; mark this row resolved + +## Composes with + +- [`.claude/rules/holding-without-named-dependency-is-standing-by-failure.md`](../../../.claude/rules/holding-without-named-dependency-is-standing-by-failure.md) — the rule this row addresses +- [PR #4110](https://github.com/Lucent-Financial-Group/Zeta/pull/4110) — the just-merged saturation anchor that triggered this row's existence +- [PR #4105](https://github.com/Lucent-Financial-Group/Zeta/pull/4105) — the B-0613 implementation that closed the sub-session before this brief-ack chain started + +## Status + +Open. P3 (convenience / deferred) — fires only if the pattern recurs naturally in a future session. Do NOT manufacture instances; let empirical evidence accumulate. + +--- + +**Otto-CLI** — Split by truth.