LearnNewsExamplesServices
Frontmatter
id11602
titleSubstrate discipline: monkey-patch vs root-cause analysis — anti-pattern naming + V-B-A gate
stateClosed
labels
enhancementdiscussionaiarchitectureneeds-re-triagemodel-experience
assignees[]
createdAtMay 19, 2026, 12:40 AM
updatedAtJun 3, 2026, 7:51 AM
githubUrlhttps://github.com/neomjs/neo/issues/11602
authorneo-opus-ada
commentsCount4
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 3, 2026, 7:51 AM

Substrate discipline: monkey-patch vs root-cause analysis — anti-pattern naming + V-B-A gate

Closed v13.0.0/archive-v13-0-0-chunk-12 enhancementdiscussionaiarchitectureneeds-re-triagemodel-experience
neo-opus-ada
neo-opus-ada commented on May 19, 2026, 12:40 AM

Context

Operator named the pattern explicitly 2026-05-18: "META AND monkey patching. DONE, RESOLVED, and again, and new regression!, and regression of regression! but this time for sure! oopsie, and again."

V-B-A this turn against last 200 merged PRs (2026-05-09 → 2026-05-18, 9 days): 14+ obvious monkey-patch shapes by regex sample alone — defensive null-safety / downgrade-log-level / filter-false-positive / retry-transient / stale-cleanup. Real rate inside the 195 META PRs is likely much higher; many feat() PRs are symptom-fixes wearing feature clothing (e.g., feat(ci): two-layer body-shape validation = monkey-patch for "agents produce malformed PR bodies"; root cause = training-drift on body-shape adherence, addressable at skill layer not gate layer).

Friction

  • Symptom-fix → next symptom surfaces → another fix → regression of fix → counter-regression. No root-cause halt.
  • The recursive pattern compounds: each gate added becomes new substrate that itself accretes new gates.
  • Distinct from monkey-patching at code layer alone; this is monkey-patching at substrate-policy layer (ADR + skill + AGENTS.md) which has higher decay-cost.

Scope

Two complementary moves:

  1. Anti-pattern naming substrate — codify "monkey-patch vs root-cause" recognition in a workflow doc or ADR. Should include:
    • Detector signature: Nth recurring fix in same surface within K weeks
    • V-B-A prompt: "what root cause is this defensive-fix masking?"
    • Halt-and-elevate trigger: defer Nth fix until root cause inquiry runs
  2. Mechanical gate (sibling work) — measurement primitive that flags surface-area recurrence (e.g., gh pr list regex classifier surfacing same scope fix() recurrence)

Should NOT become another monkey-patch (recursive irony). Discipline-substrate, not yet-another-gate.

Acceptance criteria (stub)

  • Anti-pattern named in ADR or workflow doc, scoped to substrate-policy layer
  • Detector signature defined (Nth recurrence in same scope within K weeks → halt trigger)
  • V-B-A prompt template that distinguishes "this is a real symptom-fix" from "this is masking root cause"
  • Cross-references existing related substrate: ADR 0007 compaction taxonomy, AGENTS.md §verify_before_assert, ideation-sandbox Cycle-1 Premise Pre-Flight, post-review-pickup, friction → gold core value

Empirical anchor

  • Operator-direction 2026-05-18 ~22:35Z (Discussion #11598)
  • V-B-A gh pr list --state merged --limit 200 --json number,title against the working tree this turn — 14+ confirmed monkey-patch shapes via regex (null-safety|defensive|downgrade.*log|mute|filter.*false-positive|retry|transient|orphan|stale)
  • Companion: PR #11600 itself is a small instance — Phase 1 "mechanical conversion" missed two stale forms (kebab + title-case §<ref>) that grep should have caught; root-cause = no lint-agents.mjs regex for stale-semantic-form drift. Captured as [TOOLING_GAP] in GPT's review.

Cross-refs

  • Refs #11598 META — friction item NOT previously captured as ticket (operator-correction)
  • Related substrate: ADR 0007, AGENTS.md §friction_to_gold, ideation-sandbox §9.0
  • Related companion ticket: substrate-bandwidth-saturation (sibling)

Priority

Team to triage.

tobiu removed the agent-task:blocked label on May 28, 2026, 12:15 AM