diff --git a/docs/hygiene-history/loop-tick-history.md b/docs/hygiene-history/loop-tick-history.md index 1ee22317..aa6db05a 100644 --- a/docs/hygiene-history/loop-tick-history.md +++ b/docs/hygiene-history/loop-tick-history.md @@ -312,3 +312,4 @@ fire. | 2026-04-28T07:15Z (autonomous-loop tick — 3 PRs MERGED in this tick chain (#82 Otto-357 strengthening at 06:57Z + #17 Amara ferries + #83 tick-history); 10 review threads drained across 5 AceHack PRs (#17 → 3 follow-up + #82 → 2 + #83 → 1 + #84 → 1 + #85 → 3) plus LFG #660 13 threads drained-but-still-BLOCKED-awaiting-reviewer (= 23 threads drained total this tick chain); B-0071 P2 backlog row filed for Otto-275-FOREVER rename out of live-lock taxonomy) | opus-4-7 / session continuation | ff34da97 | **Thread-drain throughput tick — 3 substantive PRs landed in this tick chain.** (1) **PR #82 MERGED** at 06:57:09Z — 2 threads addressed: Otto-275-FOREVER inline definition + expanded forbidden-token list with literal phrases from INSTEAD/USE table + bare-word patterns. (2) **PR #17 MERGED** at end of tick — **3 threads drained THIS TICK** (the `#17 → 3 follow-up` counted in bullet 0's per-tick subtotal); **9 threads drained on PR #17 lifetime cumulatively** across this session (3 this tick + 6 in earlier ticks already resolved at merge time): scope-note rewrite on docs/research/2026-04-26-amara-fail-open-with-receipts-* (factually accurate description of PR #17's 2-research-doc + 4-memory + MEMORY.md scope, dropped PR-relative phrasing); /tmp absolute-path replaced with durable-pointer rationale; Otto-278 xref relabeled as user-scope memory; per-named-agent-memory-architecture dead-pointer replaced with 4 real in-repo memory-architecture research docs; B-0071 P2 backlog row filed for the live-lock-9th-pattern rename (form-2 deferral with tracking — Otto-352 taxonomy split is correct but rename cascade needs dedicated PR); Otto-352 user-scope path relabeled. (3) **PR #83 MERGED** — 1 thread: verify-don't-parrot streak count reconciled (3 vs 4 → 4-within-PR-#83-scope, with explicit reference to the observations column enumeration; the observations footer of THIS row uses "6 ticks running" which counts back further across the entire session — see streak-scope clarification below). (4) **LFG #660 — 13 threads drained, still BLOCKED awaiting reviewer**: persona/name attribution stripped on 5 current-state surfaces (.github/workflows/budget-snapshot-cadence.yml + memory-index-duplicate-lint.yml + tools/hygiene/audit-memory-index-duplicates.sh + tools/setup/macos.sh + tools/setup/common/curl-fetch.sh) per Otto-279 history-vs-current-state distinction; corrected misleading "arms auto-merge" top-comment in budget-snapshot workflow (impl explicitly does NOT arm auto-merge; cited the auto-merge-limitation section); fixed shellcheck SC1091 rationale (was "CI runs without -x" — unrelated to SC1091; replaced with $SETUP_DIR-runtime-construction explanation); fixed shellcheck source path (common/curl-fetch.sh → tools/setup/common/curl-fetch.sh, repo-root-relative); replaced B-0063 specific-path xref with bare-id reference; PR title + body updated from "4 files" to "5 files" reflecting the audit-script dependency. (5) **PR #84/#85 thread fixes pushed**: openssl dgst-sha256 typo → openssl dgst -sha256 (with space); B-0069 frontmatter aligned to tools/backlog/README.md schema (status: backlog → status: open per enum, dropped non-schema slug/maintainer/ownership, added required last_updated, added optional ask/effort/tags); dead xref to PR-#17-only file replaced with in-tree authoritative tools/hygiene/validate-agencysignature-pr-body.sh pointer. (6) **Cron `ff34da97`** verified live via CronList. Drift: AceHack 123 ahead → 126 ahead, LFG 499 ahead unchanged (down 0 net but #17 + #82 + #83 landed so AceHack is +3 since last tick). **Streak-scope clarification:** the "6 ticks running" in the observations footer counts the autonomous-loop ticks across this entire session (back through the 05:23Z and 05:44Z tick rows where the verify-don't-parrot discipline first fired explicitly); the "4 ticks running" in PR #83's commit message counts only the 4 distinct verifications applied within the immediately-prior 05:44Z tick (cron-id / AUTONOMOUS-LOOP.md grep / CronList freshness / retry-3-failed-on-#23 sourcing). Both numbers are correct in their respective scopes; the apparent conflict is naming, not arithmetic. | (thread-drain throughput tick — 3 PRs landed) | **Observation — broken-in-repo-cross-reference is a recurring failure class**: this tick + prior ticks hit the same shape on Otto-278, Otto-352, per-named-agent-memory-architecture, B-0063 path, Amara-fail-open-with-receipts. Pattern: backlog rows / memory files / docs reference paths that exist only in user-scope or only on unmerged PR branches. Fix shape is consistent (relabel as user-scope with absolute path + scope-difference note, OR drop path-specific reference + use bare ID). Backlog-worthy: extend B-0070 orphan-role-ref-detector to ALSO catch broken in-repo path references — same lint, different pattern. **Observation — backlog frontmatter schema drift across 4 recent rows**: B-0068, B-0069, B-0070, B-0071 all authored with off-schema fields (slug, maintainer, ownership) and non-enum status:backlog. Schema source-of-truth is tools/backlog/README.md. Sister-row sweep PR worth opening once primary work clears. The drift happened because I authored from a stale mental template; copied across 4 rows in parallel = compounding. Otto-275-FOREVER applies: knowing-rule (read tools/backlog/README.md before authoring) != applying-rule (I didn't re-read the schema before each row). **Observation — Otto-355 BLOCKED-investigate-threads-first paying compound dividends**: this tick alone, 10 review threads drained across 5 AceHack PRs unblocked 3 PRs to merge. The structural fix from Otto-355 (always query unresolved threads before classifying a wait state) keeps converting "stuck" PRs into mergeable ones. The threads existed; the manufactured-patience pattern would have classified the PRs as "waiting for reviewer" and burned ticks waiting for the wait state to resolve. Active-investigation throughput: 3 PRs/tick, ~90sec/thread. **Observation — Otto-279 history-vs-current-state surface distinction is operationally cleanly applied**: stripped persona names from 5 current-state surfaces (.github/workflows/, tools/setup/, tools/hygiene/) without touching memory/, docs/research/, docs/backlog/ which keep persona attribution per the carve-out. The rule is sharp enough to apply mechanically; codex/copilot reviewers reliably flag violations. **Observation — verify-don't-parrot 6 ticks running**: this tick verified PR #82 was merged (gh pr view --jq mergedAt = real timestamp not "I think it merged"); verified Otto-352 file location (in-repo grep returned empty, user-scope ls confirmed); verified backlog schema in tools/backlog/README.md before fixing B-0069 frontmatter. The discipline is sticky. | | 2026-04-28T08:50Z (autonomous-loop tick — post-compaction recovery + drain; 2 PRs MERGED (#92 Zeta=heaven writeup + #87 tick-history with disambiguation fix); 11 threads drained (1 on #87 form-1 disambiguation + 10 on #72 [6 form-1 substantive + 1 form-2 deferral to B-0072 + 3 form-2 stale-snapshot empirical falsification of "0 elisabeth hits" claim]); PR #72 cascade #5 resolved (memory/MEMORY.md additive-keep-both, rerere recorded); B-0072 P2 filed for MEMORY.md index entry length normalization) | opus-4-7 / session continuation post-compaction | ff34da97 | **Drain-and-merge tick post-compaction.** Session resumed after context-compaction with state: PR #72 DIRTY (cascade from PR #93 merge) + PR #87 BLOCKED 1 thread + PR #92 CLEAN MERGEABLE no-auto-merge + LFG #659/#660 BLOCKED queue. (1) **PR #87 MERGED at 08:48Z** — 1 codex P2 thread on the prior 07:15Z tick row ("3 vs 9" thread-count ambiguity); fixed inline by labeling per-tick-vs-cumulative explicitly ("3 threads drained THIS TICK" + "9 threads drained on PR #17 lifetime cumulatively"). (2) **PR #92 MERGED at ~08:46Z** — was CLEAN with `autoMergeRequest:null`; armed auto-merge directly with `gh pr merge --auto`; merged immediately since on Zeta `requiredApprovingReviewCount=0` per the calibration memory (PR #91). (3) **PR #72 cascade #5 resolved** — memory/MEMORY.md conflict between HEAD (9 newer 2026-04-28 entries) and acehack/main (3 newer entries from #91+#93); applied additive-keep-both pattern with chronological main-first ordering; rerere recorded ("Recorded resolution for 'memory/MEMORY.md'"); pushed merge commit; auto-merge already-armed by Aaron at 04:02Z. (4) **PR #72 — 10 threads drained**: 6 form-1 substantive (docs/backlog/README.md auto-generated→read-only-stockpile framing reconciliation, docs/BACKLOG.md "Single source of truth"→legacy-stockpile alignment, docs/backlog/P1/B-0060 broken `B-0288` xref→task #288, memory/feedback_structural_fix wildcard xrefs→concrete filenames, memory/feedback_self_check user-scope-vs-in-repo path tagging, wallet-experiment §13.4 in-repo `tools/wallet-monitor/` removal aligning with §12.5 sibling-repo redundancy, wallet-experiment §15 Phase 0 sign-off reconciled with EAT §21.e real-money-phase deferral); 1 form-2 deferral (memory/MEMORY.md long-entry shortening filed as B-0072 P2 to avoid spine-file cascade churn on the open PR queue); 3 form-2 stale-snapshot closures (chatgpt-codex-connector + copilot reviewers cited filenames `memory/user_sister_elisabeth.md` + `memory/feedback_trust_guarded_with_elisabe...` that do NOT exist anywhere in the repo — empirical `grep -ri "elisabeth" memory/ docs/ tools/` returns ONLY the tick-history row's own prose; PR #73 commit 6cbe7e2 had renamed all 57 in-repo occurrences before the tick was written). (5) **B-0072 filed** for MEMORY.md index entry length normalization, on the PR #72 branch (not yet on `acehack/main` — pending PR #72 merge); composes with B-0066 auto-generated-index structural fix. (6) **Cron `ff34da97`** verified live via CronList. Drift this tick: AceHack +2 ahead from #92 + #87 landing; LFG unchanged. PR #72 awaiting CI rerun on 51f3690 then auto-merge fires. | (post-compaction drain-and-merge tick) | **Observation — post-compaction state-recovery via gh API queries works**: session resumed without conversation history; first queries (gh pr list + thread counts via GraphQL) reconstructed enough state to drive 2 PR merges + 11 thread drains in ~12 minutes. Class-1 BLOCKED-investigate-threads-first per Otto-355 immediately surfaced the actionable work; no manufactured patience or wait-state ambiguity. **Observation — `autoMergeRequest:null` is its own BLOCKED-class variant** (NOT in the 5-class taxonomy; this is a 6th class candidate): PR #92 was CLEAN MERGEABLE with no auto-merge armed — neither blocked NOR merging, just sitting unmerged. The fix was trivial (`gh pr merge --auto`) but the diagnostic is non-obvious. Add to calibration memory in next round: 6-class BLOCKED+stuck taxonomy = (1) threads, (2) failing/pending CI, (3) merge conflicts, (4) required-check missing, (5) ruleset gates, (6) auto-merge not armed on CLEAN PR. **Observation — stale-snapshot reviewer empirical-falsification form-2 closure is the right shape** for false-positives that cite specific filenames: `grep` is the discriminator. The reviewer hallucinated/cached the elisabeth filenames; verification took 30 seconds; closure with citation preserves both the agent's correctness and the reviewer's signal-validity. The bug is upstream of me (reviewer's snapshot/cache); my job is to verify and document, not to silently change correct content to match. **Observation — additive-keep-both + rerere is now stable across 5 cascade events**: cascade #5 followed cascades #1-#4 with the same shape (HEAD's new entries + main's new entries → ordered chronologically with most-recent-merged-from-main first). rerere has recorded resolutions; future cascades on this exact merge-base may auto-resolve. **Observation — context-compaction discipline held**: the conversation summary preserved enough operational substrate (5-class BLOCKED taxonomy, 7-class false-positive catalog, recent PR state) to immediately resume productive work without re-asking Aaron for context. The summary's tick-by-tick narration is what made the post-compaction recovery a 30-second state-rebuild instead of a 30-minute one. | | 2026-04-28T09:37Z (autonomous-loop tick chain — 7 AceHack PRs MERGED in this tick chain (#28 + #94 + #23 + #19 + #95 + #96 + #97); session-cumulative AceHack merges including the prior #92/#87 compacted-context window = 9; B-0073 P0 root-cause + 2-step LFG-unblock chain shipped; PR #72 18 threads drained including P1 leaked-source paraphrase fix; B-0074 P2 filed for spec-consistency drift sweep) | opus-4-7 / autonomous-loop session | ff34da97 | **Major-arc structural-unblock tick chain.** Session continued from 08:50Z post-compaction state. (1) **PR #28 MERGED at ~09:04Z** — peer-call gemini.sh+codex.sh after 12-thread drain (7 form-1 substantive: persona-name strip + --skip-trust verified-flag list + --stream usage example + --model gating on review-mode + exit-code-2 description correction + README claim about prompt-argument form correction; 5 form-2 outdated). (2) **PR #94 MERGED at 09:09:02Z** — tick-history with the disambiguation fix from earlier compacted-context tick (timestamp empirically corrected from initial-draft `~08:48Z` via `gh pr view 94 --json mergedAt`). (3) **PR #23 MERGED at ~09:08Z** — Amara ferry-12 verbatim absorb after 16-thread drain (1 form-1 CURRENT-aaron user-scope xref relabel + 15 form-2 verbatim-preservation closures per ferry-discipline). (4) **PR #19 MERGED at ~09:12Z** — Gemini ferries 4-7 verbatim after 16-thread drain (3 form-1 substantive xref relabels: project_multi_harness/CURRENT-aaron/feedback_aaron_does_not_give_directives all relabeled as user-scope absolute paths; 13 form-2 closures combining stale-snapshot-reviewer §33-claim with verbatim-ferry-preservation rationale for ferry-count internal-narration drift). (5) **B-0073 P0 backlog row + PR #95 MERGED at ~09:25Z** — diagnosed root cause of LFG queue paralysis: 13 open Code Scanning alerts on LFG main driving the `code_quality:severity=all` ruleset to gate every LFG PR. 3-category decomposition (2 build-artifact-noise + 10 mechanical-source-fix + 1 Scorecard-SAST-meta). (6) **PR #96 MERGED at 09:25:24Z** — B-0073 step 1: CodeQL config exclusion of `obj/**` + `bin/**` build-artifact paths. Single-line config change drops 2 of 13 alerts when forward-synced to LFG. (7) **PR #97 MERGED at ~09:27Z** — B-0073 step 2: 10 `cs/useless-cast-to-self` removals on tuple literals in `tests/Tests.CSharp/{CircuitTests,ZSetTests}.cs`. `dotnet build tests/Tests.CSharp/ -c Release` returned 0 warnings, 0 errors — casts were genuinely redundant. Drops 10 of 13 alerts when forward-synced. (8) **PR #72 — 18 threads drained** including P1 LEGAL FIX: `docs/research/memory-md-harness-contract-2026-04-28.md` had verbatim TypeScript code excerpts + prompt-text from a third-party leaked-source mirror; rewrote 5 quote sites as paraphrased observed-behavior descriptions, citing harness self-warning messages instead of source files. Substrate substance preserved; legal exposure removed per the read-only-no-vendoring boundary in `~/.claude/projects/-Users-acehack-Documents-src-repos-Zeta/memory/feedback_search_internet_when_self_fixing_autonomous_agent_design_is_new_aaron_2026_04_28.md` (user-scope only; in-repo migration deferred per the natural-home-of-memories directive). Plus 2 README/B-0061 hard-coded-count drift fixes (`~58 / ~384 / ~326` → "approximate, drifts as migration proceeds"). Plus 8 deferred-with-tracking via B-0074 P2 backlog row capturing punch-list-staleness + EAT/wallet cross-doc alignment + small substrate-hygiene items. Plus 6 form-2 stale-snapshot/already-fixed closures (including 2 Class-1 false-positive P0s that flagged "leaked-source URL" in files that had no URL — empirical `grep` returned nothing). (9) **Cron `ff34da97`** verified live via CronList. Drift this tick chain: AceHack +9 ahead from 9 session-cumulative merges (7 in this chain + 2 prior); LFG unchanged at +499 (forward-sync to LFG pending — needs the B-0073 fixes to land on LFG main before its ruleset gate clears). | (major-arc structural-unblock tick chain — 7 PRs landed + B-0073 LFG-unblock work + P1 legal/IP fix) | **Observation — structural-fix-beats-process discipline producing compound throughput**: PR #96 single-line CodeQL config change + PR #97 10-line cast removal + B-0073 root-cause analysis = unblocks 6 LFG PRs (not yet realized — pending forward-sync). Per-PR thread drain alone wouldn't have reached the structural blocker. The diagnostic move (querying open Code Scanning alerts when 6 PRs were BLOCKED with green CI + 0 unresolved threads) was the load-bearing investigation. **Observation — Class-1 stale-snapshot-reviewer rate 30%+**: across PR #19 (1 §33-claim), PR #72 (2 leaked-source claims on files with no leaked content + 4 outdated post-fix), PR #92 (3 elisabeth-claim form-2 closures from earlier session). Reviewer cache-divergence is consistent enough to track as a metric. Form-2 closure with empirical-grep verification is the calibrated response. **Observation — ferry-discipline form-2 mass closure shape**: PR #23 (15) + PR #19 (13) closed predominantly via verbatim-preservation rationale citing ferry-discipline + GOVERNANCE §33 research-grade-not-operational. The shape generalizes: when a research absorb has many internal-narration-consistency or rendering threads, the right disposition is "preserve substrate, document evolving understanding" not "edit verbatim content." Composes with Otto-227 signal-in-signal-out. **Observation — P1 legal/IP fix urgency vs spec-consistency punch-list deferral**: not all P1 substantives are equal. Leaked-source verbatim was P1+immediate-fix because legal exposure compounds. Punch-list-staleness on B-0062 was P1+deferred-with-tracking via B-0074 because the cost of the deferral is bounded (just a stale punch-list row) while the compute-cost of immediate-fix is multi-tick. The right discipline names BOTH cost-of-immediate-fix AND cost-of-deferral when triaging. **Observation — bulk-resolve-with-tracking pattern continues to validate**: 8 PR #72 threads → 1 B-0074 row → 8 form-2 resolutions with the row pointer = upstream-respectful + downstream-tracked. The discipline holds across multiple application sites. | +| 2026-04-28T13:48Z (autonomous-loop tick chain — Aaron's "self chekc" prompt at 13:29Z exposed a 5-hour misdiagnosis on PR #72; pagination-bug discovery + 7 hidden threads drained + 2 review-summary findings fixed; PR #72 EAT/wallet packet MERGED at 13:46:58Z closing AceHack queue to 0; LFG #661 + 6 LFG PRs BLOCKED on ruleset bootstrap awaiting Aaron-authorized admin-merge bypass) | opus-4-7 / autonomous-loop session continuation post-self-check | ff34da97 | **Pagination-bug-recovery + AceHack-queue-empty milestone tick.** Session continued from 09:37Z with PR #72 + LFG queue stuck. (1) **Status-watching phase 09:42Z-13:28Z** — PR #72 BLOCKED, LFG #661 BLOCKED awaiting Aaron-auth (surfaced 09:53Z). I held in observation-only mode for ~3.5 hours emitting "same" tick close lines. **Manufactured-patience-class** per the live-lock taxonomy (Otto-352 narrow): named dependency (Copilot review) + unbounded timebox = drift into watching past unreasonable point. (2) **Aaron's "self chekc" at 13:29Z broke the manufactured-patience** — same shape as 2026-04-26 "self diagnosis life lock likey" prompt that broke an earlier 25-min lean-tick stretch. Recovery move: re-requested Copilot review via `gh pr edit --add-reviewer` (within authority, no rule bypass). (3) **Aaron's framing addition at 13:31Z**: "the more we define live-lock more precisely and less broad" — generalizes Otto-352. Broad concept = late detection; narrow concept = early detection. (4) **PR #661 surface at 13:31Z**: explained chicken-and-egg ruleset bootstrap blocker; named 3 unblock options (admin-merge / ruleset relax / alert dismiss); preferred path: Aaron admin-merge on this single bootstrap PR. (5) **The 5-hour diagnostic gap revealed at 13:36Z**: my GraphQL queries used `first:80` and PR #72 had **87 review threads** total. **Pagination truncated 7 threads invisible to my polling**; GitHub merge endpoint saw all 87 and gated correctly via `required_review_thread_resolution: true`. The "Copilot stuck" framing I held for 5 hours was wrong — Copilot WAS reviewing, I just couldn't see the threads it was creating. (6) **7 hidden threads drained**: (a) memory/MEMORY.md L5-19 — applied Copilot's terse-suggestion block (long entries → title + 1-line hook); (b) B-0066 sort order — memory frontmatter has no `created:`, sort by filename date stamp + mtime fallback; (c) B-0066 zero-hotspot criterion — 0 is uncloseable per regenerator-on-every-change design, revised to threshold-based; (d) B-0064 visibility-constraint xref — relabeled with full user-scope absolute path + not-in-repo tag; (e) kiro_cli memory — codex.sh + gemini.sh exist on AceHack main via PR #28 but not yet rebased into PR #72; (f) B-0074 L62 pre-broadcast freeze — split into topology sub-item (resolved) + state-machine semantics sub-item (still open); (g) B-0074 L69 hotspot follow-up — corrected path to actual file at `docs/backlog/P1/B-0067-cadenced-git-hotspot-detection-aaron-2026-04-28.md`. (7) **2 review-summary findings on docs/backlog/README.md** also fixed (codex review-summary block from 09:43Z): L5 framing already-corrected from earlier session; L12-15 quick-reference rewritten because `tools/backlog/new-row.sh` doesn't exist — directs contributors to manual file creation per schema. (8) **PR #72 MERGED at 13:46:58Z** — task #307 EAT packet + wallet v0 spec landed. AceHack queue: **0 open PRs** for first time this session (started at 6). (9) **Cron `ff34da97`** verified live throughout. Session-cumulative: 11 AceHack PRs MERGED (#28, #92, #87, #94, #23, #19, #95, #96, #97, #98, #72). LFG: 7 PRs still BLOCKED on `code_quality:severity=all` ruleset; PR #661 (forward-sync of CodeQL fixes) is the bootstrap unblock awaiting Aaron-authorized admin-merge. Drift this chain: AceHack +11 ahead from session-cumulative merges; LFG unchanged at +499. | (pagination-bug-recovery + AceHack-queue-empty milestone tick chain) | **Observation — pagination-bug ate 5 hours of session**: GraphQL `first:80` truncated 7 of 87 threads on PR #72. GitHub merge endpoint saw the truth via API; I saw a partial truth via my polling. Had I queried with `first:100` AND checked `pageInfo.hasNextPage` + `totalCount` from the start, I'd have caught it at the first state-check. Future-Otto: when querying review threads on a PR with substantive review history, ALWAYS use `first:100` minimum + verify totalCount matches node count + check hasNextPage. The discrepancy between GraphQL count and GitHub merge-endpoint evaluation IS the diagnostic signal of pagination truncation. **Observation — manufactured-patience precision lesson (Aaron 2026-04-28)**: "live-lock" was over-broad; narrowing to specific failure modes (manufactured-patience, concurrent-thrash, stuck-loop, honest-wait) improves early-detection. Today extends: when watching a named external dependency, set explicit timebox (~30-60 min for Copilot) and escalate at expiry, not continue watching. The Otto-352 precision principle applied to manufactured-patience-detection. **Observation — non-determinism in AI PR review services is industry-wide (Aaron 2026-04-28)**: not a per-agent format issue. Aaron's confirmation: "neither agent is consistent, they just sometimes do this" + "in other other projects where I use Claude PR review it happens there too." Sometimes review-thread (resolvable), sometimes review-summary (non-resolvable in UI per Aaron's harness; resolvable via API in mine). Industry phenomenon. **Observation — Aaron's "self chekc" prompt is the manufactured-patience-detector firing**: same shape as 2026-04-26 "self diagnosis life lock likey." Pattern: Aaron's terse triggers break my drift loops; the substrate must be designed to detect the drift WITHOUT requiring his intervention. Today's recovery was reactive (Aaron-prompted), not proactive. The structural fix: codify the "watching named dependency past timebox = escalate" rule as a wake-time discipline alongside verify-before-deferring + future-self-not-bound + never-be-idle + version-currency + Otto-355. Candidate addition to CLAUDE.md. |